HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
💟
지은팀 Programmers Study
/
🤖
자료구조와 알고리즘 스터디 2.0.0
/
면접 예상 질문

면접 예상 질문

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 : 변수의 선언, 할당 X undefined : 변수를 초기화할 때 사용하는 값 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() : 초기에 화면에 그려줄 때 & 업데이트 될 때 호출
    • notion image
  • 리액트 라우터같은 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 렌더링 할 때마다 메모리가 많이 소모되는 값은 계산X dependency 리스트를 생성해 그 중 하나가 변경되면 계산 → useMemo 는 값을 기억, useCallback은 함수를 기억
  • React 에서 상태 변화가 생겼을 때, 변화를 어떻게 알아채는지에 대해서 설명하세요. 불변성 특징으로, 상태 객체의 주소값이 변경되면 감지
notion image
  • 여러가지 상태 관리 라이브러리(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 렌더 과정까지 마무리되면 파일을 사용자가 알아볼 수 있게 화면에 표시
    • notion image
  • 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 로 분리
  • 디자인 패턴이란 무엇이고 각각의 장단점에 대해서 설명하세요.

네트워크 프로토콜

  1. OSI 7계층에 대해 설명해주세요. 네트워크 통신 과정을 7단계로 정의한 표준 규약 네트워크 → 통신이 일어나는 과정을 단계별로 파악 가능 1: 물리 계층 장비 가동을 위한 전기 공급 ~ 장비 간 물리적 연결 2: 데이터링크 계층 MAC Address 통신으로 데이터를 신뢰성있게 전송. 브릿지, 스위치, 이더넷. 3: 네트워크 계층 IP를 기반으로 데이터가 들어있는 패킷을 이용해 데이터 전송 경로 결정 4: 전송 계층 데이터 전송에 대한 전반적인 조율 담당 TCP/UDP를 통해 통신 신뢰성 보장 5: 세션 계층 데이터가 서로 만나는 환경을 조성. 통신 시스템 사용자 간의 연결을 유지, 설정 TLS, SSH 6: 표현 계층 데이터 압축, 암호화, 복호화 작업을 하는 계층 JPEG, MPEG 7: 응용 계층 도착한 데이터를 최종 사용자가 확인하는 마지막 단계 HTTP 프로토콜
  1. TCP와 UDP 방식의 차이점을 설명해주세요. TCP 연결형 서비스. 가상 회선 방식. 데이터 전달 보증. 전송 순서 제어 가능. 신뢰성 ↑ UDP 비 연결형 서비스. 데이터 전달 보증X. 전송 순서 제어 불가. 속도 빠름
    1. TCP의 3 Way-HandShake와 4 Way-HandShake에 대해서 알고 있나요? 장치간의 논리적인 접속을 성립하기 위함 데이터를 전송하기 전, 정확한 전송을 보장하기 위해 사전에 세션 수립
  1. DNS에 대해 설명해주세요. 호스트의 도메인명을 호스트의 IP로 변환해주는 서비스
  1. 프록시 서버가 필요한 이유에 대해 설명해주세요. 캐시 데이터를 사용하기 위함 → 전송 시간 절약. 외부 트래픽 감소로 병목현상 방지 보안 목적 → IP 숨기기 가능 접속 우회

HTTP

  1. Http와 Https 통신 방식의 차이에 대해 설명해주세요. HTTP: 서로 다른 시스템 간 통신을 가능케하는 기초적인 프로토콜 HTTPS: SSL을 사용하여 보안이 강화된 HTTP 프로토콜
  1. HTTP 프로토콜에 대해 설명해주세요. 웹에서 이루어지는 모든 데이터의 교환의 기초인 클라이언트-서버 프로토콜
    1. 무상태와 비연결성에 대해 설명해주세요.
  1. REST API에 대해 설명해주세요.
  1. GET 메서드와 POST 메서드의 차이점에 대해 설명해주세요.
  1. PUT 메서드와 PATCH 메서드의 차이점에 대해 설명해주세요.
  1. 브라우저 저장소에 대해서 설명해주세요. - 쿠키 매번 서버로 전송, 문자열만 저장 가능, 용량 제한, 만료 일자 존재 - 웹 스토리지 클라이언트에서 저장만(서버전송X). 객체 저장 가능. 용량 무제한. 영구 저장 - 로컬 스토리지 삭제하지 않으면 데이터 영구 보관. 도메인별 별도 생성. 동일 도메인 데이터 공유가능 - 세션 스토리지 같은 도메인이라도 브라우저가 다르면 서로 다른 영역(서로 다른 탭, 종료된 탭)
  1. HTTP 상태 코드에 대해서 설명하세요. - 1XX : 조건부 응답 - 2XX : 성공 - 3XX : 리다이렉션 완료 - 4XX : 요청 오류 - 5XX : 서버 오류

보안/인증

  1. CORS에 대해 설명해주세요.
    1. CORS(Cross-Origin Resource Sharing)는 무엇인가 왜 이러한 방법이 정의 되었으며, 본인이 코드를 작성하면서 CORS와 관련하여서 경험하였던 이슈는 무엇인가요? 어떤 옵션을 통해서 해결하셨나요?
    2. Preflight Request에 대해 설명해주세요.
    3. same-origin 정책에 대해 설명해주세요.
    4. 로컬과 실제 환경 배포할 때의 CORS 세팅에 있어서 주의해야 할 점
  1. OAuth에 대해서 간단히 설명해주세요. 인증을 위한 표준 프로토콜의 한 종류 보안된 리소스에 엑세스하기 위해 클라이언트에게 권한을 제공하는 프로세스를 단순화하는 프로토콜 ? 언제, 왜 쓸까 회원가입 절차 간소화 검증되지 않은 앱에 유저의 정보가 직접적으로 노출X
추가자료

일반 개발 지식

  1. 객체 지향 프로그래밍에 대해서 설명하세요. 캡슐화, 다형성, 상속, 추상화
  1. 함수형 프로그래밍에 대해서 설명하세요.
  1. git flow에 대해서 간략하게 설명하세요.

컴퓨터 공학 기초, Number System

  1. 왜 RAM이 하드디스크보다 비싸다고 생각하나요?
  1. RAM 메모리 주소는 왜 16진법로 표현할까요?
  1. 32-bit 운영체제에서 4GB밖에 램을 사용할 수 없는 이유는 무엇인가요?
  1. IEEE 754 Single-precision floating-point format과 IEEE 754 double-precision floating-point format중 무엇이 더 많은 저장용량을 차지하나요?
  1. 16진수가 컴퓨터공학에서 자주 사용되는 이유에 대해서 설명해보세요.
  1. 컴파일러와 인터프리터의 차이가 무엇인가요? 컴파일러 전체 소스코드를 보고 명령어를 수집하고 재구성 실행속도 빠름, 번역속도 느림 인터프리터 소스 코드의 각 행을 연속적으로 분석하며 실행 실행속도 느림, 번역속도 빠름
  1. 캐시란 무엇인가요? 캐시의 일반적인 작동원리를 설명해주세요.
  1. 웹서비스에서 캐시가 적용되는 예제로는 어떤 것들이 있나요?
  1. 비트맵(래스터)과 벡터 이미지의 차이점은 무엇인가요?
  1. 가비지 컬렉션은 무엇이며, 가비지 컬렉션 기능을 가진 언어는 무엇인가요?
  1. 바이너리 파일과 텍스트 파일의 차이는 무엇인가요?

OS

  1. 프로그램(Program)에 대해서 간략하게 설명하세요.
  1. 프로세스(Process)에 대해서 간략하게 설명하세요.
  1. 스레드(Thread)에 대해서 간략하게 설명하세요.
  1. 멀티 스레드와 멀티 프로세스의 차이점에 대해서 간략하게 설명하세요.
  1. Blocking과 Non-Blocking의 차이점은 무엇인가요?
  1. Synchronous execution과 Asynchronous execution의 차이점은 무엇인가요?
  1. nodejs는 싱글쓰레드인가요?
  1. nodejs는 event-driven adchitecture인가요?

문자열

  1. 문자열 하나는 몇 바이트인가요?
  1. 유니코드는 무엇인가요?
  1. UTF-8과 UTF-16의 차이점은 무엇인가요?
  1. 스타일 시트를 불러올 때 charset=utf-8을 지정해주는 이유가 무엇인가요?
  1. 태그에서 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제

  1. Array와 LinkedList의 차이가 무엇인가요?
  1. Stack과 Queue의 차이점은 무엇인가요?
  1. Priority Queue의 동작 원리가 어떻게 되나요?
  1. 해시 테이블(Hash Table)에 대해서 설명해 주세요.
  1. 해시 테이블의 충돌을 해결할 수 있는 방법들 중 하나를 골라, 방법을 설명해 주세요.
  1. BST와 Binary Tree에 대해서 설명하세요.
  1. Graph에 대해서 설명해 주세요.
  1. BST의 탐색, 삽입, 삭제 시간복잡도는?
  1. BST와 Heap 차이
  1. Binary Tree의 3가지 종류와 특징을 설명해 주세요.
  1. 트리와 그래프의 차이는 무엇일까요?
  1. 그래프를 인접 리스트와 인접 행렬로 구현할 때 차이와 장단점, 쓰이는 상황에 대해 알려 주세요.
  1. (Advanced) 그래프는 어떻게 cycle 생성 여부를 판단할 수 있을까요?
  1. (Advanced) AVL Tree에 대해서 설명해 주세요.
  1. (Advanced) 최소 스패닝 트리(Minimum Spanning Tree)에 대해서 설명해 주세요.

알고리즘 15제

  1. 알고 있는 정렬 알고리즘을 말해 보고, 그중에 좋아하는 정렬 알고리즘에 대해서 설명해 주세요.
  1. n개의 배열에서 k(k<=n) 번째로 큰 수를 찾는 효과적인 방법이 있나요?
  1. 퀵 Vs 머지 Vs 힙 정렬의 차이점 말해 주세요.
  1. 비교식 정렬과 분배식 정렬에 대해 설명해 주세요.
  1. 재귀란 무엇인가요?
  1. BFS, DFS란 무엇일까요?
  1. Quick sort가 최악의 성능을 내는 경우와, 그때의 시간복잡도는 어떠한가요?
  1. 최악의 경우, 개선시킬 수 있는 방법은 무엇인가요?
  1. Fibonacci에서의 세 가지(Recursion, Dynamic Programming, 반복) 방식에 대한 시간복잡도를 설명해 주세요.
  1. Merge sort가 일어나는 과정을 설명해 보세요.
  1. 시간 복잡도에 대해서 설명해 주세요.
  1. 반복문과 재귀의 장단점에 대해서 말해 주세요.
  1. (Advanced) KrusKal MST 알고리즘에 대해 과정까지 간략하게 설명해 주세요.
  1. (Advanced) 최단거리를 구하려면 어떤 알고리즘을 써야 할까요? 그리고 그 알고리즘을 간단하게 설명해 주세요.
  1. (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 : 변수의 선언, 할당 X undefined : 변수를 초기화할 때 사용하는 값 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() : 초기에 화면에 그려줄 때 & 업데이트 될 때 호출
    • notion image
  • 리액트 라우터같은 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 렌더링 할 때마다 메모리가 많이 소모되는 값은 계산X dependency 리스트를 생성해 그 중 하나가 변경되면 계산 → useMemo 는 값을 기억, useCallback은 함수를 기억
  • React 에서 상태 변화가 생겼을 때, 변화를 어떻게 알아채는지에 대해서 설명하세요. 불변성 특징으로, 상태 객체의 주소값이 변경되면 감지
notion image
  • 여러가지 상태 관리 라이브러리(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 렌더 과정까지 마무리되면 파일을 사용자가 알아볼 수 있게 화면에 표시
    • notion image
  • 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 로 분리
  • 디자인 패턴이란 무엇이고 각각의 장단점에 대해서 설명하세요.

네트워크 프로토콜

  1. OSI 7계층에 대해 설명해주세요. 네트워크 통신 과정을 7단계로 정의한 표준 규약 네트워크 → 통신이 일어나는 과정을 단계별로 파악 가능 1: 물리 계층 장비 가동을 위한 전기 공급 ~ 장비 간 물리적 연결 2: 데이터링크 계층 MAC Address 통신으로 데이터를 신뢰성있게 전송. 브릿지, 스위치, 이더넷. 3: 네트워크 계층 IP를 기반으로 데이터가 들어있는 패킷을 이용해 데이터 전송 경로 결정 4: 전송 계층 데이터 전송에 대한 전반적인 조율 담당 TCP/UDP를 통해 통신 신뢰성 보장 5: 세션 계층 데이터가 서로 만나는 환경을 조성. 통신 시스템 사용자 간의 연결을 유지, 설정 TLS, SSH 6: 표현 계층 데이터 압축, 암호화, 복호화 작업을 하는 계층 JPEG, MPEG 7: 응용 계층 도착한 데이터를 최종 사용자가 확인하는 마지막 단계 HTTP 프로토콜
  1. TCP와 UDP 방식의 차이점을 설명해주세요. TCP 연결형 서비스. 가상 회선 방식. 데이터 전달 보증. 전송 순서 제어 가능. 신뢰성 ↑ UDP 비 연결형 서비스. 데이터 전달 보증X. 전송 순서 제어 불가. 속도 빠름
    1. TCP의 3 Way-HandShake와 4 Way-HandShake에 대해서 알고 있나요? 장치간의 논리적인 접속을 성립하기 위함 데이터를 전송하기 전, 정확한 전송을 보장하기 위해 사전에 세션 수립
  1. DNS에 대해 설명해주세요. 호스트의 도메인명을 호스트의 IP로 변환해주는 서비스
  1. 프록시 서버가 필요한 이유에 대해 설명해주세요. 캐시 데이터를 사용하기 위함 → 전송 시간 절약. 외부 트래픽 감소로 병목현상 방지 보안 목적 → IP 숨기기 가능 접속 우회

HTTP

  1. Http와 Https 통신 방식의 차이에 대해 설명해주세요. HTTP: 서로 다른 시스템 간 통신을 가능케하는 기초적인 프로토콜 HTTPS: SSL을 사용하여 보안이 강화된 HTTP 프로토콜
  1. HTTP 프로토콜에 대해 설명해주세요. 웹에서 이루어지는 모든 데이터의 교환의 기초인 클라이언트-서버 프로토콜
    1. 무상태와 비연결성에 대해 설명해주세요.
  1. REST API에 대해 설명해주세요.
  1. GET 메서드와 POST 메서드의 차이점에 대해 설명해주세요.
  1. PUT 메서드와 PATCH 메서드의 차이점에 대해 설명해주세요.
  1. 브라우저 저장소에 대해서 설명해주세요. - 쿠키 매번 서버로 전송, 문자열만 저장 가능, 용량 제한, 만료 일자 존재 - 웹 스토리지 클라이언트에서 저장만(서버전송X). 객체 저장 가능. 용량 무제한. 영구 저장 - 로컬 스토리지 삭제하지 않으면 데이터 영구 보관. 도메인별 별도 생성. 동일 도메인 데이터 공유가능 - 세션 스토리지 같은 도메인이라도 브라우저가 다르면 서로 다른 영역(서로 다른 탭, 종료된 탭)
  1. HTTP 상태 코드에 대해서 설명하세요. - 1XX : 조건부 응답 - 2XX : 성공 - 3XX : 리다이렉션 완료 - 4XX : 요청 오류 - 5XX : 서버 오류

보안/인증

  1. CORS에 대해 설명해주세요.
    1. CORS(Cross-Origin Resource Sharing)는 무엇인가 왜 이러한 방법이 정의 되었으며, 본인이 코드를 작성하면서 CORS와 관련하여서 경험하였던 이슈는 무엇인가요? 어떤 옵션을 통해서 해결하셨나요?
    2. Preflight Request에 대해 설명해주세요.
    3. same-origin 정책에 대해 설명해주세요.
    4. 로컬과 실제 환경 배포할 때의 CORS 세팅에 있어서 주의해야 할 점
  1. OAuth에 대해서 간단히 설명해주세요. 인증을 위한 표준 프로토콜의 한 종류 보안된 리소스에 엑세스하기 위해 클라이언트에게 권한을 제공하는 프로세스를 단순화하는 프로토콜 ? 언제, 왜 쓸까 회원가입 절차 간소화 검증되지 않은 앱에 유저의 정보가 직접적으로 노출X
추가자료

일반 개발 지식

  1. 객체 지향 프로그래밍에 대해서 설명하세요. 캡슐화, 다형성, 상속, 추상화
  1. 함수형 프로그래밍에 대해서 설명하세요.
  1. git flow에 대해서 간략하게 설명하세요.

컴퓨터 공학 기초, Number System

  1. 왜 RAM이 하드디스크보다 비싸다고 생각하나요?
  1. RAM 메모리 주소는 왜 16진법로 표현할까요?
  1. 32-bit 운영체제에서 4GB밖에 램을 사용할 수 없는 이유는 무엇인가요?
  1. IEEE 754 Single-precision floating-point format과 IEEE 754 double-precision floating-point format중 무엇이 더 많은 저장용량을 차지하나요?
  1. 16진수가 컴퓨터공학에서 자주 사용되는 이유에 대해서 설명해보세요.
  1. 컴파일러와 인터프리터의 차이가 무엇인가요? 컴파일러 전체 소스코드를 보고 명령어를 수집하고 재구성 실행속도 빠름, 번역속도 느림 인터프리터 소스 코드의 각 행을 연속적으로 분석하며 실행 실행속도 느림, 번역속도 빠름
  1. 캐시란 무엇인가요? 캐시의 일반적인 작동원리를 설명해주세요.
  1. 웹서비스에서 캐시가 적용되는 예제로는 어떤 것들이 있나요?
  1. 비트맵(래스터)과 벡터 이미지의 차이점은 무엇인가요?
  1. 가비지 컬렉션은 무엇이며, 가비지 컬렉션 기능을 가진 언어는 무엇인가요?
  1. 바이너리 파일과 텍스트 파일의 차이는 무엇인가요?

OS

  1. 프로그램(Program)에 대해서 간략하게 설명하세요.
  1. 프로세스(Process)에 대해서 간략하게 설명하세요.
  1. 스레드(Thread)에 대해서 간략하게 설명하세요.
  1. 멀티 스레드와 멀티 프로세스의 차이점에 대해서 간략하게 설명하세요.
  1. Blocking과 Non-Blocking의 차이점은 무엇인가요?
  1. Synchronous execution과 Asynchronous execution의 차이점은 무엇인가요?
  1. nodejs는 싱글쓰레드인가요?
  1. nodejs는 event-driven adchitecture인가요?

문자열

  1. 문자열 하나는 몇 바이트인가요?
  1. 유니코드는 무엇인가요?
  1. UTF-8과 UTF-16의 차이점은 무엇인가요?
  1. 스타일 시트를 불러올 때 charset=utf-8을 지정해주는 이유가 무엇인가요?
  1. 태그에서 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제

  1. Array와 LinkedList의 차이가 무엇인가요?
  1. Stack과 Queue의 차이점은 무엇인가요?
  1. Priority Queue의 동작 원리가 어떻게 되나요?
  1. 해시 테이블(Hash Table)에 대해서 설명해 주세요.
  1. 해시 테이블의 충돌을 해결할 수 있는 방법들 중 하나를 골라, 방법을 설명해 주세요.
  1. BST와 Binary Tree에 대해서 설명하세요.
  1. Graph에 대해서 설명해 주세요.
  1. BST의 탐색, 삽입, 삭제 시간복잡도는?
  1. BST와 Heap 차이
  1. Binary Tree의 3가지 종류와 특징을 설명해 주세요.
  1. 트리와 그래프의 차이는 무엇일까요?
  1. 그래프를 인접 리스트와 인접 행렬로 구현할 때 차이와 장단점, 쓰이는 상황에 대해 알려 주세요.
  1. (Advanced) 그래프는 어떻게 cycle 생성 여부를 판단할 수 있을까요?
  1. (Advanced) AVL Tree에 대해서 설명해 주세요.
  1. (Advanced) 최소 스패닝 트리(Minimum Spanning Tree)에 대해서 설명해 주세요.

알고리즘 15제

  1. 알고 있는 정렬 알고리즘을 말해 보고, 그중에 좋아하는 정렬 알고리즘에 대해서 설명해 주세요.
  1. n개의 배열에서 k(k<=n) 번째로 큰 수를 찾는 효과적인 방법이 있나요?
  1. 퀵 Vs 머지 Vs 힙 정렬의 차이점 말해 주세요.
  1. 비교식 정렬과 분배식 정렬에 대해 설명해 주세요.
  1. 재귀란 무엇인가요?
  1. BFS, DFS란 무엇일까요?
  1. Quick sort가 최악의 성능을 내는 경우와, 그때의 시간복잡도는 어떠한가요?
  1. 최악의 경우, 개선시킬 수 있는 방법은 무엇인가요?
  1. Fibonacci에서의 세 가지(Recursion, Dynamic Programming, 반복) 방식에 대한 시간복잡도를 설명해 주세요.
  1. Merge sort가 일어나는 과정을 설명해 보세요.
  1. 시간 복잡도에 대해서 설명해 주세요.
  1. 반복문과 재귀의 장단점에 대해서 말해 주세요.
  1. (Advanced) KrusKal MST 알고리즘에 대해 과정까지 간략하게 설명해 주세요.
  1. (Advanced) 최단거리를 구하려면 어떤 알고리즘을 써야 할까요? 그리고 그 알고리즘을 간단하게 설명해 주세요.
  1. (Advanced) Union find 알고리즘에 대해 아는 만큼 설명해 주세요.