Skip to content

CS / Front-End를 공부하고 기록합니다. (2021.01~ 2021.11)

License

Notifications You must be signed in to change notification settings

heech1013/study-note

Repository files navigation

Study Note

self-taught

CS / Front-End를 공부하고 기록합니다.
( 2021.01 ~ 2021.11 )

· 꼬리에 꼬리를 물고 왜?에 대해 탐구한다.
· 내용에 핵심만 담는다.
· 답안을 병렬적으로 작성한다.



Table of Contents


CS

Network

일반

  • 주소창에 www.naver.com을 입력 후 접속했을 때의 무슨 일이 일어날까?

OSI 7계층

  • OSI 7계층이란?
  • OSI 7계층이 필요한 이유는?
  • OSI 7계층과 TCP/IP 4계층을 비교해본다면?

OSI Physical Layer(물리 계층, 1계층)

  • OSI Physical Layer란?

OSI Data-link Layer(2계층)

  • OSI Data-link Layer란?
  • TCP/IP Network (Interface) layer(1계층)란?
  • 데이터 링크 계층의 주요 역할은?
  • 2계층에서 데이터가 hop-by-hop으로 전달된다는 것의 의미는 무엇일까?
  • 프레이밍이란?
  • 프레임의 구조(필드)는?
  • MAC 주소란?
  • MAC 주소와 IP 주소의 차이점은?
  • MAC 주소의 종류에는 어떤 것들이 있을까?
  • 스위치란?
  • 스위치의 포워딩 방식에 대해 설명해본다면?
  • MAC 주소 테이블이란?
  • MAC 주소 테이블이 동작하는 과정은?
  • LAN과 WAN의 차이점?
  • 접근 제어란?
  • 흐름 제어(Flow control)란?
  • 오류 제어란?
  • 이더넷이란?
  • 이더넷의 특징?
  • 이더넷의 장단점?

OSI Network Layer(3계층) & TCP/IP Internet Layer(2계층)

  • OSI Network layer(TCP/IP Internet layer)란?
  • 라우터란?
  • 라우팅이란?
  • 정적 라우팅과 동적 라우팅이란?
  • 포워딩이란?
  • 포워딩 테이블이란?
  • 스위치와 라우터의 차이점은?
  • 스위치와 라우터의 공통점은?
  • AS(Autonomous System, 자치 시스템)란?
  • IP(Internet Protocol)란?
  • 네트워크에서 '신뢰성'이 의미하는 것은?
  • ICMP(Internet Control Message Protocol)란?
  • IP의 데이터그램 단편화(fragmentation)란?
  • IP 데이터그램 단편화/재조립에 사용되는 IP 헤더의 종류에는 어떤 것들이 있을까?
  • IPv6란?
  • ARP(Address Resolution Protocol)란?
  • ARP 테이블이란?
  • 같은 LAN 상에서의 전송에서 ARP가 진행되는 과정은?
  • DHCP(Dynamic Host Configuration Protocol, 동적 호스트 구성 프로토콜)란?
  • DHCP의 장단점?
  • DHCP에서 IP 주소를 할당 받으면 영원히 사용할 수 있을까?
  • DHCP가 ip주소를 임대해주는 절차? 보충

OSI Transport Layer(4계층) & TCP/IP Transport Layer(3계층)

  • Transport Layer란?
  • network layer(3계층)와 Transport Layer(4계층)와의 차이점은?
  • Transport Layer가 흐름 제어를 제공하는 방법?
  • 혼잡 제어(Congestion control란?
  • Transport Layer가 혼잡 제어를 제공하는 방법?
  • AIMD(합 증가/곱 감소)란?
  • Slow start(느린 시작)란?
  • Fast retransmit(빠른 재전송)이란?
  • Transport Layer가 오류 제어를 제공하는 방법은?

TCP & UDP

  • TCP(Transmission Control Protocol)란?
  • UDP(User Datagram Protocol)란?
  • 연결형 서비스와 비연결형 서비스의 차이점은?
  • 데이터그램 방식과 가상 회선 방식이란?
  • 가상 회선 방식에서 논리적 연결이 설정되는 과정은?
  • 회선 구성 방식에는 어떤 것들이 있을까?
  • 전이중, 반이중, 단방향 방식에 대해 설명해본다면?
  • TCP와 UDP는 각각 어떤 특성의 서비스에 적합할까?
  • 3-way handshake의 과정에 대해 설명해본다면?
  • 4-way handshake의 과정에 대해 설명해본다면?
  • 왜 2-way handshake는 성립될 수 없을까?

OSI Application Layer(응용 계층, 7계층) & TCP/IP Application Layer(4계층)

  • Application Layer란?

DNS

  • DNS(Domain Name Server)란?
  • 도메인 네임(domain name)이란?
  • 도메인 네임의 구조?
  • DNS에서 도메인을 얻어오는 과정은?
  • PC는 local DNS의 ip 주소를 어떻게 알고 있을까?
  • DNS의 구성 요소는?
  • 도메인 네임 스페이스란?
  • 네임 서버란?
  • 네임 서버의 종류는?
  • resolver란?
  • DNS가 사용하는 전송 계층(Transport Layer)의 프로토콜은?
  • DNS에 UDP를 사용하는 이유?

로드 밸런싱(Load Balancing)

  • 트래픽이 증가해 기존의 컴퓨팅 자원으로 서비스할 수 없을 때, 대처할 수 있는 2가지 방법은?
  • 로드 밸런싱이란?
  • 로드 밸런싱 알고리즘에 대해 설명해본다면?
  • 각 계층의 로드 밸런서에 대해 설명해본다면?

(목차로 돌아가기)



OS

운영체제

  • 운영체제란?
  • 운영체제의 역할은?

프로세스와 스레드

  • 프로세스란?
  • 메모리는 어떻게 구성되어 있을까?
  • 스레드란?
  • 스레드가 필요한 이유는? (스레드의 장점은?)
  • 프로세스와 스레드의 차이점은?
  • 스레드를 지원하는 주체에 따라 나눈다면 어떻게 나뉠까?
  • 사용자 레벨 스레드의 장단점?
  • 커널 레벨 스레드의 장단점?
  • 멀티 프로세스와 멀티 스레드의 차이점은?

스케줄링

  • Context Switching(문맥 교환)이란?
  • Context Switching이 필요한 이유는?
  • Context Switching이 진행되는 과정은?
  • Context에는 어떤 정보들이 있을까?
  • Context Switching는 어떤 상황에서 진행될까?
  • PCB(Process Control Block)란?
  • PCB가 가지고 있는 정보에는 어떤 것들이 있을까?
  • 프로세스의 상태가 전이되는 과정은? (프로세스 상태 전이도의 흐름은?)
  • 인터럽트(Interrupt)란?
  • 인터럽트의 종류에는 어떤 것들이 있을까?
  • 인터럽트가 동작하는 순서는 어떻게 될까?
  • 시스템 콜(System Call)이란?
  • 시스템 콜이 필요한 이유는?
  • 커널 모드(Kernel mode)와 사용자 모드(User mode)란?
  • 시스템의 성능을 어떤 기준으로 측정할까?
  • (참고) 용어
  • 스케줄링의 주기에 따라 3가지로 나눈다면 어떻게 나뉠까?
  • 선점형 스케줄링과 비선점형 스케줄링의 차이?
  • 자원 관리에 있어서 time sharing과 space sharing의 차이는?
  • FCFS(First Come First Service)란?
  • Round Robin이란?
  • SPN(Shortest Process Next)이란?
  • SRTN(Shortest Remaining Time Next)란?
  • HRRN(High Response Ratio Next)이란?
  • MLQ(Multi Level Queue)란?
  • MFQ(Multi level Feedback Queue)란?

동기화

  • 동기화란?
  • 동기화가 필요한 이유는?
  • Critical section(임계 구역)이란?
  • Race condition(경쟁 상태)이란?
  • Mutual exclusion(상호 배제)이란?
  • Mutual exclusion에 사용되는 기본 연산(primitive)의 조건은?
  • Mutual exclusion을 SW로 구현한 알고리즘에는 어떤 것들이 있나?
  • Dekker's algorithm을 설명해본다면?
  • Dekker's algorithm을 더 자세히 설명해본다면? (간단하게 코드로 표현해본다면?)
  • SW로 구현한 상호 배제 알고리즘의 단점은?
  • HW로 구현한 상호 배제 알고리즘에는 어떤 것들이 있나?
  • TAS(TestAndSet)란?
  • TAS를 이용해 ME가 보장되는 과정을 조금 더 자세히 설명? (코드로 설명?)
  • OS로 구현한 상호 배제 알고리즘에는 어떤 것들이 있나?
  • 스핀락이란?
  • 스핀락은 어떤 특성의 프로세스에서 사용하기 적절할까?
  • 뮤텍스란?
  • 뮤텍스는 어떤 상황에서 사용하기 적절할까?
  • 스핀락과 뮤텍스의 차이점은?
  • 세마포어란?
  • 세마포어에 사용되는 연산의 종류와 그 로직은?
  • 스핀락/뮤텍스와 세마포어의 차이는?

데드락

  • 데드락(dead lock, 교착 상태)이란?
  • 데드락이 발생하기 위한 조건은?
  • 데드락을 처리하는 방법은?
  • 데드락 회피 알고리즘 중 하나를 설명해본다면?
  • 데드락 탐지 알고리즘 중 하나에 대해 설명해본다면?

가상 메모리

  • 가상 메모리란? (메모리 가상화란?)
  • 메모리의 가상화가 필요한 이유는?

주소 변환(address translation)

  • 주소 변환이란?
  • 주소 변환이 필요한 이유는?
  • 주소 변환을 구현한 기술에는 어떤 것이 있는지?
  • base and bound란?
  • 베이스 레지스터란?
  • 바운드 레지스터(bound register)란?
  • 바운드 레지스터가 타 프로세스 메모리 침범을 막는 방법은?
  • base and bound에서 운영체제의 역할은?
  • base and bound에서 프로세스의 주소 공간을 옮기려면 어떻게 해야 하나?
  • base and bound의 장단점은?
  • base and bound의 내부 단편화 문제란?

세그멘테이션(segmentation)

  • 세그멘테이션이란?
  • 세그먼트란?
  • 세그멘테이션에서 가상 주소로부터 물리 주소를 얻는 과정은?
  • 세그먼트의 바운드 레지스터의 역할은?
  • 하드웨어가 가상 주소에서 세그먼트의 종류와 오프셋을 파악하는 방법은?
  • 가상 주소 변환에 있어서 스택과 나머지 종류의 세그먼트 간 차이는?
  • 하드웨어는 세그먼트가 어느 방향으로 확장해야 하는지 어떻게 알 수 있을까?
  • 세그멘테이션이 메모리 공유를 지원하는 방법은?
  • 세그멘테이션을 위한 운영체제의 역할은?
  • 세그먼트 테이블이란? 보충
  • 세그멘테이션의 장단점은?
  • 외부 단편화란?
  • 외부 단편화에 대한 대응 방안은?
  • 압축이란? 진행되는 과정은?
  • 압축의 단점은?
  • 빈 공간 리스트를 관리하는 알고리즘에는 어떤 것들이 있으며, 각각의 장단점은?

페이징(Paging)

  • 페이징이란?
  • 페이징이 등장하게 된 배경은?
  • 페이징의 장단점은?
  • 페이징에서 물리 메모리의 구성은 어떻게 다른가?
  • 페이지 테이블(page table)이란?
  • 페이지 테이블 엔트리(PTE, Page Table Entry)란?
  • PTE의 구성 요소에는 어떤 것들이 있는지?
  • 페이징의 가상 주소에서 물리 주소를 얻어내는 과정은?
  • 현재 실행 중인 프로세스의 페이지 테이블 위치를 어떻게 알 수 있을까?

TLB

  • TLB(Translation-Lookaside Buffer, 변환-색인 버퍼)란?
  • TLB가 필요한 이유는?
  • TLB가 도입된 상태에서 가상 메모리 참조 시 일어나는 과정은?
  • (TLB의) 지역성 2종류와 적용된 예시에 대해 설명?
  • TLB 미스를 처리하는 방법에는 어떤 것들이 있을까?
  • TLB 미스 트랩 핸들러가 실행될 때 TLB 미스가 나지 않도록 대응 방안?
  • TLB Cache가 설계된 방식은? (cache의 associativity와 관련하여)
  • TLB 각 항목의 구성은?
  • 페이지 테이블의 valid bit와 TLB의 valid bit 간 차이점은?
  • TLB에는 여러 VPN이 공존할 수 있다. 하지만 그럴 경우 여러 프로세스 간 VPN을 구분할 수 없다. 이에 대한 방안은?
  • 캐시 교체 정책에는 어떤 것들이 있나?
  • LRU란?
  • Random 정책이란? 장단점은?
  • TLB coverage를 벗어난다는 것의 의미는?

스와핑(Swapping)

  • 스와핑이란?
  • swap in과 swap out에 대해 설명?
  • page fault란?
  • 스와핑이 지원되는 상황에서 메모리가 참조되는 과정을 설명?
  • 운영체제가 Page fault를 처리하는 과정은?
  • 운영체제가 페이지 교체(스왑) 알고리즘을 작동시키는 시기는?
  • 페이지 교체(스왑) 알고리즘이 작동될 때(즉, 여유 공간이 최솟값보다 적어질 때) 일어나는 일은?

Blocking/Non-Blocking & Synchronous/Asynchronous

  • Blocking과 Non-Blocking의 차이점?
  • Synchronous와 Asynchronous의 차이점?
  • Blocking + Sync 조합에 대해 설명해본다면?
  • Non-Blocking + Sync 조합에 대해 설명해본다면?
  • Blocking + Async 조합에 대해 설명해본다면?
  • Non-Blocking + Async 조합에 대해 설명해본다면?

(목차로 돌아가기)



Database

인덱스

  • 인덱스(index)란?
  • 인덱스를 사용하면 검색 속도가 빨라지는 이유는?
  • 인덱스가 작동하는 과정(순서)은?
  • 인덱스를 Hash Table로 구현하지 않는 이유는?
  • B-Tree란?
  • B+Tree란?
  • B-Tree보다 B+ Tree가 갖는 이점은?
  • 범위 검색이 Hash table보다 B+ Tree에서 이점을 갖는 이유는?
  • 인덱스의 장단점은?
  • 인덱스를 생성하기에 적절한 컬럼의 특성은?
  • 인덱스를 생성하기에 적절하지 않은 컬럼의 특성은?
  • DML(INSERT, DELETE, UPDATE)을 수행할 때 인덱스를 사용하는 컬럼에 대해 추가로 해줘야 하는 작업은?
  • 인덱스를 생성/조회하기 위한 SQL문 작성 방법은?

트랜잭션

  • 트랜잭션이란?
  • 트랜잭션의 성질에는 어떤 것들이 있을까?
  • 트랜잭션의 연산에는 어떤 것들이 있을까?
  • 트랜잭션의 상태를 설명해본다면?
  • 트랜잭션의 고립 수준에 따라 발생 가능한 읽기 이상 현상(Read Phenomena)에 대해 설명해본다면?
  • 트랜잭션의 고립 수준 유형에 대해 설명해본다면?
  • 트랜잭션의 고립 수준과 동시성과의 상관 관계는?

정규화

  • 정규화란?
  • 제1 정규화에 대해 설명?
  • 제2 정규화에 대해 설명?
  • 제3 정규화에 대해 설명?
  • BCNF에 대해 설명?
  • 데이터베이스의 이상 현상(Anomaly)에는 어떤 것들이 있을까?
  • 정규화의 단점은?
  • 반정규화(De-normalization)란?

  • 키란?
  • 슈퍼키란?
  • 후보키란?
  • 기본키란?
  • 대체키란?
  • 외래키란?

SQL Query

  • SQL이란?
  • JOIN이란?
  • INNER JOIN이란?
  • OUTER JOIN이란?
  • LEFT (OUTER) JOIN / RIGHT (OUTER) JOIN이란?
  • CROSS JOIN(카티전 조인)이란?
  • JOIN에서 ON과 WHERE의 차이점은?
  • (OUTER) JOIN에서 (ON과 WHERE를 이용해서) 차집합을 구하는 방법은?

DBMS

  • DBMS란?
  • DBMS를 사용했을 때의 장점은?
  • RDBMS란?

(목차로 돌아가기)



Data Structure & Algorithm

Data Structure

  • 스택과 큐에 대해 설명해본다면?
  • 연결 리스트(Linked List)란?
  • 그래프와 트리란?
  • 이진 탐색 트리(Binary Search Tree, BST)란?
  • 이진 탐색 트리의 연산에 대해 설명해본다면?
  • 불균형한 이진 탐색 트리의 검색 연산을 보완하기 위한 방법은?
  • 힙이란?
  • 힙의 삽입과 삭제 연산에 대해 설명해본다면?
  • 우선순위큐를 구현하는 방법에는 어떤 것들이 있을까?
  • 해시 테이블(Hash Table)이란?
  • 해시 값의 충돌을 해결하는 방법에는 어떤 것들이 있을까?

Algorithm

  • 코딩 인터뷰 팁
  • 정렬의 종류에는 어떤 것들이 있을까?
  • 퀵 소트의 피벗 지정 방식을 어떻게 개선할 수 있을까?
  • n번째 피보나치 수를 구하는 방법은?
  • DFS와 BFS의 시간 복잡도는?

(목차로 돌아가기)



Etc

객체 지향 프로그래밍(OOP)

  • 객체 지향 프로그래밍이란?
  • 객체 지향 프로그래밍의 장단점은?
  • 절차 지향 프로그래밍이란?
  • 클래스와 인스턴스(객체)란?
  • 오버로딩(Overloading)과 오버라이딩(Overriding)의 차이점은?
  • 객체 지향 5대 원칙에 대해 설명해본다면?

(목차로 돌아가기)



Front-end

Web

브라우저

  • 브라우저의 렌더링 과정에 대해 설명?
  • 레이아웃과 리페인트의 차이점은?
  • 레이아웃과 리페인트의 성능상 차이점은?
  • DOM이란?
  • DOM의 개체 구조에 대해 설명?
  • DOM은 HTML과 1:1로 매핑되는가?
  • HTML 문서에서 script 파일을 어디에 위치시키는 것이 좋을까?
  • 스크립트 로딩이 HTML 파싱을 방해하는 이유는?
  • script를 body 태그 최하위에 놓는 것의 한계는? 그 대안은?
  • script 태그의 defer 속성에 대해 설명?
  • 여러 defer script 간 script가 실행되는 순서는?
  • defer script를 사용할 때 주의해야 할 점은?
  • script 태그의 async 속성에 대해 설명?
  • 여러 async script 간 script가 실행되는 순서는?
  • defer script와 async script가 각각 어느 경우에 유용한가?

성능

  • 웹에서 서비스의 성능을 측정하는 방법은?
  • 브라우저에서 DOMContentLoaded와 load 이벤트가 발생하는 시점은?
  • 브라우저에서 이벤트가 발생하는 시점을 측정하는 방법은?
  • 브라우저 기준으로 성능을 측정하는 것의 한계(단점)은?
  • 사용자 기준에서 성능을 측정할 수 있는 지표들에 대해 아는 것이 있는지?
  • 사용자 기준에서 성능을 측정하는 방법은?
  • 웹 페이지 로딩을 최적화할 수 있는 방법에는 어떤 것들이 있을까?
  • 블록 리소스 최적화에 대해 설명?
  • 리소스 요청 수 줄이기에 대해 설명?
  • 리소스 용량 줄이기에 대해 설명?
  • 웹 페이지 렌더링을 최적화할 수 있는 방법에는 어떤 것들이 있을까?
  • 레이아웃 최적화에 대해 설명?
  • 애니메이션 최적화에 대해 설명?

HTTP

  • HTTP란?
  • HTTP의 특징?
  • HTTP가 비연결성으로 설계된 이유가 뭘까?
  • HTTP의 비연결성으로 인한 단점이 뭐가 있을까?
  • HTTP의 비연결성을 해결하기 위한 방법?
  • Keep-Alive를 사용하는 방법?
  • Keep-Alive의 장점?
  • Keep-Alive의 단점?
  • 무상태성을 해결하기 위한 방법?
  • HTTP 요청/응답 메시지의 구성(형식)은?
  • HTTP Method에는 어떤 것들이 있나?
  • GET과 POST의 차이?
  • 멱등성이란?
  • GET과 HEAD의 차이?
  • POST와 PUT의 차이?
  • PUT와 PATCH의 차이?
  • OPTIONS 란?
  • OPTIONS가 언제 사용될까?
  • CORS의 preflight request의 목적은?
  • (참고) 주요 HTTP 응답 코드
  • 인증과 인가의 차이점은?
  • HTTP 헤더에는 어떤 것들이 있을까? 보충
  • HTTP의 보안 취약점은?

HTTPS

  • HTTPS란?
  • HTTPS를 통해 얻을 수 있는 이점은?
  • HTTPS가 암호화 채널을 수립할 때 사용하는 암호화 프로토콜은?
  • SSL 인증서란?
  • SSL 인증서의 역할은?
  • SSL 인증서에 포함된 정보는?
  • SSL 인증서가 서비스를 보증하는 과정은?
  • SSL 통신 과정을 설명해본다면?

HTTP/2

  • HTTP/2 이전 버전들의 성능 제한 이슈는? (HTTP/2가 등장한 이유는?)
  • HTTP/2의 목적은?
  • HTTP/2가 제공하는 주요 기능에는 어떤 것들이 있나?
  • HTTP/2는 HTTP의 의미 체계를 대체(변경)하는지?
  • HTTP/2의 바이너리 프레이밍 계층이란?
  • HTTP/2의 스트림, 메시지, 프레임에 대해 설명?
  • HTTP/2가 요청, 응답 다중화를 지원하는 원리는?
  • HTTP/2의 요청, 응답 다중화를 통해 얻을 수 있는 이점은?
  • HTTP/2의 (출처당) 단일 연결을 통해 얻을 수 있는 이점은?
  • HTTP/2에서 스트림 우선순위를 지정하는 과정은?
  • HTTP/2의 서버 푸시에 대해 설명?
  • HTTP/2의 헤더 압축에 대해 설명?

쿠키 & 세션

  • 쿠키란?
  • 쿠키는 어떻게 구성되어 있나?
  • 쿠키를 생성하는 방법은?
  • 쿠키를 요청 메시지에 어떻게 설정하나?
  • 요청 메시지에 쿠키가 어디에 들어가있나?
  • 쿠키의 단점은?
  • 쿠키의 성능 상 단점을 보완하기 위한 대안은?
  • 쿠키의 보안적 취약점?
  • 쿠키의 보안적 취약점에 대한 대안은?
  • 쿠키가 만료되는 시점은?
  • 세션이란?
  • 세션을 생성하는 절차는?
  • 세션의 데이터가 유지되는 기간은? (만료되는 시점은?)
  • 쿠키와 세션의 차이점?
  • 세션의 장점에도 불구하고 쿠키를 사용하는 이유?

localStorage & sessionStorage

  • localStorage(또는 sessionStorage)란?
  • 쿠키 대신 사용하는 이유는?
  • localStorage과 sessionStorage의 차이점은?

CORS

  • CORS란?
  • origin(출처)이란?
  • 같은 출처, 다른 출처를 판단하는 기준은?
  • SOP(동일 출처 정책)란?
  • SOP가 존재하는 이유는?
  • SOP가 교차 출처로 삽입하는 리소스를 허용하는 경우는?
  • 브라우저와 서버 중 CORS를 판단하는 주체는?
  • CORS가 동작하는 방식은? (브라우저가 CORS를 판단하는 방법은?)
  • CORS가 동작하는 세 가지 시나리오에 대해 알고 있는지?
  • Simple Request란? (+ 과정을 설명해본다면?)
  • Simple Request를 사용할 수 있는 조건은?
  • Preflight Request란? (+ 과정을 설명해본다면?)
  • Credentialed Request란?
  • Credentialed Request를 사용하는 방법은?
  • credentials에 옵션이 same-origin(그리고 같은 출처 간 통신일 때)이거나 include일 때 브라우저가 추가로 확인하는 조건은?
  • CORS를 해결할 수 있는 방법은?
  • 프록시 서버를 활용해 CORS 에러를 해결하는 과정은?
  • CORS(혹은 Access-Control-Allow-Origin)의 단점?
  • JSONP란?
  • JSONP를 활용하는(동작하는) 과정에 대해 설명?
  • JSONP가 더 이상 사용되지 않는 이유는?

REST

  • REST란?
  • REST의 특징은?
  • Uniform Interface란? (더 자세히 설명?)
  • Uniform Interface가 필요한 이유는 뭘까?
  • REST의 구성은?
  • REST에서 정의하는 CRUD Operation과 그에 해당하는 HTTP Method는?
  • REST의 장단점?
  • REST API란?
  • REST API의 규칙은?

보안 공격(XSS/CSRF/SQL Injection)

  • XSS란?
  • XSS를 방지하기 위한 방법은?
  • CSRF란?
  • CSRF를 방지하기 위한 방법은?
  • SQL Injection이란?
  • SQL Injection 중 아는 종류가 있는지?
  • SQL injection의 대응 방안은?

Web Server & WAS

  • Static Page와 Dynamic Page의 차이점은?
  • 웹 서버란?
  • 웹 서버의 기능은?
  • WAS(Web Application Server)란?
  • WAS의 기능은?
  • 웹 서버가 필요한 이유는?
  • WAS가 필요한 이유는?
  • WAS로 웹 서버와 애플리케이션 서버 기능을 모두 수행하지 않는 이유는?

CSR / SSR / SPA

  • CSR이란?
  • SSR이란?
  • SSR의 장점?
  • SSR의 단점? 보충
  • SPA란?
  • 전통적인 웹 방식은 어땠나?
  • SPA의 장점?
  • SPA의 단점?
  • SPA를 하면 SEO에 문제가 생기는 이유? 보충
  • SPA의 단점 - 초기 구동 속도를 극복하기 위한 방법?
  • SPA의 단점 - SEO 최적화 문제를 극복하기 위한 방법? 보충
  • Routing이란?
  • SPA에서 routing이 어려울 수 있는 이유?

프론트엔드 개발의 흐름과 철학

  • 단방향 바인딩과 양방향 바인딩의 차이는?
  • 양방향 데이터 바인딩의 장단점은?
  • 단방향 데이터 바인딩의 장단점은?
  • (참고) 데이터 상태 관리의 흐름에 대하여

이벤트 버블링 & 캡처 & 위임

  • 이벤트 버블링이란?
  • 이벤트 캡쳐란?
  • 이벤트 캡쳐를 구현하는 방법은?
  • 이벤트 전파를 막는 방법은?
  • 이벤트 위임이란?
  • 이벤트 위임을 사용함으로써 얻을 수 있는 이점은?

Ajax

  • Ajax란?
  • Ajax의 이점? 사용 이유?
  • Ajax를 사용하는 방법은? Ajax가 동작하는 원리는?

JSON

  • JSON이란?
  • 다른 데이터 포맷과 비교하여 JSON의 이점?
  • JavaScript 객체를 JSON으로 변환하는 방법은? 그 반대는?

웹팩 & 바벨

  • 웹팩이란?
  • 모듈 번들러란?
  • 모듈이란?
  • 모듈 번들러(혹은 웹팩)이 필요한 이유는?
  • 파일 단위로 모듈을 관리하지 않을 때의 문제점?
  • 웹팩이 파일 단위로 모듈을 관리하기 위해 사용하는 방법은?
  • 웹을 개발할 때 반복되는 작업에는 어떤 것들이 있을까?
  • 모듈 번들러(혹은 웹팩)이 웹 로딩 속도를 어떻게 개선할 수 있을까?
  • 엔트리(entry)란?
  • 아웃풋(output)이란?
  • 로더란?
  • 로더의 예시에는 어떤 것들이 있을까?
  • 플러그인(plugin)이란?
  • 바벨이란?
  • 트랜스파일이란?

모듈 시스템

  • 모듈을 사용함으로써 얻을 수 있는 장점은?
  • 자바스크립트 모듈을 구현하는 대표적인 '명세'에는 어떤 것이 있을까?
  • AMD와 CommonJS가 어떻게 다를까?
  • ES2015(ES6)의 ES Module없이 모듈의 문제점을 어떻게 해결할 수 있을까?
  • IIFE 방식으로 모듈을 사용하는 방법은?

컴포넌트

  • 프론트엔드에서 컴포넌트란?
  • 좋은 컴포넌트를 설계하기 위해 따를 수 있는 원칙에는 어떤 것들이 있을까?

기타

  • URI와 URL의 차이는?
  • 웹 접근성(Web Accessibility)
  • HTML5

(목차로 돌아가기)



JavaScript

언어의 특징

  • JS의 언어적인 특징?
  • 인터프리터 언어와 컴파일 언어의 차이점?
  • 인터프리터 언어와 컴파일 언어의 장단점?
  • 프로토타입 기반 언어란?

엔진 & 런타임

  • JavaScript 엔진의 구성은?
  • JavaScript 런타임이란?

객체(Object)

  • Object(객체)란?
  • 객체를 생성하는 방법은?

프로토타입(Prototype)

  • 클래스 기반의 객체지향 프로그래밍 언어와, 프로토타입 기반의 객체지향 프로그래밍 언어(JavaScript)의 차이점은?
  • prototype이란?
  • 프로토타입을 사용하는 이유는? (활용되는 예시는?)
  • (참고) [[Prototype]] & __proto__ & prototype
  • 프로토타입이 결정되는 시기는?
  • prototype chain이란?
  • 프로토타입 객체를 확장하는 방법은?
  • 값을 할당할 때와, 참조할 때 프로토타입 체인이 동작하는 여부?
  • 프로토타입 객체를 동적으로 변경하는 방법은?
  • 프로토타입 객체를 동적으로 변경하기 이전에 생성된 객체와, 이후 생성된 객체의 차이점은?

Class 보충

  • (참고) Class의 constructor

Closure

  • Closure란?
  • Closure의 동작 원리를 (실행 컨텍스트와 관련하여) 설명?
  • Closure의 활용법?
  • Closure의 상태 유지가 전역 변수에 비해 갖는 이점?
  • 렉시컬 스코핑(lexical scoping)이란?
  • Closure의 단점?
  • Closure가 참고하고 있는 메모리를 해제해주려면 어떻게 할까?
  • 클로저로 인해 자주 발생하는 실수에는 어떤 것들이 있을까? 보충

this

  • this란?
  • this의 값이 결정되는 방식을 설명?
  • 함수가 '일반 함수로서' 호출될 때 this가 바인딩되는 객체는?
  • 전역객체란?
  • Browser-side와 server-side에서의 전역객체가 어떻게 다른가?
  • 그러면 함수가 '일반 함수로서', 함수의 내부 함수나 메소드의 내부 함수, 콜백 함수 등으로서 호출될 때는?
  • 함수가 '일반 함수로서' 호출되었을 때 this가 전역 객체를 참조하는 것을 회피하는 방법이 있을까?
  • 함수가 '메소드로서' 호출될 때 this가 바인딩되는 객체는?
  • 그러면 함수가 '프로토타입 객체의 메소드로서' 호출될 때는?
  • 함수가 '생성자 함수로서' 호출될 때 this가 바인딩되는 객체는?
  • 객체 리터럴 방식과 생성자 함수 방식의 차이는?
  • 명시적으로 this를 바인딩하는 방법?
  • this를 사용할 때 자주 발생하는 실수에는 어떤 것들이 있을까?
  • apply, call, bind 메소드의 사용법에 대해 설명?
  • 유사 배열(arguments)이 배열의 메소드를 사용할 수 있도록(조작할 때) apply와 call을 사용하는 방법에 대해 아는지?
  • 암시적 바인딩과 명시적 바인딩의 우선 순위는?
  • arrow function에서의 this는 어떻게 동작하나?
  • arrow function을 사용하면 안되는 경우는?

비동기 처리

  • JavaScript에서의 비동기 프로그래밍이란?
  • JavaScript가 코드를 비동기적으로 실행하는 이유는 뭘까?
  • JavaScript에서 (시간이 오래 걸리는) 동기적인 코드가 blocking을 일으키는 이유는 뭘까?
  • 프론트엔드에서 비동기 처리가 중요한 이유는?

콜백 패턴 & Promise

  • Promise란?
  • 동기식 작업과 비동기식 작업이란? 차이점은?
  • Promise는 어떤 문제점을 해결하고자 등장했나?
  • 비동기 처리에 콜백 패턴을 사용해야 하는 이유는?
  • 콜백 방식의 비동기 처리가 에러 처리에 곤란한 이유는?
  • Promise를 생성하는 방법은?
  • Promise의 상태(state)는 어떤 것들이 있나?
  • Promise의 후속 처리 메소드에 대해 설명?
  • Promise의 에러 처리는 then과 catch 중 어떤 것으로 하는 것이 더 좋을까?
  • Promise의 정적 메소드에 대해 설명?
  • Promise.resolve와 Promise.reject에 대해 설명?
  • Promise.all과 Promise.race에 대해 설명?

이벤트 루프

  • 이벤트 루프란?
  • 이벤트 루프가 필요한 이유는?
  • Run-to-Completion이란?
  • 자바스크립트가 Run-to-Completion으로 동작하는 이유(원리)는?
  • 태스크 큐가 동작하는 과정은?
  • 태스크 큐와 마이크로 태스크 큐가 동작하는 과정은?
  • 이벤트 루프(혹은 태스크 큐의 우선 순위)로 인해 사용자 경험에 해가 되는 경우가 있을까?
  • 고비용 연산으로 인한 블로킹에 대응하는 방법은?
  • (참고) 활용 예시: progress bar

실행 컨텍스트

  • 실행 컨텍스트란?
  • 실행 가능한 코드란?
  • 실행에 필요한 환경이란?
  • 코드가 실행되고, 함수가 실행되고 끝나는 과정을 실행 컨텍스트 스택으로 설명해본다면?
  • 실행 컨텍스트의 (물리적인) 구조는?
  • Variable Object란?
  • 전역 컨텍스트와 함수 컨텍스트에서 VO가 가리키는 객체(내용)의 차이는?
  • 스코프 체인이란?
  • 특정 EC의 스코프 체인에는 어떤 스코프가 담겨있나?
  • 변수를 검색하는 과정을 스코프 체인과 연관하여 설명해본다면?
  • 실행 컨텍스트에 값이 채워지는 순서는? (실행 컨텍스트가 생성되는 순서는?)
  • 변수 객체화가 진행되는 과정은?
  • 클로저를 실행 컨택스트에 기반해 설명해본다면?
  • 함수 호이스팅이란?
  • 변수 호이스팅이란?

호이스팅

  • 호이스팅이란?
  • 호이스팅의 대상은?
  • 함수 선언문과 함수 표현식의 차이는?
  • 함수 선언문에 비해 함수 표현식이 가지는 장점은?
  • 호이스팅에서의 우선순위에 대해 설명해본다면?
  • 호이스팅은 지향해야 할까, 지양해야 할까?
  • 호이스팅을 방지하기 위한 방법은?
  • 호이스팅을 지양해야 함에도 불구하고, var와 호이스팅을 이해해야 하는 이유는?

EcmaScript

  • EcmaScript란?
  • ECMAScript와 JavaScript의 관계는? 차이점은?
  • ES6에서 추가된 문법에 대해 아는 것이 있는지?

기타

  • 자바스크립트 배열도 객체일까? (배열의 내부 구조는?)
  • use strict란?

(목차로 돌아가기)


Reference


Hits

About

CS / Front-End를 공부하고 기록합니다. (2021.01~ 2021.11)

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published