HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
HTML/CSS/FE 모의면접 리스트

HTML/CSS/FE 모의면접 리스트

프론트엔드 필수 면접질문 리스트
  • 피드백 : 5단계이야기가 암기느낌을 많이 준다.(암기한 느낌이 많이 난다.) : + 자연스럽게 말한다. : + 당황하더라도 톤이 일정하게 잘 유지된다. : + 두괄식으로 제시하는 방향 듣기 편하다. : - → 리액트 단방향 개념 제시하면 책임져야한다. 이유가 불명확했다. : - VirtualDOM 개념말할 때 끝까지 마무리 잘 하면 좋을 것 같다. : 프로젝트와 관련있는 개념들을 사례와 같이 이야기하면 좋을 것 같다.
  • 주혜님 피드백 : 1) 서버에서 렌더링 클라이언트렌더링 차이 : 2) 면접관과 핑퐁을 좀 더 하면 좋을 것 같다. : - 요/다 .. 섞어쓰는데 의도하신건가? 스타트업 면접경우에 장점이 될 수도? : + 간결한 설명좋다. : + 머뭇거리는 부분이 없어서, 지식이 탄탄해보 인다는 장점 : - (저도 같은 피드백) 톤이 조금 단조로운 측면
 
  • 한솔님 피드백 (11분) : 브라우저 렌더링 과정과 연관 : 사용자가 빈화면을 보지 않도록 :1) 조금 장황한 느낌이 있었다. 차이점은 공통점을 말하고, 어떤 기준을 중심으로 차이를 설명하면 좋을 듯하다. :2) em설명에서도 조금 장황한 느낌 들었다. 선언식으로 말하면 좋지 않을까 (사소한것) vh, vw 묻지않았지만 이야기한 것이 좋다고 :3) 장점 물어봤을 때, 1문장으로 scss가 무엇이다 말하고 가면 좋지않을까 :4) css in js 에서도 이거는 뭐다! 라고 말하고 나면 장단점 자연스럽게 떠오르고 이어나갈 수 있지않을까 : 번들링 이야기 굳이 필요한가?

면접전 생각할 것

  • 의도를 파악하고 핵심부터 말하는 연습
  • 예상질문 그대로 답변하는 것 보다 어떤 질문이 와도 내가 가진 지식을 가지고 잘 대답할 수 있는 능력이 필요하다. (응용력)

HTML

1.일반적으로 CSS <link> 태그를 <head></head> 태그 사이에 위치시키고, JS <script> 태그를 <body> 태그가 끝나기 직전에 위치시키는 이유가 무엇인가요?
💡
[한 줄] 브라우저 렌더링과정을 고려했을 때 화면을 빠르게 보여주기 위해서라고 생각합니다. [script] script 태그가 body의 마지막 부분에 있는 것은, <head>부분에 존재할 경우 html 파싱이 끝나기 전 script가 실행이 되어 html파싱이 멈추고, 그에 따라 존재하지 않는 DOM요소에 접근하게되어 오류가 발생할 수 있습니다. 따라서 html파싱 중 자바스크립트 파일이 반드시 필요하지 않다면 html파싱 이후에 스크립트가 실행되도록 하여, 오류발생을 막고 빠르게 화면을 보여줄 수 있습니다. [css] 한편 css 태그의 경우 스크립트와 다르게 html 파싱과정을 멈추게 하지 않고, 별도의 css파서가 스타일을 관리하기 때문에 헤드에 위치하도록 합니다. 또 script 가 실행될 때, 스타일이 파싱되지 않는 경우 의도치 않은 화면을 보여줄 수 있기 때문에 보통 body태그에 있는 스크립트에 앞서 실행되도록 합니다.
2. <script> <script async> <script defer> 태그들의 차이점은 무엇인가요?
💡
[script태그] <script> 태그는 브라우저에서 자바스크립트 파일을 다운로드 하고 실행하도록 동작하게 하는 태그를 의미합니다. 일반적으로 script 태그는 <body>태그가 끝나기 전에 위치하여 html파싱 이후 실행되도록 합니다. [script async & defer] script async와 defer 는 head 태그안에 script태그를 넣고자 할 때 사용할 수 있는 script태그의 속성들입니다. [async] script 태그는 스크립트 파일을 다운로드 하는 것과 실행하는 단계가 존재하는데, async 속성의 경우 html파일 파싱과정에서 script태그를 만났을 때, html파싱과 동시에 javascript 파일의 다운로드를 진행합니다. 하지만 곧이어 script 파일을 실행되면서 html파싱은 잠시 중단 됩니다. 또 여러개의 스크립트가 존재할 경우 순서에 상관없이 다운로드 된 파일이 먼저 실행되는 문제가 있습니다. [defer] 이를 보완할 수 있는 태그가 defer 태그라고 할 수 있습니다. defer속성은 html파싱 중 스크립트 태그를 만나면 html파싱과 동시에 스크립트 다운을 진행하되, html파싱 이후에 스크립트를 실행시킵니다. 따라서 html파싱이 중간에 멈추지 않으며, 스크립트도 순서에 따라 실행될 수 있어 이상적이라고 할 수 있습니다. html파싱과 동시에 스크립트 다운, html파싱 이후 스크립트 실행
https://jae04099.tistory.com/entry/HTML-script-태그는-어디에-위치-해야-할까
3. 시맨틱 태그(sementic tag) 에 대해 설명하세요.
💡
[개념] 시맨틱태그는 '목적에 따라 특별한 의미가 부여된 태그' 입니다. [예시] 특별한 목적이 없는 div 혹은 span 태그들과는 다르게 문서의 앞부분임을 명시하는 header, 표가 들어올 것임을 명시하는 table 태그 등이 존재합니다. [장점 & 사용이유] 1) 이렇게 시맨틱태그를 사용하는 것은 예측가능한 코드를 작성하는 것으로 코드의 가독성을 높일 수 있으며, 2) 검색엔진 최적화에 장점이 있습니다. 검색엔진 최적화의 경우 검색엔진이 이 시멘틱태그들을 통해 중요키워드를 선발하고 우선순위를 선발할 수 있도록 합니다. [예시] img, header, nav, aside, section, article, gooter [section VS article] <section> 은 여러 개 콘텐츠의 묶음이고 <article> 은 그 자체로 독립적 콘텐츠이다 [meta태그] 보이지않는 정보를 meta라고함 검색엔진, 웹브라우저는 볼 수 있다. meta charset="UTF-8" 문자열 표준설정 키워드나 description 지정, 저자 정보들 기입가능
 
HTML퀴즈
  • 퀴즈 타이틀
    • HTML 관련 공부도 할 겸 퀴즈 만들어보았습니다. 쉬운 문제 부터 어려운 문제까지 골고루 넣어보았습니다. 재미있게 풀어보세요.
  • Q1
    • HTML의 약자는 HyperTextMarkupLanguage로 웹페이지는 HTML 태그들로 구성된다.
    • HTML은 HyperText Markup Language의 약자입니다. 웹 페이지는 HTML 문서라고도 불리며, HTML 태그들로 구성됩니다. 각각의 HTML 태그는 웹 페이지의 디자인이나 기능을 결정하는데 사용됩니다.
  • Q2
    • HTML의 <a> link에서 새로운 브라우저/탭에 창을 띄우는 코드는 <a href="url" target="new"> 이다.
    • HTML의 <a> link에서 새로운 브라우저/탭에 창을 띄우는 코드는 <a href="url" target="_blank"> 입니다.
  • Q3
    • HTML에서 CSS <link> 태그는 일반적으로 <body>태그의 가장 마지막 부분에 위치한다.
    • CSS <link> 태그는 일반적으로 <head>태그의 사이에 위치합니다. css 태그의 경우 스크립트와 다르게 html 파싱과정을 멈추게 하지 않고, 별도의 css파서가 스타일을 관리하기 때문에 헤드에 위치하도록 합니다. 또 script 가 실행될 때, 스타일이 파싱되지 않는 경우 의도치 않은 화면을 보여줄 수 있기 때문에 보통 body태그에 있는 스크립트에 앞서 실행되도록 합니다.
  • Q4
    • <script> 태그는 브라우저에서 자바스크립트 파일을 다운로드하고, 실행시키는 역할이다.
    • <script> 태그는 브라우저에서 자바스크립트 파일을 다운로드 하고 실행하도록 동작하게 하는 태그를 의미합니다. 일반적으로 script 태그는 <body>태그가 끝나기 전에 위치하여 html파싱 이후 실행되도록 합니다.
      • [ Advance ] <script async>와 <script defer> 는 head 태그안에 script태그를 넣고자 할 때 사용할 수 있는 script태그의 속성들입니다.
        [async] script 태그는 스크립트 파일을 다운로드 하는 것과 실행하는 단계가 존재하는데, async 속성의 경우 html파일 파싱과정에서 script태그를 만났을 때, html파싱과 동시에 javascript 파일의 다운로드를 진행합니다. 하지만 곧이어 script 파일을 실행되면서 html파싱은 잠시 중단 됩니다. 또 여러개의 스크립트가 존재할 경우 순서에 상관없이 다운로드 된 파일이 먼저 실행되는 문제가 있습니다.
        [defer] 이를 보완할 수 있는 태그가 defer 태그라고 할 수 있습니다. defer속성은 html파싱 중 스크립트 태그를 만나면 html파싱과 동시에 스크립트 다운을 진행하되, html파싱 이후에 스크립트를 실행시킵니다. 따라서 html파싱이 중간에 멈추지 않으며, 스크립트도 순서에 따라 실행될 수 있어 이상적이라고 할 수 있습니다.
  • Q5
    • HTML5에 추가된 시맨틱 태그(semantic tag)는 '목적에 따라 특별한 의미가 부여된 태그'를 의미한다.
    • HTML5에 추가된 시맨틱 태그(semantic tag)는 '목적에 따라 특별한 의미가 부여된 태그'를 의미하며, 예측가능한 코드 작성 및 meta 태그를 통한 검색엔진 최적화에 그 방점이 있다.
  • Q6
    • 다국어 속성을 위한 위한 HTML 속성은 <html language="ko"> 이다.
    • 다국어 속성을 위한 위한 HTML 속성은 <html lang="ko"> 입니다.
 

CSS

devOwen링크_짧은면접질문답변
CSS보다 SCSS/SASS가 가진 장점에 대해 설명하세요.
💡
scss는 css를 조금 더 효율적으로 사용하기 위해 자체 문법을 가지고 있는 대표적인 css전처리기 중 하나입니다. [장점[ 1) 변수를 지정함으로 재사용성을 증가 ($color변수) 2) nesting(중첩)을 통해 불필요하게 중복된 selector를 선언하는 것을 막고 가독성을 높일 수 있다. 3)조건문 반복문 등의 간단한 연산가능 4) mixin을 통해 자주쓰는 속성들을 모듈화 할 수 있다. (버튼, 반응형틀) 이러한 CSS전처리기는 재사용성과 시간비용을 줄인다는 점, 유지관리가 용이하다는 장점이 있습니다. 단점) 바드시 컴파일과정 거쳐야 한다는 점
notion image
스타일시트를 쪼개서 관리한다는 것이 mixin 모듈화와 같다
CSS in JS(styled component)의 장단점에 대해서 설명하세요.
💡
[개념] css in Js는 문서단위의 스타일 시트가 아닌 컴포넌트 단위로 스타일 시트를 추상화하여 작성하는 방식으로 js 파일안에서 css를 같이 선언하는 방식을 말합니다. [장점] 1) 컴포넌트 단위의 추상화(모듈화) - 컴포넌트 단위로 React , Vue 같은 컴포넌트 단위에 잘 어울린다. - css 별개로 문서단위로 작성하는 것 해결 - 오직 해당 컴포넌트에만 영향을 주어, 생성 수정 삭제가 자유로움 2) 유지보수의 장점 - 큰 규모의 프로젝트에서 css파일의 코드가 많을 경우 수십개의 스타일 시트를 찾아야하는 문제 - 겹치지 않는 변수명을 짓게 해준다. [단점] 외부 의존성 (초기진입속도) [↔인라인] 인라인은 DOM노드의 속성으로 추가하지만 css in Js는 별도의 style 태그를 생성하고 그 안에 작성코드를 작성한다. selector를 가지므로 js에서 핸들링 가능하다.
https://d0gf00t.tistory.com/22
https://velog.io/@dev-mish-mash/CSS-in-JS-가-좋은-이유
id와 class 셀렉터의 차이점에 대해 설명하세요.
💡
id와 class의 차이는, 유일한 요소를 지정할 때에는 id속성을 사용하고, class는 복수의 요소에 적용할 때 사용한다는 점입니다. (* id의 우선순위가 class 보다 높다)
CSS 박스 모델에 대해서 설명하세요.
💡
box model은 각각의 Object를 넓이와 높이를 가진 박스형태로 나타내어, 브라우저에 배치하기 위한 규칙입니다. 각각의 박스들은 content , padding, border, margin 로 구성된다. content - html태그가 차지하는 공간 (width, height) padding - content의 내부 여백 border - 테두리 margin - 테두리 밖 외부 여백 *기본적으로 padding, border는 width의 포함이 되지 않아, 실제 차지하는 공간의 계산이 어렵기 때문에, box-sizing: border-box 옵션을 주어 width에 padding과 border를 포함시킬 수 있다.
CSS에서 px, em, rem, vh, vw 단위들의 차이점은 무엇인가요?
💡
[px] px은 글꼴 크기 표시하는 표준단위 입니다. px은 화면 크기에 상관없이 고정되어 있기 때문에 반응형 웹등에 적합하지 않고, 화면크기가 고정적인 출력용 파일에서 유리합니다. [em, rem] px과 다르게 상대적인 단위입니다. em은 부모요소의 글꼴 크기를 기준으로 자신의 글꼴 크기가 결정됩니다. 부모요소의 크기가 10px이면 자식요소에서 2em은 20px를 의미합니다. rem은 html 루트요소의 폰트사이즈를 기준으로 하여 글꼴의 크기를 지정한다. 예를 들어 html의 font-size가 10px이라면 2rem은 20px이 된다. [ vh (vertical height) vw(vertical width)] 너비와 높이값을 뷰포트(화면)의 크기를 기준으로 작성할 때 사용한다. 화면에 꽉 차는 크기를 지정할 때 유용하다.
https://tutorialpost.apptilus.com/code/posts/css/css-size-matter/
CSS 레이아웃 기법의 종류와 특징에 대해서 설명하세요. (grid, flexbox)
https://studiomeal.com/archives/533
💡
[flex] flex는 레이아웃을 편하게 잡기 위한 css의 속성으로단방향 레이아웃 설계에 강점이 있습니다. flex는 플렉스 컨테이너라는 부모요소와 플렉스아이템이라는 자식요소를 가지고, 메인축을 지정하여 수평, 수직 정렬을 구현합니다. flex는 요소의 크기가 불분명하거나, 동적인 경우에도 요소를 효율적으로 정렬할 수 있다는 장점이 있습니다. [grid] flex가 단방향 레이아웃 설계라면 그리드는 2차원의 두방향 레이아웃 시스템입니다. grid-template-columns, rows 속성을 통해 각 행과 열의 아이템 개수와 비율을 지정할 수 있으며 row-gap, column-gap 속성을 통해 각 행과 열 사이의 간격을 지정할 수 있습니다.
 
  • flex 명령어 정리
    • Flex Container 속성
    • flex-direction (중심축 설정) : row; column, row-reverse, ...
    • justify-content (메인축방향 정렬) : flex-start, center, space-between
    • align-items (수직축 방향정렬) : flex-start, flex-end, center, baseline

    • Flext Item 속성
    • flex-grow (늘리기- defalut 0 으로 basis값 보다 큰 것허용 안함) : 0보다 큰 수 입력 시 빈공간을 메우게 된다. : basis를 제외한 여백 부분을 grow의 비율만큼 가져감 : 계산 어려우므로 보통 basis에 0을 두어 비율을 준다.
    • flex-shrink (default 1 로 basis보다 작아질 수 있다.) : shrink 0 으로 지정 시 basis보다 작아지지 않아 고정폭을 가진 컬럼을 만들 수 있다. (flex-shrink: 0; width:200px)
    • flex-basis (아이템 기본크기- default auto) : ex) 100px 설정시 100px 안되면 100px로 넘으면 그대로 넘은 값 유지
추가
padding과 margin의 차이
💡
margin은 대상 요소의 외부여백을 의미하고, padding은 대상요소의 내부 여백을 의미합니다.

FE (Frontend)

브라우저 렌더링 (작동) 원리에 대해 설명하세요.
💡
브라우저 동작 원리를 5단계로 설명해보도록 하겠습니다.(어색하다) 원래지식인것처럼 말하기 1단계는 HTML마크업을 파싱하여 DOM트리를 생성하는 단계입니다. 이과정에서 브라우저는 무엇을 그릴지를 결정합니다. 2단계는 CSS마크업을 파싱하여 CSSOM(objectmodel) 트리를 생성합니다. 이 단계에서 브라우저는 어떻게 그릴지 를 결정합니다. 3단계는 DOM과 CSSOM트리를 결합하여 렌더링 트리를 생성합니다. 이 단계에서 브라우저는 '화면에 그려질 것만'을 결정합니다. 4단계는 렌더링트리를 박스모델로 변환하는 과정입니다. 박스모델을 통해 '화면에 어떻게 배치할지'를 결정하는 단계. 5단계는 이 박스모델들을 실제 화면에 페인트하는 단계입니다.
브라우저 호환성을 고려하기 위해서 브라우저렌더링 작업을 이해하여야한다. 또 성능최적화를 위해서 단계별로 생각해볼 수 있다.
https://m.post.naver.com/viewer/postView.nhn?volumeNo=8431285&memberNo=34176766

브라우저 구조

  • 인터페이스, 브라우저 엔진, 렌더링 엔진 , 통신 , 자바스크립트해석기, UI백엔드 + 자료저장소

렌더링 동작과정

1) DOM트리 구축, HTML 파싱
  • 파싱
    • 브라우저가 코드를 이해하고 사용할 수 있는 구조로 변환하는 것
    • 어휘분석 + 구문분석
    • 소스코드 → 파싱 → 파싱트리 → 변환 → 기계코드
    • HTML파서 : HTML 마크업을 파싱트리로 변환 : HTML 마크업을 DOM(document object model)로 객체표현으로 바꿈
      • HTML은 유연하고, 오류에 대한 관용이 있기 때문에, 별도의 파서를 필요로 하고, 이에 따라 HTML토큰들을 정의한다.
      • 브라우저 웹킷에서 html오류들을 자체적으로 수정하여 오류를 처리한다.
    • CSS파싱
      • html과 다르게 문맥자유문법( 정규표현식 + BNF설명)
    • 스크립트 : 웹
  • DOM트리 구축
2) 렌더트리 구축
  • 브라우저는 DOM트리가 구축되는 동안 렌더트리를 동시에 구축한다. 표시순서, 시각적구성요소등의 순서를 정하는 목적
  • DOM트리와 렌더트리 관계 : 1:1은 아니다. head나 display 'none'은 렌더트리에 x
3) 렌더트리 배치
  • 렌더러가 생성되어 트리에 추가될 때 크기와 위치 정보는 없는데 이런 값을 계산하는 것을 배치 또는 리플로라고 부른다
  • 박스사이즈 할당하는 것
4) 렌더트리 그리기
 
웹페이지가 사용자에게 보여지는 과정에 대해서 설명하세요. (처리)
notion image
프로세싱 이전까지가 서버의 과정 프로세싱 이후가 프론트엔드 과정
Client Side Rendering 과 Server Side Rendering 의 차이에 대해서 설명하세요.
💡
[개념] 서버사이드 렌더링은 전통적인 웹 방식이며, 페이지가 새로고침 될 때마다 서버로 부터 리소스를 전달 받아 렌더링 하는 방식입니다. (서버트래픽 많은 문제) 반면 CSR은 React, Vue등의 SPA(SinglePageApplication)의 등장과 함께 클라이언트에서 렌더링을 담당하는 방식을 말합니다. [장단점] CSR은 페이지 전환 시 보다 좋은 성능을 보이지만, 초기에 렌더링에 필요한 모든 파일을 받아오기 때문에, 초기구동속도가 SSR에 비해 느리다는 단점이 있습니다. 또 html파일의 변화를 검색엔진이 감지할 수 없어 검색엔진최적화가 어렵다는 단점이 존재합니다. CSR 단점: 1) 초기 구동속도가 느리다. 2) 검색엔진최적화(메타태그의 수집어려움) 되지않는다.
https://d2.naver.com/helloworld/7804182
SPA의 장점이 무엇인가요?
💡
[개념] SPA(Single Page Application)은 말 그대로 하나의 페이지로 구성된 어플리케이션을 말합니다. 첫페이지 요청 시 단 한번의 리소스를 받고, 그 이후는 새로운 페이지가 아니라 필요한 부분만을 서버로 부터 받아 화면을 갱신하는 방법입니다. [장점] 가장 큰 장점은 첫 페이지 이후 페이지로딩이 없기 때문에, 사용자에게 앱 수준의 자연스러운 경험을 제공할 수 있다는 점입니다. 또 필요한 리소스만 부분적으로 리렌더링 하기 때문에 성능측면에서도 장점이 있습니다. (사용자인터랙션 & 화면 갱신이 많을 경우 SPA를 사용하는 것이 유리하다)
lazy loading 이 무엇인가요?
💡
lazy loading은 지연로딩으로 한 번의 많은 파일을 불러올 경우 로딩시간이 길다는 문제를 해결하기 위해,필요한 리소스만을 우선 받아오고, 나머지 리소스를 추후에 받아오는 기술입니다. [사례] SPA에서 초기구동속도가 느린 문제를 해결하기도 하며, 페이스북 인스타와 같이 많은 이미지를 필요로 하는 경우, 화면에 보여줄 정도의 적절한 양만을 먼저 가져오도록 하는 사례가 존재합니다.
Bundling이 무엇이며 왜 필요한가요?
💡
js에서 '모듈'은 하나의 기능단위로 코드를 묶어놓은 것을 말합니다. '번들링'은 모듈화 되어 있는 자바스크립트 파일들을 묶어준다는 뜻으로, 모듈들이 가지고 있는 코드 순서등의 의존성을 해결하는 역할을 합니다. [웹팩] 번들링을 지원하는 대표적인 번들러는 웹펙이 있습니다.
프론트엔드 입장에서 신경써야 할 보안은 어떤 것들이 있나요? (링크)
CSRF 정의와 예방법
💡
CSRF(Cross-Site Request Forgery)는 공격자가 마치 사용자인 것 처럼 서버에 위조 요청을 하는 공격을 말한다. 사용자를 피싱사이트에 접속하게 하여, 특정 악성 코드가 실행하도록 하는 방법이다. CSRF 공격은referer 검증을 통해 방어할 수 있는데, HTTP의 referer는 방문한 사이트에 대한 정보를 가지고 있어, 요청이 들어왔을 때 피싱사이트에 들어온 것을 발견하여 방어하는 방법이다.
XSS 정의와 예방법
💡
XSS( Cross-Site-Scripting) Xss는 공격자가스크립트를 삽입하여 클라이언트에 저장되어 있는 쿠키,세션의 정보를 탈취하거나, 댓글등에 악성코드를 심어놓는 것을 말한다. 이러한 XSS 공격은 쿠키나세션에 정보를 보관하지 않고 서버에 중요정보를 저장하거나, 해당 정보를 암호화하는 방법으로 방지할 수 있으며, html 코드를 다른 문자열로 변환시켜 스크립트로 실행되지 못하게하는securecoding 방법이 있다.
notion image
React (리액트) 관련 질문 모음입니다. (여기까지할것)
https://velog.io/@dojunggeun/React-interview-questions-15
프로젝트 때 왜 리액트 사용하셨어요?
💡
npm 트렌드를 검색했을 때, 점유율이 가장 높았고. SPA의 대표 프레임워크이기 때문에, 프론트엔드 개발자로서 SPA를 만들어보고 싶은 욕심이 있었습니다.
https://docs.microsoft.com/ko-kr/dotnet/architecture/modern-web-apps-azure/choose-between-traditional-web-and-single-page-apps
개념과 장점, 그리고 컴포넌트란 무엇인가요?
💡
리액트는 페이스북에서 개발한 UI를 쉽게 만들어 내기 위한 js 라이브러리입니다. 1) 리액트는 데이터가 단방향으로 흐르게 동작하는 큰 특징을 가지고 있습니다. (DOM TRee와 같이 뿌리에서 아래로 props) 2) 리액트는 virtual DOM 을 이용하여 리렌더링 시 기존과 달리진 부분만을 변경하여, 성능을 개선합니다. (필요한 부분 최소로 갱신) 3) 컴포넌트 단위로 쪼개어 재사용성, 유지보수 장점 컴포넌트는 하나의 기능단위로 묶여있는 코드의 집합 (재사용가능)
 
리액트의 내부 작동 원리를 설명하세요.
💡
HTML은 브라우저가 문서 객체 모델(DOM)을 구성하기 위해 따라야 하는 절차라고 말할 수 있습니다. HTML 문서를 이루는 엘리먼트는 브라우저가 HTML 문서를 읽어 들이면 DOM 엘리먼트가 되고, 이 DOM이 화면에 사용자 인터페이스를 표시합니다. 리액트는 이러한 DOM 엘리먼트를 직접 조작하지 않습니다. 대신 리액트가 가상 DOM을 생성하고 브라우저가 이를 렌더링하도록 하는 방식을 따릅니다. 이러한 가상 DOM을 리액트 엘리먼트라고 합니다. 리액트 엘리먼트는 개념상 HTML 엘리먼트와 비슷하지만 실제로는 자바스크립트 객체입니다. 따라서 HTML의 DOM API를 직접 다루는 것보다 자바스크립트 객체인 리액트 엘리먼트를 직접 다루는 편이 훨씬 빠릅니다.
notion image
notion image
리액트에 있는 라이프사이클과 각 라이프사이클의 역할을 설명하세요.
💡
생성, 업데이트 ,제거 단계가 존재한다. 중요한 일이 발생할 때마다 렌더를 진행 (최초생성, new props, setState ,..) 라이프사이클 메소드 존재 DOM생성단계에서 렌더이후 호출 componentDid-Mount, DOM업데이트 단계에서 컴포넌트가 업데이트 후(상태변경) componentDid-Update DOM제거단계에서 화면에서 사라지기 전 componentWillUnmount
리액트 라우터 같은 Client side routing 에 대한 설명하세요.
💡
SPA에서 다른 종류의 화면을 보여주기 위해서 주소를 생성하는 것을 클라이언트에서 진행하는 것을 말합니다. 특정 URL로 들어갔을 경우, 특정 페이지 및 컴포넌트를 보여주도록 합니다.
state를 직접 변경하지 않고 setState를 사용하는 이유에 대해서 설명하세요.
💡
state가 변경되었다는 것은 리액트엔진에 알리기 위해서입니다. 만약 컴포넌트의 state를 직접 변경하려고 시도한다면, 리액트는 컴포넌트를 다시 렌더링해야 하는지 알 수 있는 방법이 없습니다. setState() 메소드를 사용하면 리액트는 컴포넌트의 UI를 업데이트할 수 있습니다.
props drilling 이란 무엇인가요?
💡
prop drilling은 부모 컴포넌트에서 하위 컴포넌트(자식 컴포넌트의 자식 컴포넌트 등으)로 데이터를 전달할 때 발생하는 것으로, props를 전달하는 것 외에는 props를 필요로 하지 않는 다른 컴포넌트를 통해 “drilling”(내리꽂기) 됩니다. 컴포넌트를 리팩토링하고, 컴포넌트를 더 작은 컴포넌트들로 쪼개지 않고, state를 가장 가까운 부모 컨포넌트와만 공유함으로써 prop drilling 회피할 수 있습니다. 위계상 멀리/깊게(deep/far)떨어진 컴포넌트와 state를 공유할 때, React의 Context API 혹은 Redux와 같은 state 관리 라이브러리를 사용할 수 있습니다.
리액트 hooks 의 장점은 무엇인가요?
💡
[개념] Hooks는 클래스 기반 컴포넌트의 장점(예를 들면 내부 state와 생명주기 메소드)을 함수형 컴포넌트로 가져오려는 리액트의 시도입니다. [장점] 클래스 기반 컴포넌트, lifecycle hooks, this의 필요성이 사라집니다. 공통 기능을 커스텀 hook로 만들어서 로직을 재사용하기 쉬워집니다. 컴포넌트 자체에서 로직을 분리할 수 있어서 읽기 쉽고 테스트하기 쉬운 코드를 작성할 수 있습니다.
virtual DOM 이 무엇인가요?
💡
Virtual DOM은 애플리케이션의 UI를 구성하는 HTML 엘리먼트를 메모리 내에서 구현한 것입니다. 컴포넌트가 다시 렌더링될 때, virtual DOM은 업데이트할 요소의 목록을 만들기 위해 기존의 DOM 모델에서 변경되는 사항을 비교합니다. DOM 전체를 다시 렌더링할 필요 없이 실제 DOM에 필요한 최소한만 변경하여 효율성이 높다는 것이 큰 장점입니다.
가상돔이 갱신하는 방법은 setState() 함수를 호출하거나 render함수를 통해 직접 돔을 변경할 때
JSX가 무엇인가요?
💡
JSX는 HTML처럼 보이는 코드를 작성할 수 있게 해주는 자바스크립트 문법의 확장입니다. JSX는 자바스크립트 함수 호출 방식으로 컴파일되어 컴포넌트에 대한 마크업을 만들 수 있는 더 좋은 방법을 제공합니다.
이벤트 위임에 대해서 설명하세요.
💡
이벤트 위임이란 다수의 자식요소에 각각 이벤트 핸들러를 바인딩하는 대신에, 하나의 부모요소에 이벤트 핸들러를 바인딩하는 것을 말합니다. DOM에서 li 요소가 아니라 그것을 포함한 ul에 이벤트를 바인딩하는 것과 같습니다. 이벤트위임을 사용하는 이유는 예를 들어 현재 li가 2개만 존재하여 각각 클릭이벤트를 달아주었다고 가정합니다. 이때 li를 새로 1개 추가한다면, 이 li에 클릭이벤트를 주는 코드를 다시 작성해야합니다. 따라서 매번 새로운 추가요소에 대해 특정 이벤트를 달아주는 작업 대신, 그 부모요소에 클릭이벤트를 넣어주고, 자식요소가 부모요소의 클릭이벤트를 받을 수 있도록 해주는 것입니다.
이벤트전파 → 이벤트버블링, 이벤트캡쳐링
https://joshua1988.github.io/web-development/javascript/event-propagation-delegation/
https://ko.javascript.info/event-delegation
  • 이벤트 버블링, 이벤트캡쳐링
    • 브라우저에서 이벤트가 발생한 것을 감지하는 방식
    • 이벤트버블링
      • 특정 요소에서 이벤트 발생시 상위의 요소로 이벤트가 전달되는 특성
      • 같은 이벤트가 등록되어있을 때 상위요소 이벤트도 실행된다
    • 이벤트 캡쳐링
      • 상위요소의 이벤트가 하위요소로 전달되는 특성
      • addEventListener() API에서 옵션 객체에 capture:true 설정
      • 하위요소 클릭해도 상위요소부터 이벤트실행된다.
    • 이벤트 전파 막기위한 방법
      • 이벤트 함수안에 e.stopPropagation() 사용 시 이벤트 전파방지하여 클릭된 부분의 이벤트만 실행
이벤트 버블링이란 무엇이며 막을 수 있는 방법은 무엇인가요?
웹페이지 redirect의 다양한 구현법에 대해서 설명하세요.
사용자가 클릭을 통해 페이지가 이동하면 location.href=""을 사용한다.
HTTP Redirect를 하고 싶으면 location.replace("")를 사용한다. 메타태그
💡
Reflow가 발생하는 이유와 방지 방법은 무엇인가요?
💡
엘리먼트 위치를 전부 1) 돔 엘리먼트 추가 제거, 2) css 변경 3) 유저이벤트 발생
 
 
//JSX <div className="sidebar" /> //JS 변환 React.createElement( 'div', {className: 'sidebar'} )