1주차
HTML
- 일반적으로 CSS 태그를 태그 사이에 위치시키고, JS 태그를 태그가 끝나기 직전에 위치시키는 이유가 무엇인가요?
DOM
:HTML
을 한줄 씩 읽으면서 생성CSSOM
: 코드를 다 읽고나서 생성렌더트리
:DOM
+CSSOM
HTML
파싱 중<link>
를 만나면 병렬적으로 파싱 ⇒ 렌더링 속도 상승, 자원 절약 → 파싱은 동시에 진행되지만 렌더링은CSSOM
DOM
완성 뒤에 →CSS
속성이 파일 뒤에서 추가, 수정될 수 있기 때문<script>
를 만나면HTML
파싱이 일시정지 →DOM
이 완성된 후, JS 파일을 다운로드 할 수 있도록
<script>
<script async>
<script defer>
태그들의 차이점은 무엇인가요?<script>
: HTML 파싱 일시중지 후, JS 다운로드<script async>
: HTML 파싱과 동시에 JS 다운로드. JS 준비 시, HTML 파싱 일시중지 후 즉시 실행<script defer>
:HTML 파싱과 동시에 JS 다운로드. HTML 파싱 완료 후 JS 실행
- 시맨틱 태그(
sementic tag
) 에 대해 설명하세요. 태그의 목적과 의미를 브라우저와 개발자에게 명확하게 설명하는 태그 - 검색엔진의 지표로 활용SEO
- 웹 접근성 - 가독성
DOM
- 개발자도구를 많이 사용하셨다면 주로 어떤 용도로 사용했나요?
-
Performance
브라우저 내부의 동작 측정 (페이지 로드, 렌더링 과정 등) -Elements
HTML, CSS 확인, 수정 가능 -Console
간단한 JS 코드를 실행 가능, 디버깅 가능, 현재 DOM 조작 가능 -Application
LocalStorage
,SessionStorage
,Cookie
의 데이터 확인, 조작 가능 쿠키: 서버가 클라이언트에게 전송, 조작 -Network
네트워크 작업의 상세 내용 확인 가능
- 웹팩과 바벨의 역할에 대해서 설명하세요. 웹팩 JS 어플리케이션을 위한 정적 모듈 번들러. 의존성 있는 모듈을 하나의 파일로 통합 → JS 파일 다운로드 1번으로 압축 (네트워크 병목 현상 해결) → 모듈 단위 개발 가능 바벨 JS 코드 변환기(트랜스파일러) → 구형 웹 브라우저를 지원
event.preventDefault()
의 역할이 무엇인지 설명하세요. 기본으로 정의된 이벤트를 작동하지 못하게 막음
intersection Observer API
가 무엇인지 설명하세요. 관찰하고자 하는 타겟 요소가 최상위 뷰포트의 교차영역에서 변경이 발생할 때마다 실행될 콜백 함수를 호출 →scroll
이벤트를 대체 :scroll
이벤트는 단시간에 너무 많이 호출되어 DOM 조작 등의 무거운 이벤트 수행이 어려움
Bundling
이 무엇이며 왜 필요한가요? 여러 파일, 모듈을 묶어줌 - 단일화로 네트워크 비용 감소 - development, production 모드 지원으로 코드 난독화, 압축, 최적화 가능 - 로더를 통해 하위 브라우저 지원가능
- 이벤트 위임이 무엇인가요? 상위 엘리먼트에서 하위 엘리먼트의 이벤트를 제어
- 이벤트 버블링이란 무엇이며 막을 수 있는 방법은 무엇인가요?
특정 이벤트가 발생했을 때, 해당 이벤트가 상위 요소들까지 전파되는 특성
e.stopPropagation()
으로 중단가능 → 사이트 분석, 이벤트 분석 등도 막힘(비효율적) 차라리 커스텀 이벤트로 제어하자
window.requestAnimationFrame(callback)
의 역할이 무엇인지 설명하세요. 비동기 함수로 브라우조가 실행시기를 결정하여 스스로 반복해서 호출하지 않음
performance API
가 무엇인지 설명하세요. 애플리케이션 모니터링 메서드 -performance.now()
: 페이지 로드 후 경과 시간(밀리세컨드) -performance.mark(name)
: 코드의 특정 부분을 실행하는 데 걸린 시간 마킹 -performance.measure(name, start, end)
: 코드 내 특정 구간을 마킹 & 측정 측정값은performance entry buffer
에 저장 -performance.getEntries()
: 버퍼에 저장된 모든 값 -performance.getEntriesByName(name)
: 버퍼에 저장된 특정 값 -performance.getEntriesByType(type)
: 버퍼에 저장된 값 중 특정타입
JavaScript 기본
- 스코프에 대해서 설명하세요. 변수의 수명을 결정하고 확인할 수 있는 범위 - 전역 스코프 : 최상단 스코프로 이곳에서 선언된 변수는 전역변수로, 어떤 영역에서든 접근 가능 - 지역 스코프 : 전역 스코프에 포함되는 영역. 이곳에서 선언된 변수는 지역변수로 전역변수보다 우선순위가 높다.
- 클로져에 대해서 설명하세요. 내부함수의 변수가 외부함수의 변수에 접근할 수 있는 메커니즘 함수와 함수가 선언된 어휘적 환경의 조합을 통해 만들어진 매커니즘 클로저가 생성된 시점의 유효 스코프 내에 있는 모든 지역 변수로 구성 → 클로저가 포함된 내부함수에서 외부 함수의 스코프에 접근 가능 → 일반적으로 함수가 실행될 때 생성된 컨텍스트는 종료될 때 가비지 컬렉터에게 사라짐 → 하지만 클로저 패턴이 사용되면, 해당 내부함수의 변수가 언제 외부함수의 변수를 참조할지 알 수 없기때문에 가비지 컬렉터의 대상이 되지 않음
- 클로져의 사용 예제를 알려주세요. - 캡슐화 - 커링
- 변수 선언, 초기화, 할당의 차이점에 대해서 설명하세요.
- 선언 : 스코프에 변수를 등록
- 초기화 : 실행 컨텍스트의 변수 객체에 메모리 할당(
undefined
) - 할당 : 초기화된 메모리에 다른 값을 넣음
- 호이스팅과 Temporal Dead Zone이 어떻게 연관되어있는지 설명하세요.
호이스팅 :
var
,let
,const
,function
,class
등으로 선언된 모든 식별자가 코드 맨 위로 끌어올려지는 현상var
: 선언+초기화let
,const
: 선언만. → 스코프의 시작 지점부터 초기화 시작 지점까지 변수를 참조할 수 없는 것이TDZ
- ES6의 주요 변화점에 대해서 설명하세요.
-
let
,const
-template literal
⇒ ` ${ } ` - 화살표 함수 - 비구조화 할당 -...
: default parameter, rest parameter, spread syntax -for ... of
: 반복가능한 객체에서의 반복문
- rest parameters와 spread syntax
rest parameters : 매개변수 앞에
...
를 붙여 정의한 매개변수 spread syntax : 개별적인 값들의 목록,iterable
만 사용 가능
- 원시 자료형, 참조 자료형 - 원시: 변경 불가능한 값 메모리의 고정 크기로 값을 저장하고 해당 주소를 직접 참조 ⇒ 불변성 - 참조: 객체 타입의 값(변경 가능한 값) 값이 할당된 메모리의 주소를 참조
- == vs ===
-
==
: 동등 비교 연산자 암묵적 타입 변환을 통해 타입을 일치시킨 후 값의 동등함 비교(느슨한 비교) -===
: 일치 비교 연산자 값과 타입을 모두 고려하여 동등함을 비교(엄격한 비교)
- 자바스크립트에서 배열의 타입 → 객체 프로토타입 기반의 언어이기 때문 ? 프로토타입
- undefined와 null 그리고 undeclared의 차이
undeclared
: 변수의 선언, 할당 Xundefined
: 변수를 초기화할 때 사용하는 값null
: 변수에 값이 없다는 것을 의도적으로 명시
- 깊은 복사와 얕은 복사의 차이에 대해서 설명하세요. 자바스크립트에서 깊은 복사를 하는 방법은 무엇인가요?
얕은 복사 : 가장 상위 객체만 새로 생성되고, 내부 객체들은 참조 관계인 경우. 주소값을 참조하기 때문에 원본-복사본 영향을 끼침
깊은 복사 : 내부 객체까지 모두 새로 생성된 경우. 원본, 결과본 각각 메모리 할당
- 재귀함수로 복사
-
JSON.parse(JSON.stringify())
- 라이브러리 사용
- let, const, var의 차이와 각각의 사용 방법을 설명하세요.
var
: 재선언O, 재할당O, 선언 + 초기화. 함수 레벨 스코프 → 전역 변수let
: 재선언X, 재할당O, 선언 / 초기화. 블록 레벨 스코프 → 지역 변수const
: 재선언X, 재할당X, 선언 / 초기화. 블록 레벨 스코프 → 지역 변수
- 순수함수란 무엇인가요? 오직 함수의 입력만이 함수의 결과에 영향을 끼침 외부 상태 의존X → side-effect가 없음 조건 - 동일한 인자값을 받으면 항상 동일한 결과 반환 - 어디서 호출되든 동일한 결과 반환 - 외부에 영향을 주지도 받지도 않음
(Optional) 버퍼, 스트림
(Optional) 화살표 함수
2주차
React
- 개념과 장점, 그리고 컴포넌트란 무엇인가요?
UI 구축을 위한 JS 프론트엔트 라이브러리 (SPA제작에 주로 이용)
-
virtual DOM
을 통해 성능업 -CSR
,SSR
지원 가능 - 타 프레임워크와 혼용 가능 ? 컴포넌트 캡슐화, 확장성, 결합성, 재사용성
- 리액트의 내부 작동 원리를 재조정(Reconciliation) 개념과 함께 설명하세요.
실제로 DOM을 조작하지 않고 virtual DOM을 조작
→ 가상돔이 변경되면 실제 DOM을 변경 ⇒ 재조정(Reconciliation)
? 가상돔 갱신 방법
-
setState()
-store
변경으로 최상위 컴포넌트의render()
호출 https://www.youtube.com/watch?v=BYbgopx44vo&t=15s
- 리액트에 있는 라이프사이클과 각 라이프사이클의 역할을 설명하세요.
componentDidMount()
: 최초로 컴포넌트 객체가 생성될 때 한 번 수행componentDidUpdate()
: 컴포넌트의 속성값 or 상태값이 변경되면 호출componentWillUnmount()
: 컴포넌트가 소멸될 때 호출render()
: 초기에 화면에 그려줄 때 & 업데이트 될 때 호출

- 리액트 라우터같은 Client Side Routing 에 대해서 설명하세요. - 클라이언트(브라우저)에서 웹페이지 렌더링 - 서버-클라이언트 간 데이터 트래픽 ↓ - 렌더링 1번 → 페이지 이동 빠름 - SEO 사용 불가 - 쿠키에 사용자 정보 저장 → 보안 위험
- state를 직접 변경하지 않고 setState를 사용하는 이유에 대해서 설명하세요.
불변성 유지를 위해
컴포넌트는 현재의
this.state
와setState
를 비교해서render()
로 갱신 → 직접 수정시 갱신X
- Props Drilling 이란 무엇인가요? props가 여러 컴포넌트를 거치면서 전달 → 추적이 어려움
- 리액트 Hooks의 장점은 무엇인가요? 재사용성, 관리의 용이성, 커스텀 hook 가능
- Class Component와 Function Component의 차이점에 대해서 설명하세요.
class
는 여러 단계의 상속으로 전반적으로 복잡성과 오류 가능성 多 → hooks 도입으로class
의 기존 기능 + 복잡성, 재사용성 등의 단점 개선
- virtual DOM이 무엇인가요? virtual DOM이 좋은 이유에 대해서 설명하세요. 실제 DOM 변화를 최소화 가상돔 사용시 실제 DOM 조작보다 시간복잡도(효율성) 유리 DOM은 여러번의 변화가 있다면 전부 적용 → 가상돔은 과정은 자신이 처리하고 최종 결과물만 DOM에 적용
- JSX가 무엇인가요? JS를 HTML처럼 표현
- 웹 성능 향상을 위해 최적화를 해 본 경험이 있나요? 혹은 useMemo와 useCallback 메소드를 활용해 최적화하는 원리에 대해서 설명하세요.
useMemo
,useCallback
렌더링 할 때마다 메모리가 많이 소모되는 값은 계산Xdependency
리스트를 생성해 그 중 하나가 변경되면 계산 →useMemo
는 값을 기억,useCallback
은 함수를 기억
- React 에서 상태 변화가 생겼을 때, 변화를 어떻게 알아채는지에 대해서 설명하세요. 불변성 특징으로, 상태 객체의 주소값이 변경되면 감지

- 여러가지 상태 관리 라이브러리(Apollo, Redux, MobX)의 차이점에 대해서 설명하세요.
Redux
Flux개념 바탕. 현재 가장 많이 사용되는 State 관리 라이브러리MobX
객체지향 성격이 강하며Component
와State
를 연결하는 코드들(보일러 플레이트 코드)을 데코레이터(애노테이션)제공으로 해결Apollo
GraphQL
기반. 서버는 어떠한 자원을 사용할 수 있는지 정의하고, 클라이언트는 렌더링에 필요한 데이터를 요청 → 꼭 필요한 데이터 교환이 이루어지기 때문에 효과적Redux
는REST API
를 사용하기 때문에 리소스의 크기가 서버에서 결정 → 데이터 교환 복잡, 엔드포인트 증가,overfetching
,underfetching
등의 문제점
- useEffect 메소드로 componentWillUnmount가 동작할 수 있는 방법을 설명하세요.
useEffect()
내부에return
하는 익명함수를 통해 구현
3주차
CSS
- CSS보다 SCSS/SASS가 가진 장점에 대해 설명하세요.
- 중첩
Nesting
: 코드 중복 ↓ - 변수 사용 가능 - 함수, 연산자 사용 가능 -mixin
: CSS 재사용 -extend
: 특정 셀렉터 상속. 셀렉터에 정의된 값을 한 곳에서 관리 ⇒ 코드 관리, 유지 보수에 유리
- CSS, SCSS, SASS의 차이점과 리액트와 사용할 거면 무엇을 쓸 건지 설명하세요.
SCSS
: CSS 문법을 따름. 세미콜론으로 구분.SASS
: CSS 문법을 안 따름. 들여쓰기, 줄바꿈이 문법적 요소. 들여쓰기로 구분.
- id와 class 셀렉터의 차이점에 대해 설명하세요.
id
: 유일한 대상. 우선순위 高class
: 비슷한 요소들의 그룹
- CSS 박스 모델에 대해서 설명하세요. HTML 요소는 박스 모양
- CSS에서 px, em, rem, vh, vw 단위들의 차이점은 무엇인가요?
절대 길이 단위
px
상대 길이 단위em
,rem
: 글꼴 기준vh
,vw
: 뷰포트 기준 ? 뷰포트viewport
현재 브라우저 화면에서 보여지는 다각형의 영역
- CSS 레이아웃 기법의 종류와 특징에 대해서 설명하세요. (grid, flexbox)
flexbox
: 인터페이스 내 아이템 간 공간 배분과 정렬 기능. 1차원 레이아웃 모델.grid
: 테이블 처럼 세로 열, 가로 행을 기준으로 요소 정렬. 2차원 레이아웃 모델.
- CSS in JS(styled component)의 장단점에 대해서 설명하세요. 장점 - 클래스가 고유한 해시값으로 변경 → 클래스 중복X - CSS 파일 간 의존성 X - 별도 CSS 파일 X - JS 내부에 있기에, 동적 코딩 가능 - 우선 순위 이슈 X 단점 - 번들이 커짐 - 인터렉션이 비교적 느림
- position 속성과 z-index의 연관성에 대해 설명하세요.
1.
position
속성이 없는 태그는 순차적으로 쌓임 2.position
속성이 있는 태그는 없는 태그 들보다 위에, 순차적으로 쌓임 3.position
속성과z-index
값이 있으면,z-index
값이 큰 태그가 위로 감 → 하지만 부모의z-index
가 우선시
JavaScript 심화
- event loop에 대해서 설명하세요.
실제 JS가 구동되는 환경(브라우저, node.js) → 멀티 쓰레드
JS → 단일 쓰레드
그 차이를 메꾸기 위한 것이 이벤트 루프
→
call stack
이 비어있는 경우,task queue
에서 대기하던callback
을call stack
으로 옮겨서callback
을 실행 → 시간이 오래걸리는 작업을 비동기로 처리
- callback, promise, async/await 의 특징과 차이점에 대해서 설명하세요.
callback
: 다른 함수의 인자로써 전달되는 함수promise
: 비동기 처리를 도와주는 JS 객체. 인스턴스가 호출되면 해당 작업이 끝날때까지 대기.async/await
:Promise
를 더 쉽게 해주는 문법적 설탕 ㅋ 반환값 :Promise
객체
- Blocking과 Non-Blocking의 차이점은 무엇인가요?
Blocking
: 호출된 함수가 끝날 때까지 제어권을 가지고, 호출한 함수가 대기하도록 함Non-Blocking
: 호출된 함수가 끝나지 않았더라도, 바로 제어권을 양보.
- Synchronous execution과 Asynchronous execution의 차이점은 무엇인가요?
동기
Synchronous execution
한 작업이 끝나면 즉시 다음 작업 실행 비동기Asynchronous execution
한 작업이 끝나기 전에 다른 작업을 수행 → 싱글 스레드에서 여러 작업을 한 스레드에서 수행할 순 있지만, 동시에 여러 작업을 수행할 수는 없다
- nodejs는 싱글쓰레드인가요? ㄴㄴ - 싱글 쓰레드 : 한 번에 하나의 태스크 실행 - 멀티 쓰레드 : 한 번에 여러 태스크 실행
- nodejs는 event-driven architecture 인가요? ㅇㅇ
프로세스, 네트워크, 파일과의 상호작용에서 비롯된 이벤트로 작동되기 때문
?
event-driven architecture
이벤트의 생성, 감지, 소비, 시스템 상태의 변화를 지원하는 SW 모델, 아키텍쳐 패러다임
- this와 dynamic scoping
this
자신이 속한 객체, 혹은 자신이 생성할 인스턴스를 가리키는 자기 참조 변수 → 자신이 생성할 인스턴스의 프로퍼티, 메소드 참조 가능 →dynamic scope
에 의해 동적으로 결정(함수 호출 시점) ?dynamic scope
호출된 위치에 따라 동적으로 상위 스코프를 결정하는 것
- 객체 지향 프로그래밍이란 무엇인가요? 여러개의 독립적 단위인 객체의 집합으로 프로그램을 표현하는 프로그래밍 패러다임 ? 상속 객체지향의 핵심 개념 어떤 객체의 프로퍼트, 메서드를 다른 객체가 받아서 그대로 사용가능한 것을 지칭 JS는 프로토타입 기반으로, 생성자 함수를 통해 인스턴스를 생성할 때 상속을 구현하여 불필요한 중복을 제거 가능 → 코드의 재사용성 ↑
- Prototype Chaining
기존에 존재하는 객체를 기반으로 새로운 객체를 생성할 때 사용
→ 객체의 프로퍼티에 접근했을 때, 해당 프로퍼티가 없다면
__proto__
접근자 프로퍼티를 통해 부모 객체를 탐색 ?__proto__
다른 데이터 프로퍼티의 값을 읽거나 저장할때 사용하는 프로퍼티[[Prototype]]
내부에 접근getter
,setter
접근자 함수 존재
- IIFE (즉시실행함수) 함수 정의와 동시에 즉시 호출되는 함수 → 재호출 불가 → 클로저 함수에서 변수, 메서드 보호용도로 쓰임(사이드 이펙트 방지)
- setTimeout 에서 this는 왜 전역을 가리키는지 설명하세요.
setTimeout
의 콜백함수는 별도의 실행 컨텍스트에서 호출됨 → 별도 실행 컨텍스트에서 호출되었으므로, 전역 스코프 참조 해결책 -this
가 필요한 부분을 함수로 감싸기 - 화살표 함수 -bind()
메서드 사용
- 스택과 힙의 차이에 대해서 설명하세요. 콜 스택 : 원시타입 저장 메모리 힙 : 참조타입 저장 → 콜 스택에는 해당 주소값만 저장. 실제 값은 힙에 저장
- call-by-value에 대해서 설명하세요.
원시값을 파라미터로 넘겨주는 함수 호출 방식
?
call-by-reference
참조 주소값을 파라미터로 넘겨주는 함수 호출 방식
4주차
브라우저 동작 원리
- 브라우저 렌더링 (작동) 원리에 대해 설명하세요. - Loading HTTP 모듈 또는 파일 시스템으로 전달 받은 리소스 스트림을 읽는 과정 - DOM Tree HTML 마크업을 처리하고 DOM 트리 빌드 ("무엇을" 그릴지 결정) - CSSSOM Tree CSS 마크업을 처리하고 CSSOM 트리 빌드 ("어떻게" 그릴지 결정) - Rendering Tree DOM 및 CSSOM 을 결합하여 렌더링 트리 형성 ("화면에 그려질 것만" 결정) - Layout 렌더링 트리에서 각 노드의 기하학적 형태를 계산 ("Box-Model" 생성) - Paint 개별 노드를 화면에 페인트 (or 래스터화)
- 웹페이지가 사용자에게 보여지는 과정에 대해서 설명하세요.
-
Prompt for unload
현재 페이지에서 다른 페이지로 이동할 때 발생하는 이벤트 뒤로가기, 링크를 눌러 다른 도메인의 페이지로 이동할 경우 발생 -Redirect ~ Response
네트워크 통신 요청을 받고 HTML 파일 등의 리소스를 브라우저로 가져오는 일련의 과정AppCache
: 이미 요청한 응답에 대한 캐싱을 확인해서 재사용 → 퍼포먼스 효율 ↑DNS
: 도메인을 서버의 IP 주소로 변환TCP 레이어
요청 성공 →Response
-Processing
다운로드한HTML
,CSS
로DOM
,CSSOM
를 만들어렌더링 트리
구성 -Load
렌더 과정까지 마무리되면 파일을 사용자가 알아볼 수 있게 화면에 표시

- Client Side Rendering 과 Server Side Rendering 의 차이에 대해서 설명하세요.
-
CSR
초기 로딩 속도 느림, 화면전환 빠름 -SSR
초기 로딩 속도 빠름, 화면전환시 서버에 부담
- 프론트엔드 입장에서 신경써야 할 보안은 어떤 것들이 있나요? CSRF (사이트간 요청 위조) 다른 사이트에서 유저가 보내는 요청을 조작 예방법 - referrer 검증 (SameSite 쿠키 설정) 서버에서 요청의 referrer을 확인하여 도메인 일치여부 검증 - Security 토큰 사용 서버측에서 난수값을 유저에게만 제공하여 검증 - Double Submit 쿠키 검증 스크립트 단에서 요청 시 난수값을 생성하여 쿠키에 저장 → 해당 난수값을 요청파라미터로 사용 XSS (Cross Site Scripting) 공격자가 상대방의 브라우저가 스크립트를 실행하게 하는 공격 예방법 - 중요 정보 쿠키 저장 X - 정규표현식을 통한 태그 입력 필터 설치 - HTML 포멧의 입력 제한
- SPA의 장점이 무엇인가요? 첫 로딩에만 리소스를 받아오고, 이후에는 페이지 로딩 없이 필요한 부분만 서버로부터 리소스를 받음 앱과 같은 자연스러운 사용자 경험 제공 페이지 이동 시에도 필요한 컴포넌트만 부분적으로 교체 → 효율성 ↑ 서버 부담 ↓ 모듈화, 컴포넌트 개발 용이 백엔드, 프론트엔드 구분 용이 PWA?
- lazy loading이 무엇인가요? 페이지 로딩시에는 중요하지 않은 리소스 로딩을 나중으로 미루는 기술
- 웹페이지 redirect의 다양한 구현법에 대해서 설명하세요.
- HTTP :
3xx
상태코드의 응답을 받으면 브라우저는 제공된 새로운 URL을 즉시 로드 - HTML :<meta>
태그의http-equiv
속성으로 가능. 뒤로가기 막아버리므로 지양. - JS :window.location
- Reflow가 발생하는 이유와 방지 방법은 무엇인가요?
브라우저가 렌더링을 위해 DOM 트리를 그리는 과정에서 발생
- 노드 추가, 제거 시
- 요소 위치, 크기 변경 시
- 폰트, 이미지 크기, 텍스트 내용 변경 시
- 초기 렌더링
- 윈도우 리사이징
최적화 방법
- 클래스 변화로 인한 스타일 변경 시, DOM 구조 끝단에 위치한 노드에 조작
- 인라인 스타일 최대한 배제
- 애니메이션이 적용된 노드는
positioned
로 분리
- 디자인 패턴이란 무엇이고 각각의 장단점에 대해서 설명하세요.
네트워크 프로토콜
- OSI 7계층에 대해 설명해주세요. 네트워크 통신 과정을 7단계로 정의한 표준 규약 네트워크 → 통신이 일어나는 과정을 단계별로 파악 가능 1: 물리 계층 장비 가동을 위한 전기 공급 ~ 장비 간 물리적 연결 2: 데이터링크 계층 MAC Address 통신으로 데이터를 신뢰성있게 전송. 브릿지, 스위치, 이더넷. 3: 네트워크 계층 IP를 기반으로 데이터가 들어있는 패킷을 이용해 데이터 전송 경로 결정 4: 전송 계층 데이터 전송에 대한 전반적인 조율 담당 TCP/UDP를 통해 통신 신뢰성 보장 5: 세션 계층 데이터가 서로 만나는 환경을 조성. 통신 시스템 사용자 간의 연결을 유지, 설정 TLS, SSH 6: 표현 계층 데이터 압축, 암호화, 복호화 작업을 하는 계층 JPEG, MPEG 7: 응용 계층 도착한 데이터를 최종 사용자가 확인하는 마지막 단계 HTTP 프로토콜
- TCP와 UDP 방식의 차이점을 설명해주세요.
TCP
연결형 서비스. 가상 회선 방식. 데이터 전달 보증. 전송 순서 제어 가능. 신뢰성 ↑UDP
비 연결형 서비스. 데이터 전달 보증X. 전송 순서 제어 불가. 속도 빠름 - TCP의 3 Way-HandShake와 4 Way-HandShake에 대해서 알고 있나요? 장치간의 논리적인 접속을 성립하기 위함 데이터를 전송하기 전, 정확한 전송을 보장하기 위해 사전에 세션 수립
- DNS에 대해 설명해주세요. 호스트의 도메인명을 호스트의 IP로 변환해주는 서비스
- 프록시 서버가 필요한 이유에 대해 설명해주세요. 캐시 데이터를 사용하기 위함 → 전송 시간 절약. 외부 트래픽 감소로 병목현상 방지 보안 목적 → IP 숨기기 가능 접속 우회
HTTP
- Http와 Https 통신 방식의 차이에 대해 설명해주세요. HTTP: 서로 다른 시스템 간 통신을 가능케하는 기초적인 프로토콜 HTTPS: SSL을 사용하여 보안이 강화된 HTTP 프로토콜
- HTTP 프로토콜에 대해 설명해주세요. 웹에서 이루어지는 모든 데이터의 교환의 기초인 클라이언트-서버 프로토콜
- 무상태와 비연결성에 대해 설명해주세요.
- REST API에 대해 설명해주세요.
- GET 메서드와 POST 메서드의 차이점에 대해 설명해주세요.
- PUT 메서드와 PATCH 메서드의 차이점에 대해 설명해주세요.
- 브라우저 저장소에 대해서 설명해주세요. - 쿠키 매번 서버로 전송, 문자열만 저장 가능, 용량 제한, 만료 일자 존재 - 웹 스토리지 클라이언트에서 저장만(서버전송X). 객체 저장 가능. 용량 무제한. 영구 저장 - 로컬 스토리지 삭제하지 않으면 데이터 영구 보관. 도메인별 별도 생성. 동일 도메인 데이터 공유가능 - 세션 스토리지 같은 도메인이라도 브라우저가 다르면 서로 다른 영역(서로 다른 탭, 종료된 탭)
- HTTP 상태 코드에 대해서 설명하세요.
-
1XX
: 조건부 응답 -2XX
: 성공 -3XX
: 리다이렉션 완료 -4XX
: 요청 오류 -5XX
: 서버 오류
보안/인증
- CORS에 대해 설명해주세요.
- CORS(Cross-Origin Resource Sharing)는 무엇인가 왜 이러한 방법이 정의 되었으며, 본인이 코드를 작성하면서 CORS와 관련하여서 경험하였던 이슈는 무엇인가요? 어떤 옵션을 통해서 해결하셨나요?
- Preflight Request에 대해 설명해주세요.
- same-origin 정책에 대해 설명해주세요.
- 로컬과 실제 환경 배포할 때의 CORS 세팅에 있어서 주의해야 할 점
- OAuth에 대해서 간단히 설명해주세요. 인증을 위한 표준 프로토콜의 한 종류 보안된 리소스에 엑세스하기 위해 클라이언트에게 권한을 제공하는 프로세스를 단순화하는 프로토콜 ? 언제, 왜 쓸까 회원가입 절차 간소화 검증되지 않은 앱에 유저의 정보가 직접적으로 노출X
추가자료
일반 개발 지식
- 객체 지향 프로그래밍에 대해서 설명하세요. 캡슐화, 다형성, 상속, 추상화
- 함수형 프로그래밍에 대해서 설명하세요.
- git flow에 대해서 간략하게 설명하세요.
컴퓨터 공학 기초, Number System
- 왜 RAM이 하드디스크보다 비싸다고 생각하나요?
- RAM 메모리 주소는 왜 16진법로 표현할까요?
- 32-bit 운영체제에서 4GB밖에 램을 사용할 수 없는 이유는 무엇인가요?
- IEEE 754 Single-precision floating-point format과 IEEE 754 double-precision floating-point format중 무엇이 더 많은 저장용량을 차지하나요?
- 16진수가 컴퓨터공학에서 자주 사용되는 이유에 대해서 설명해보세요.
- 컴파일러와 인터프리터의 차이가 무엇인가요? 컴파일러 전체 소스코드를 보고 명령어를 수집하고 재구성 실행속도 빠름, 번역속도 느림 인터프리터 소스 코드의 각 행을 연속적으로 분석하며 실행 실행속도 느림, 번역속도 빠름
- 캐시란 무엇인가요? 캐시의 일반적인 작동원리를 설명해주세요.
- 웹서비스에서 캐시가 적용되는 예제로는 어떤 것들이 있나요?
- 비트맵(래스터)과 벡터 이미지의 차이점은 무엇인가요?
- 가비지 컬렉션은 무엇이며, 가비지 컬렉션 기능을 가진 언어는 무엇인가요?
- 바이너리 파일과 텍스트 파일의 차이는 무엇인가요?
OS
- 프로그램(Program)에 대해서 간략하게 설명하세요.
- 프로세스(Process)에 대해서 간략하게 설명하세요.
- 스레드(Thread)에 대해서 간략하게 설명하세요.
- 멀티 스레드와 멀티 프로세스의 차이점에 대해서 간략하게 설명하세요.
- Blocking과 Non-Blocking의 차이점은 무엇인가요?
- Synchronous execution과 Asynchronous execution의 차이점은 무엇인가요?
- nodejs는 싱글쓰레드인가요?
- nodejs는 event-driven adchitecture인가요?
문자열
- 문자열 하나는 몇 바이트인가요?
- 유니코드는 무엇인가요?
- UTF-8과 UTF-16의 차이점은 무엇인가요?
- 스타일 시트를 불러올 때 charset=utf-8을 지정해주는 이유가 무엇인가요?
- 태그에서 lang 속성을 지정해주는 이유는 무엇이며, ko-KR로 그 값을 설정해주었을 때의 속성값의 의미는 무엇인가요?
자료구조
- 기본적인 자료구조의 이해가 필요합니다.
- Stack / Queue / Linked List / Hash Table / Graph / Tree
- 기본 구조에서 변형된 자료구조의 이해가 필요합니다.
- Priority Queue / Circular Queues / Heap / BST / BS / AVL Tree ...etc
- 자료구조의 장단점, 차이점, 동작 원리의 이해가 필요합니다.
알고리즘
- 재귀와 재귀함수에 대한 이해가 필요합니다.
- 정렬 알고리즘에 대한 이해가 필요합니다.
- Bubble sort / Selection sort / Insertion sort / Merge sort / Heap sort / Quick sort / Count sort / Radix sort / Shell sort / Bucket sort ...etc
- 시간 복잡도에 대한 이해가 필요합니다.
- (Advanced) 공간 복잡도에 대한 이해가 필요합니다.
- 문제를 해결하는 데에 필요한 알고리즘을 떠올릴 수 있어야 합니다.
- 검색 알고리즘에 대한 이해가 필요합니다.
자료구조 15제
- Array와 LinkedList의 차이가 무엇인가요?
- Stack과 Queue의 차이점은 무엇인가요?
- Priority Queue의 동작 원리가 어떻게 되나요?
- 해시 테이블(Hash Table)에 대해서 설명해 주세요.
- 해시 테이블의 충돌을 해결할 수 있는 방법들 중 하나를 골라, 방법을 설명해 주세요.
- BST와 Binary Tree에 대해서 설명하세요.
- Graph에 대해서 설명해 주세요.
- BST의 탐색, 삽입, 삭제 시간복잡도는?
- BST와 Heap 차이
- Binary Tree의 3가지 종류와 특징을 설명해 주세요.
- 트리와 그래프의 차이는 무엇일까요?
- 그래프를 인접 리스트와 인접 행렬로 구현할 때 차이와 장단점, 쓰이는 상황에 대해 알려 주세요.
- (Advanced) 그래프는 어떻게 cycle 생성 여부를 판단할 수 있을까요?
- (Advanced) AVL Tree에 대해서 설명해 주세요.
- (Advanced) 최소 스패닝 트리(Minimum Spanning Tree)에 대해서 설명해 주세요.
알고리즘 15제
- 알고 있는 정렬 알고리즘을 말해 보고, 그중에 좋아하는 정렬 알고리즘에 대해서 설명해 주세요.
- n개의 배열에서 k(k<=n) 번째로 큰 수를 찾는 효과적인 방법이 있나요?
- 퀵 Vs 머지 Vs 힙 정렬의 차이점 말해 주세요.
- 비교식 정렬과 분배식 정렬에 대해 설명해 주세요.
- 재귀란 무엇인가요?
- BFS, DFS란 무엇일까요?
- Quick sort가 최악의 성능을 내는 경우와, 그때의 시간복잡도는 어떠한가요?
- 최악의 경우, 개선시킬 수 있는 방법은 무엇인가요?
- Fibonacci에서의 세 가지(Recursion, Dynamic Programming, 반복) 방식에 대한 시간복잡도를 설명해 주세요.
- Merge sort가 일어나는 과정을 설명해 보세요.
- 시간 복잡도에 대해서 설명해 주세요.
- 반복문과 재귀의 장단점에 대해서 말해 주세요.
- (Advanced) KrusKal MST 알고리즘에 대해 과정까지 간략하게 설명해 주세요.
- (Advanced) 최단거리를 구하려면 어떤 알고리즘을 써야 할까요? 그리고 그 알고리즘을 간단하게 설명해 주세요.
- (Advanced) Union find 알고리즘에 대해 아는 만큼 설명해 주세요.
1주차
HTML
- 일반적으로 CSS 태그를 태그 사이에 위치시키고, JS 태그를 태그가 끝나기 직전에 위치시키는 이유가 무엇인가요?
DOM
:HTML
을 한줄 씩 읽으면서 생성CSSOM
: 코드를 다 읽고나서 생성렌더트리
:DOM
+CSSOM
HTML
파싱 중<link>
를 만나면 병렬적으로 파싱 ⇒ 렌더링 속도 상승, 자원 절약 → 파싱은 동시에 진행되지만 렌더링은CSSOM
DOM
완성 뒤에 →CSS
속성이 파일 뒤에서 추가, 수정될 수 있기 때문<script>
를 만나면HTML
파싱이 일시정지 →DOM
이 완성된 후, JS 파일을 다운로드 할 수 있도록
<script>
<script async>
<script defer>
태그들의 차이점은 무엇인가요?<script>
: HTML 파싱 일시중지 후, JS 다운로드<script async>
: HTML 파싱과 동시에 JS 다운로드. JS 준비 시, HTML 파싱 일시중지 후 즉시 실행<script defer>
:HTML 파싱과 동시에 JS 다운로드. HTML 파싱 완료 후 JS 실행
- 시맨틱 태그(
sementic tag
) 에 대해 설명하세요. 태그의 목적과 의미를 브라우저와 개발자에게 명확하게 설명하는 태그 - 검색엔진의 지표로 활용SEO
- 웹 접근성 - 가독성
DOM
- 개발자도구를 많이 사용하셨다면 주로 어떤 용도로 사용했나요?
-
Performance
브라우저 내부의 동작 측정 (페이지 로드, 렌더링 과정 등) -Elements
HTML, CSS 확인, 수정 가능 -Console
간단한 JS 코드를 실행 가능, 디버깅 가능, 현재 DOM 조작 가능 -Application
LocalStorage
,SessionStorage
,Cookie
의 데이터 확인, 조작 가능 쿠키: 서버가 클라이언트에게 전송, 조작 -Network
네트워크 작업의 상세 내용 확인 가능
- 웹팩과 바벨의 역할에 대해서 설명하세요. 웹팩 JS 어플리케이션을 위한 정적 모듈 번들러. 의존성 있는 모듈을 하나의 파일로 통합 → JS 파일 다운로드 1번으로 압축 (네트워크 병목 현상 해결) → 모듈 단위 개발 가능 바벨 JS 코드 변환기(트랜스파일러) → 구형 웹 브라우저를 지원
event.preventDefault()
의 역할이 무엇인지 설명하세요. 기본으로 정의된 이벤트를 작동하지 못하게 막음
intersection Observer API
가 무엇인지 설명하세요. 관찰하고자 하는 타겟 요소가 최상위 뷰포트의 교차영역에서 변경이 발생할 때마다 실행될 콜백 함수를 호출 →scroll
이벤트를 대체 :scroll
이벤트는 단시간에 너무 많이 호출되어 DOM 조작 등의 무거운 이벤트 수행이 어려움
Bundling
이 무엇이며 왜 필요한가요? 여러 파일, 모듈을 묶어줌 - 단일화로 네트워크 비용 감소 - development, production 모드 지원으로 코드 난독화, 압축, 최적화 가능 - 로더를 통해 하위 브라우저 지원가능
- 이벤트 위임이 무엇인가요? 상위 엘리먼트에서 하위 엘리먼트의 이벤트를 제어
- 이벤트 버블링이란 무엇이며 막을 수 있는 방법은 무엇인가요?
특정 이벤트가 발생했을 때, 해당 이벤트가 상위 요소들까지 전파되는 특성
e.stopPropagation()
으로 중단가능 → 사이트 분석, 이벤트 분석 등도 막힘(비효율적) 차라리 커스텀 이벤트로 제어하자
window.requestAnimationFrame(callback)
의 역할이 무엇인지 설명하세요. 비동기 함수로 브라우조가 실행시기를 결정하여 스스로 반복해서 호출하지 않음
performance API
가 무엇인지 설명하세요. 애플리케이션 모니터링 메서드 -performance.now()
: 페이지 로드 후 경과 시간(밀리세컨드) -performance.mark(name)
: 코드의 특정 부분을 실행하는 데 걸린 시간 마킹 -performance.measure(name, start, end)
: 코드 내 특정 구간을 마킹 & 측정 측정값은performance entry buffer
에 저장 -performance.getEntries()
: 버퍼에 저장된 모든 값 -performance.getEntriesByName(name)
: 버퍼에 저장된 특정 값 -performance.getEntriesByType(type)
: 버퍼에 저장된 값 중 특정타입
JavaScript 기본
- 스코프에 대해서 설명하세요. 변수의 수명을 결정하고 확인할 수 있는 범위 - 전역 스코프 : 최상단 스코프로 이곳에서 선언된 변수는 전역변수로, 어떤 영역에서든 접근 가능 - 지역 스코프 : 전역 스코프에 포함되는 영역. 이곳에서 선언된 변수는 지역변수로 전역변수보다 우선순위가 높다.
- 클로져에 대해서 설명하세요. 내부함수의 변수가 외부함수의 변수에 접근할 수 있는 메커니즘 함수와 함수가 선언된 어휘적 환경의 조합을 통해 만들어진 매커니즘 클로저가 생성된 시점의 유효 스코프 내에 있는 모든 지역 변수로 구성 → 클로저가 포함된 내부함수에서 외부 함수의 스코프에 접근 가능 → 일반적으로 함수가 실행될 때 생성된 컨텍스트는 종료될 때 가비지 컬렉터에게 사라짐 → 하지만 클로저 패턴이 사용되면, 해당 내부함수의 변수가 언제 외부함수의 변수를 참조할지 알 수 없기때문에 가비지 컬렉터의 대상이 되지 않음
- 클로져의 사용 예제를 알려주세요. - 캡슐화 - 커링
- 변수 선언, 초기화, 할당의 차이점에 대해서 설명하세요.
- 선언 : 스코프에 변수를 등록
- 초기화 : 실행 컨텍스트의 변수 객체에 메모리 할당(
undefined
) - 할당 : 초기화된 메모리에 다른 값을 넣음
- 호이스팅과 Temporal Dead Zone이 어떻게 연관되어있는지 설명하세요.
호이스팅 :
var
,let
,const
,function
,class
등으로 선언된 모든 식별자가 코드 맨 위로 끌어올려지는 현상var
: 선언+초기화let
,const
: 선언만. → 스코프의 시작 지점부터 초기화 시작 지점까지 변수를 참조할 수 없는 것이TDZ
- ES6의 주요 변화점에 대해서 설명하세요.
-
let
,const
-template literal
⇒ ` ${ } ` - 화살표 함수 - 비구조화 할당 -...
: default parameter, rest parameter, spread syntax -for ... of
: 반복가능한 객체에서의 반복문
- rest parameters와 spread syntax
rest parameters : 매개변수 앞에
...
를 붙여 정의한 매개변수 spread syntax : 개별적인 값들의 목록,iterable
만 사용 가능
- 원시 자료형, 참조 자료형 - 원시: 변경 불가능한 값 메모리의 고정 크기로 값을 저장하고 해당 주소를 직접 참조 ⇒ 불변성 - 참조: 객체 타입의 값(변경 가능한 값) 값이 할당된 메모리의 주소를 참조
- == vs ===
-
==
: 동등 비교 연산자 암묵적 타입 변환을 통해 타입을 일치시킨 후 값의 동등함 비교(느슨한 비교) -===
: 일치 비교 연산자 값과 타입을 모두 고려하여 동등함을 비교(엄격한 비교)
- 자바스크립트에서 배열의 타입 → 객체 프로토타입 기반의 언어이기 때문 ? 프로토타입
- undefined와 null 그리고 undeclared의 차이
undeclared
: 변수의 선언, 할당 Xundefined
: 변수를 초기화할 때 사용하는 값null
: 변수에 값이 없다는 것을 의도적으로 명시
- 깊은 복사와 얕은 복사의 차이에 대해서 설명하세요. 자바스크립트에서 깊은 복사를 하는 방법은 무엇인가요?
얕은 복사 : 가장 상위 객체만 새로 생성되고, 내부 객체들은 참조 관계인 경우. 주소값을 참조하기 때문에 원본-복사본 영향을 끼침
깊은 복사 : 내부 객체까지 모두 새로 생성된 경우. 원본, 결과본 각각 메모리 할당
- 재귀함수로 복사
-
JSON.parse(JSON.stringify())
- 라이브러리 사용
- let, const, var의 차이와 각각의 사용 방법을 설명하세요.
var
: 재선언O, 재할당O, 선언 + 초기화. 함수 레벨 스코프 → 전역 변수let
: 재선언X, 재할당O, 선언 / 초기화. 블록 레벨 스코프 → 지역 변수const
: 재선언X, 재할당X, 선언 / 초기화. 블록 레벨 스코프 → 지역 변수
- 순수함수란 무엇인가요? 오직 함수의 입력만이 함수의 결과에 영향을 끼침 외부 상태 의존X → side-effect가 없음 조건 - 동일한 인자값을 받으면 항상 동일한 결과 반환 - 어디서 호출되든 동일한 결과 반환 - 외부에 영향을 주지도 받지도 않음
(Optional) 버퍼, 스트림
(Optional) 화살표 함수
2주차
React
- 개념과 장점, 그리고 컴포넌트란 무엇인가요?
UI 구축을 위한 JS 프론트엔트 라이브러리 (SPA제작에 주로 이용)
-
virtual DOM
을 통해 성능업 -CSR
,SSR
지원 가능 - 타 프레임워크와 혼용 가능 ? 컴포넌트 캡슐화, 확장성, 결합성, 재사용성
- 리액트의 내부 작동 원리를 재조정(Reconciliation) 개념과 함께 설명하세요.
실제로 DOM을 조작하지 않고 virtual DOM을 조작
→ 가상돔이 변경되면 실제 DOM을 변경 ⇒ 재조정(Reconciliation)
? 가상돔 갱신 방법
-
setState()
-store
변경으로 최상위 컴포넌트의render()
호출 https://www.youtube.com/watch?v=BYbgopx44vo&t=15s
- 리액트에 있는 라이프사이클과 각 라이프사이클의 역할을 설명하세요.
componentDidMount()
: 최초로 컴포넌트 객체가 생성될 때 한 번 수행componentDidUpdate()
: 컴포넌트의 속성값 or 상태값이 변경되면 호출componentWillUnmount()
: 컴포넌트가 소멸될 때 호출render()
: 초기에 화면에 그려줄 때 & 업데이트 될 때 호출

- 리액트 라우터같은 Client Side Routing 에 대해서 설명하세요. - 클라이언트(브라우저)에서 웹페이지 렌더링 - 서버-클라이언트 간 데이터 트래픽 ↓ - 렌더링 1번 → 페이지 이동 빠름 - SEO 사용 불가 - 쿠키에 사용자 정보 저장 → 보안 위험
- state를 직접 변경하지 않고 setState를 사용하는 이유에 대해서 설명하세요.
불변성 유지를 위해
컴포넌트는 현재의
this.state
와setState
를 비교해서render()
로 갱신 → 직접 수정시 갱신X
- Props Drilling 이란 무엇인가요? props가 여러 컴포넌트를 거치면서 전달 → 추적이 어려움
- 리액트 Hooks의 장점은 무엇인가요? 재사용성, 관리의 용이성, 커스텀 hook 가능
- Class Component와 Function Component의 차이점에 대해서 설명하세요.
class
는 여러 단계의 상속으로 전반적으로 복잡성과 오류 가능성 多 → hooks 도입으로class
의 기존 기능 + 복잡성, 재사용성 등의 단점 개선
- virtual DOM이 무엇인가요? virtual DOM이 좋은 이유에 대해서 설명하세요. 실제 DOM 변화를 최소화 가상돔 사용시 실제 DOM 조작보다 시간복잡도(효율성) 유리 DOM은 여러번의 변화가 있다면 전부 적용 → 가상돔은 과정은 자신이 처리하고 최종 결과물만 DOM에 적용
- JSX가 무엇인가요? JS를 HTML처럼 표현
- 웹 성능 향상을 위해 최적화를 해 본 경험이 있나요? 혹은 useMemo와 useCallback 메소드를 활용해 최적화하는 원리에 대해서 설명하세요.
useMemo
,useCallback
렌더링 할 때마다 메모리가 많이 소모되는 값은 계산Xdependency
리스트를 생성해 그 중 하나가 변경되면 계산 →useMemo
는 값을 기억,useCallback
은 함수를 기억
- React 에서 상태 변화가 생겼을 때, 변화를 어떻게 알아채는지에 대해서 설명하세요. 불변성 특징으로, 상태 객체의 주소값이 변경되면 감지

- 여러가지 상태 관리 라이브러리(Apollo, Redux, MobX)의 차이점에 대해서 설명하세요.
Redux
Flux개념 바탕. 현재 가장 많이 사용되는 State 관리 라이브러리MobX
객체지향 성격이 강하며Component
와State
를 연결하는 코드들(보일러 플레이트 코드)을 데코레이터(애노테이션)제공으로 해결Apollo
GraphQL
기반. 서버는 어떠한 자원을 사용할 수 있는지 정의하고, 클라이언트는 렌더링에 필요한 데이터를 요청 → 꼭 필요한 데이터 교환이 이루어지기 때문에 효과적Redux
는REST API
를 사용하기 때문에 리소스의 크기가 서버에서 결정 → 데이터 교환 복잡, 엔드포인트 증가,overfetching
,underfetching
등의 문제점
- useEffect 메소드로 componentWillUnmount가 동작할 수 있는 방법을 설명하세요.
useEffect()
내부에return
하는 익명함수를 통해 구현
3주차
CSS
- CSS보다 SCSS/SASS가 가진 장점에 대해 설명하세요.
- 중첩
Nesting
: 코드 중복 ↓ - 변수 사용 가능 - 함수, 연산자 사용 가능 -mixin
: CSS 재사용 -extend
: 특정 셀렉터 상속. 셀렉터에 정의된 값을 한 곳에서 관리 ⇒ 코드 관리, 유지 보수에 유리
- CSS, SCSS, SASS의 차이점과 리액트와 사용할 거면 무엇을 쓸 건지 설명하세요.
SCSS
: CSS 문법을 따름. 세미콜론으로 구분.SASS
: CSS 문법을 안 따름. 들여쓰기, 줄바꿈이 문법적 요소. 들여쓰기로 구분.
- id와 class 셀렉터의 차이점에 대해 설명하세요.
id
: 유일한 대상. 우선순위 高class
: 비슷한 요소들의 그룹
- CSS 박스 모델에 대해서 설명하세요. HTML 요소는 박스 모양
- CSS에서 px, em, rem, vh, vw 단위들의 차이점은 무엇인가요?
절대 길이 단위
px
상대 길이 단위em
,rem
: 글꼴 기준vh
,vw
: 뷰포트 기준 ? 뷰포트viewport
현재 브라우저 화면에서 보여지는 다각형의 영역
- CSS 레이아웃 기법의 종류와 특징에 대해서 설명하세요. (grid, flexbox)
flexbox
: 인터페이스 내 아이템 간 공간 배분과 정렬 기능. 1차원 레이아웃 모델.grid
: 테이블 처럼 세로 열, 가로 행을 기준으로 요소 정렬. 2차원 레이아웃 모델.
- CSS in JS(styled component)의 장단점에 대해서 설명하세요. 장점 - 클래스가 고유한 해시값으로 변경 → 클래스 중복X - CSS 파일 간 의존성 X - 별도 CSS 파일 X - JS 내부에 있기에, 동적 코딩 가능 - 우선 순위 이슈 X 단점 - 번들이 커짐 - 인터렉션이 비교적 느림
- position 속성과 z-index의 연관성에 대해 설명하세요.
1.
position
속성이 없는 태그는 순차적으로 쌓임 2.position
속성이 있는 태그는 없는 태그 들보다 위에, 순차적으로 쌓임 3.position
속성과z-index
값이 있으면,z-index
값이 큰 태그가 위로 감 → 하지만 부모의z-index
가 우선시
JavaScript 심화
- event loop에 대해서 설명하세요.
실제 JS가 구동되는 환경(브라우저, node.js) → 멀티 쓰레드
JS → 단일 쓰레드
그 차이를 메꾸기 위한 것이 이벤트 루프
→
call stack
이 비어있는 경우,task queue
에서 대기하던callback
을call stack
으로 옮겨서callback
을 실행 → 시간이 오래걸리는 작업을 비동기로 처리
- callback, promise, async/await 의 특징과 차이점에 대해서 설명하세요.
callback
: 다른 함수의 인자로써 전달되는 함수promise
: 비동기 처리를 도와주는 JS 객체. 인스턴스가 호출되면 해당 작업이 끝날때까지 대기.async/await
:Promise
를 더 쉽게 해주는 문법적 설탕 ㅋ 반환값 :Promise
객체
- Blocking과 Non-Blocking의 차이점은 무엇인가요?
Blocking
: 호출된 함수가 끝날 때까지 제어권을 가지고, 호출한 함수가 대기하도록 함Non-Blocking
: 호출된 함수가 끝나지 않았더라도, 바로 제어권을 양보.
- Synchronous execution과 Asynchronous execution의 차이점은 무엇인가요?
동기
Synchronous execution
한 작업이 끝나면 즉시 다음 작업 실행 비동기Asynchronous execution
한 작업이 끝나기 전에 다른 작업을 수행 → 싱글 스레드에서 여러 작업을 한 스레드에서 수행할 순 있지만, 동시에 여러 작업을 수행할 수는 없다
- nodejs는 싱글쓰레드인가요? ㄴㄴ - 싱글 쓰레드 : 한 번에 하나의 태스크 실행 - 멀티 쓰레드 : 한 번에 여러 태스크 실행
- nodejs는 event-driven architecture 인가요? ㅇㅇ
프로세스, 네트워크, 파일과의 상호작용에서 비롯된 이벤트로 작동되기 때문
?
event-driven architecture
이벤트의 생성, 감지, 소비, 시스템 상태의 변화를 지원하는 SW 모델, 아키텍쳐 패러다임
- this와 dynamic scoping
this
자신이 속한 객체, 혹은 자신이 생성할 인스턴스를 가리키는 자기 참조 변수 → 자신이 생성할 인스턴스의 프로퍼티, 메소드 참조 가능 →dynamic scope
에 의해 동적으로 결정(함수 호출 시점) ?dynamic scope
호출된 위치에 따라 동적으로 상위 스코프를 결정하는 것
- 객체 지향 프로그래밍이란 무엇인가요? 여러개의 독립적 단위인 객체의 집합으로 프로그램을 표현하는 프로그래밍 패러다임 ? 상속 객체지향의 핵심 개념 어떤 객체의 프로퍼트, 메서드를 다른 객체가 받아서 그대로 사용가능한 것을 지칭 JS는 프로토타입 기반으로, 생성자 함수를 통해 인스턴스를 생성할 때 상속을 구현하여 불필요한 중복을 제거 가능 → 코드의 재사용성 ↑
- Prototype Chaining
기존에 존재하는 객체를 기반으로 새로운 객체를 생성할 때 사용
→ 객체의 프로퍼티에 접근했을 때, 해당 프로퍼티가 없다면
__proto__
접근자 프로퍼티를 통해 부모 객체를 탐색 ?__proto__
다른 데이터 프로퍼티의 값을 읽거나 저장할때 사용하는 프로퍼티[[Prototype]]
내부에 접근getter
,setter
접근자 함수 존재
- IIFE (즉시실행함수) 함수 정의와 동시에 즉시 호출되는 함수 → 재호출 불가 → 클로저 함수에서 변수, 메서드 보호용도로 쓰임(사이드 이펙트 방지)
- setTimeout 에서 this는 왜 전역을 가리키는지 설명하세요.
setTimeout
의 콜백함수는 별도의 실행 컨텍스트에서 호출됨 → 별도 실행 컨텍스트에서 호출되었으므로, 전역 스코프 참조 해결책 -this
가 필요한 부분을 함수로 감싸기 - 화살표 함수 -bind()
메서드 사용
- 스택과 힙의 차이에 대해서 설명하세요. 콜 스택 : 원시타입 저장 메모리 힙 : 참조타입 저장 → 콜 스택에는 해당 주소값만 저장. 실제 값은 힙에 저장
- call-by-value에 대해서 설명하세요.
원시값을 파라미터로 넘겨주는 함수 호출 방식
?
call-by-reference
참조 주소값을 파라미터로 넘겨주는 함수 호출 방식
4주차
브라우저 동작 원리
- 브라우저 렌더링 (작동) 원리에 대해 설명하세요. - Loading HTTP 모듈 또는 파일 시스템으로 전달 받은 리소스 스트림을 읽는 과정 - DOM Tree HTML 마크업을 처리하고 DOM 트리 빌드 ("무엇을" 그릴지 결정) - CSSSOM Tree CSS 마크업을 처리하고 CSSOM 트리 빌드 ("어떻게" 그릴지 결정) - Rendering Tree DOM 및 CSSOM 을 결합하여 렌더링 트리 형성 ("화면에 그려질 것만" 결정) - Layout 렌더링 트리에서 각 노드의 기하학적 형태를 계산 ("Box-Model" 생성) - Paint 개별 노드를 화면에 페인트 (or 래스터화)
- 웹페이지가 사용자에게 보여지는 과정에 대해서 설명하세요.
-
Prompt for unload
현재 페이지에서 다른 페이지로 이동할 때 발생하는 이벤트 뒤로가기, 링크를 눌러 다른 도메인의 페이지로 이동할 경우 발생 -Redirect ~ Response
네트워크 통신 요청을 받고 HTML 파일 등의 리소스를 브라우저로 가져오는 일련의 과정AppCache
: 이미 요청한 응답에 대한 캐싱을 확인해서 재사용 → 퍼포먼스 효율 ↑DNS
: 도메인을 서버의 IP 주소로 변환TCP 레이어
요청 성공 →Response
-Processing
다운로드한HTML
,CSS
로DOM
,CSSOM
를 만들어렌더링 트리
구성 -Load
렌더 과정까지 마무리되면 파일을 사용자가 알아볼 수 있게 화면에 표시

- Client Side Rendering 과 Server Side Rendering 의 차이에 대해서 설명하세요.
-
CSR
초기 로딩 속도 느림, 화면전환 빠름 -SSR
초기 로딩 속도 빠름, 화면전환시 서버에 부담
- 프론트엔드 입장에서 신경써야 할 보안은 어떤 것들이 있나요? CSRF (사이트간 요청 위조) 다른 사이트에서 유저가 보내는 요청을 조작 예방법 - referrer 검증 (SameSite 쿠키 설정) 서버에서 요청의 referrer을 확인하여 도메인 일치여부 검증 - Security 토큰 사용 서버측에서 난수값을 유저에게만 제공하여 검증 - Double Submit 쿠키 검증 스크립트 단에서 요청 시 난수값을 생성하여 쿠키에 저장 → 해당 난수값을 요청파라미터로 사용 XSS (Cross Site Scripting) 공격자가 상대방의 브라우저가 스크립트를 실행하게 하는 공격 예방법 - 중요 정보 쿠키 저장 X - 정규표현식을 통한 태그 입력 필터 설치 - HTML 포멧의 입력 제한
- SPA의 장점이 무엇인가요? 첫 로딩에만 리소스를 받아오고, 이후에는 페이지 로딩 없이 필요한 부분만 서버로부터 리소스를 받음 앱과 같은 자연스러운 사용자 경험 제공 페이지 이동 시에도 필요한 컴포넌트만 부분적으로 교체 → 효율성 ↑ 서버 부담 ↓ 모듈화, 컴포넌트 개발 용이 백엔드, 프론트엔드 구분 용이 PWA?
- lazy loading이 무엇인가요? 페이지 로딩시에는 중요하지 않은 리소스 로딩을 나중으로 미루는 기술
- 웹페이지 redirect의 다양한 구현법에 대해서 설명하세요.
- HTTP :
3xx
상태코드의 응답을 받으면 브라우저는 제공된 새로운 URL을 즉시 로드 - HTML :<meta>
태그의http-equiv
속성으로 가능. 뒤로가기 막아버리므로 지양. - JS :window.location
- Reflow가 발생하는 이유와 방지 방법은 무엇인가요?
브라우저가 렌더링을 위해 DOM 트리를 그리는 과정에서 발생
- 노드 추가, 제거 시
- 요소 위치, 크기 변경 시
- 폰트, 이미지 크기, 텍스트 내용 변경 시
- 초기 렌더링
- 윈도우 리사이징
최적화 방법
- 클래스 변화로 인한 스타일 변경 시, DOM 구조 끝단에 위치한 노드에 조작
- 인라인 스타일 최대한 배제
- 애니메이션이 적용된 노드는
positioned
로 분리
- 디자인 패턴이란 무엇이고 각각의 장단점에 대해서 설명하세요.
네트워크 프로토콜
- OSI 7계층에 대해 설명해주세요. 네트워크 통신 과정을 7단계로 정의한 표준 규약 네트워크 → 통신이 일어나는 과정을 단계별로 파악 가능 1: 물리 계층 장비 가동을 위한 전기 공급 ~ 장비 간 물리적 연결 2: 데이터링크 계층 MAC Address 통신으로 데이터를 신뢰성있게 전송. 브릿지, 스위치, 이더넷. 3: 네트워크 계층 IP를 기반으로 데이터가 들어있는 패킷을 이용해 데이터 전송 경로 결정 4: 전송 계층 데이터 전송에 대한 전반적인 조율 담당 TCP/UDP를 통해 통신 신뢰성 보장 5: 세션 계층 데이터가 서로 만나는 환경을 조성. 통신 시스템 사용자 간의 연결을 유지, 설정 TLS, SSH 6: 표현 계층 데이터 압축, 암호화, 복호화 작업을 하는 계층 JPEG, MPEG 7: 응용 계층 도착한 데이터를 최종 사용자가 확인하는 마지막 단계 HTTP 프로토콜
- TCP와 UDP 방식의 차이점을 설명해주세요.
TCP
연결형 서비스. 가상 회선 방식. 데이터 전달 보증. 전송 순서 제어 가능. 신뢰성 ↑UDP
비 연결형 서비스. 데이터 전달 보증X. 전송 순서 제어 불가. 속도 빠름 - TCP의 3 Way-HandShake와 4 Way-HandShake에 대해서 알고 있나요? 장치간의 논리적인 접속을 성립하기 위함 데이터를 전송하기 전, 정확한 전송을 보장하기 위해 사전에 세션 수립
- DNS에 대해 설명해주세요. 호스트의 도메인명을 호스트의 IP로 변환해주는 서비스
- 프록시 서버가 필요한 이유에 대해 설명해주세요. 캐시 데이터를 사용하기 위함 → 전송 시간 절약. 외부 트래픽 감소로 병목현상 방지 보안 목적 → IP 숨기기 가능 접속 우회
HTTP
- Http와 Https 통신 방식의 차이에 대해 설명해주세요. HTTP: 서로 다른 시스템 간 통신을 가능케하는 기초적인 프로토콜 HTTPS: SSL을 사용하여 보안이 강화된 HTTP 프로토콜
- HTTP 프로토콜에 대해 설명해주세요. 웹에서 이루어지는 모든 데이터의 교환의 기초인 클라이언트-서버 프로토콜
- 무상태와 비연결성에 대해 설명해주세요.
- REST API에 대해 설명해주세요.
- GET 메서드와 POST 메서드의 차이점에 대해 설명해주세요.
- PUT 메서드와 PATCH 메서드의 차이점에 대해 설명해주세요.
- 브라우저 저장소에 대해서 설명해주세요. - 쿠키 매번 서버로 전송, 문자열만 저장 가능, 용량 제한, 만료 일자 존재 - 웹 스토리지 클라이언트에서 저장만(서버전송X). 객체 저장 가능. 용량 무제한. 영구 저장 - 로컬 스토리지 삭제하지 않으면 데이터 영구 보관. 도메인별 별도 생성. 동일 도메인 데이터 공유가능 - 세션 스토리지 같은 도메인이라도 브라우저가 다르면 서로 다른 영역(서로 다른 탭, 종료된 탭)
- HTTP 상태 코드에 대해서 설명하세요.
-
1XX
: 조건부 응답 -2XX
: 성공 -3XX
: 리다이렉션 완료 -4XX
: 요청 오류 -5XX
: 서버 오류
보안/인증
- CORS에 대해 설명해주세요.
- CORS(Cross-Origin Resource Sharing)는 무엇인가 왜 이러한 방법이 정의 되었으며, 본인이 코드를 작성하면서 CORS와 관련하여서 경험하였던 이슈는 무엇인가요? 어떤 옵션을 통해서 해결하셨나요?
- Preflight Request에 대해 설명해주세요.
- same-origin 정책에 대해 설명해주세요.
- 로컬과 실제 환경 배포할 때의 CORS 세팅에 있어서 주의해야 할 점
- OAuth에 대해서 간단히 설명해주세요. 인증을 위한 표준 프로토콜의 한 종류 보안된 리소스에 엑세스하기 위해 클라이언트에게 권한을 제공하는 프로세스를 단순화하는 프로토콜 ? 언제, 왜 쓸까 회원가입 절차 간소화 검증되지 않은 앱에 유저의 정보가 직접적으로 노출X
추가자료
일반 개발 지식
- 객체 지향 프로그래밍에 대해서 설명하세요. 캡슐화, 다형성, 상속, 추상화
- 함수형 프로그래밍에 대해서 설명하세요.
- git flow에 대해서 간략하게 설명하세요.
컴퓨터 공학 기초, Number System
- 왜 RAM이 하드디스크보다 비싸다고 생각하나요?
- RAM 메모리 주소는 왜 16진법로 표현할까요?
- 32-bit 운영체제에서 4GB밖에 램을 사용할 수 없는 이유는 무엇인가요?
- IEEE 754 Single-precision floating-point format과 IEEE 754 double-precision floating-point format중 무엇이 더 많은 저장용량을 차지하나요?
- 16진수가 컴퓨터공학에서 자주 사용되는 이유에 대해서 설명해보세요.
- 컴파일러와 인터프리터의 차이가 무엇인가요? 컴파일러 전체 소스코드를 보고 명령어를 수집하고 재구성 실행속도 빠름, 번역속도 느림 인터프리터 소스 코드의 각 행을 연속적으로 분석하며 실행 실행속도 느림, 번역속도 빠름
- 캐시란 무엇인가요? 캐시의 일반적인 작동원리를 설명해주세요.
- 웹서비스에서 캐시가 적용되는 예제로는 어떤 것들이 있나요?
- 비트맵(래스터)과 벡터 이미지의 차이점은 무엇인가요?
- 가비지 컬렉션은 무엇이며, 가비지 컬렉션 기능을 가진 언어는 무엇인가요?
- 바이너리 파일과 텍스트 파일의 차이는 무엇인가요?
OS
- 프로그램(Program)에 대해서 간략하게 설명하세요.
- 프로세스(Process)에 대해서 간략하게 설명하세요.
- 스레드(Thread)에 대해서 간략하게 설명하세요.
- 멀티 스레드와 멀티 프로세스의 차이점에 대해서 간략하게 설명하세요.
- Blocking과 Non-Blocking의 차이점은 무엇인가요?
- Synchronous execution과 Asynchronous execution의 차이점은 무엇인가요?
- nodejs는 싱글쓰레드인가요?
- nodejs는 event-driven adchitecture인가요?
문자열
- 문자열 하나는 몇 바이트인가요?
- 유니코드는 무엇인가요?
- UTF-8과 UTF-16의 차이점은 무엇인가요?
- 스타일 시트를 불러올 때 charset=utf-8을 지정해주는 이유가 무엇인가요?
- 태그에서 lang 속성을 지정해주는 이유는 무엇이며, ko-KR로 그 값을 설정해주었을 때의 속성값의 의미는 무엇인가요?
자료구조
- 기본적인 자료구조의 이해가 필요합니다.
- Stack / Queue / Linked List / Hash Table / Graph / Tree
- 기본 구조에서 변형된 자료구조의 이해가 필요합니다.
- Priority Queue / Circular Queues / Heap / BST / BS / AVL Tree ...etc
- 자료구조의 장단점, 차이점, 동작 원리의 이해가 필요합니다.
알고리즘
- 재귀와 재귀함수에 대한 이해가 필요합니다.
- 정렬 알고리즘에 대한 이해가 필요합니다.
- Bubble sort / Selection sort / Insertion sort / Merge sort / Heap sort / Quick sort / Count sort / Radix sort / Shell sort / Bucket sort ...etc
- 시간 복잡도에 대한 이해가 필요합니다.
- (Advanced) 공간 복잡도에 대한 이해가 필요합니다.
- 문제를 해결하는 데에 필요한 알고리즘을 떠올릴 수 있어야 합니다.
- 검색 알고리즘에 대한 이해가 필요합니다.
자료구조 15제
- Array와 LinkedList의 차이가 무엇인가요?
- Stack과 Queue의 차이점은 무엇인가요?
- Priority Queue의 동작 원리가 어떻게 되나요?
- 해시 테이블(Hash Table)에 대해서 설명해 주세요.
- 해시 테이블의 충돌을 해결할 수 있는 방법들 중 하나를 골라, 방법을 설명해 주세요.
- BST와 Binary Tree에 대해서 설명하세요.
- Graph에 대해서 설명해 주세요.
- BST의 탐색, 삽입, 삭제 시간복잡도는?
- BST와 Heap 차이
- Binary Tree의 3가지 종류와 특징을 설명해 주세요.
- 트리와 그래프의 차이는 무엇일까요?
- 그래프를 인접 리스트와 인접 행렬로 구현할 때 차이와 장단점, 쓰이는 상황에 대해 알려 주세요.
- (Advanced) 그래프는 어떻게 cycle 생성 여부를 판단할 수 있을까요?
- (Advanced) AVL Tree에 대해서 설명해 주세요.
- (Advanced) 최소 스패닝 트리(Minimum Spanning Tree)에 대해서 설명해 주세요.
알고리즘 15제
- 알고 있는 정렬 알고리즘을 말해 보고, 그중에 좋아하는 정렬 알고리즘에 대해서 설명해 주세요.
- n개의 배열에서 k(k<=n) 번째로 큰 수를 찾는 효과적인 방법이 있나요?
- 퀵 Vs 머지 Vs 힙 정렬의 차이점 말해 주세요.
- 비교식 정렬과 분배식 정렬에 대해 설명해 주세요.
- 재귀란 무엇인가요?
- BFS, DFS란 무엇일까요?
- Quick sort가 최악의 성능을 내는 경우와, 그때의 시간복잡도는 어떠한가요?
- 최악의 경우, 개선시킬 수 있는 방법은 무엇인가요?
- Fibonacci에서의 세 가지(Recursion, Dynamic Programming, 반복) 방식에 대한 시간복잡도를 설명해 주세요.
- Merge sort가 일어나는 과정을 설명해 보세요.
- 시간 복잡도에 대해서 설명해 주세요.
- 반복문과 재귀의 장단점에 대해서 말해 주세요.
- (Advanced) KrusKal MST 알고리즘에 대해 과정까지 간략하게 설명해 주세요.
- (Advanced) 최단거리를 구하려면 어떤 알고리즘을 써야 할까요? 그리고 그 알고리즘을 간단하게 설명해 주세요.
- (Advanced) Union find 알고리즘에 대해 아는 만큼 설명해 주세요.