# Part 01. Network
Made by. [김민지](https://github.com/SSAFY-CS-STUDY/Tech_interview/tree/main/01.network/kmj) [박혜빈](https://github.com/SSAFY-CS-STUDY/Tech_interview/tree/main/01.network/phb) [이연주](https://github.com/SSAFY-CS-STUDY/Tech_interview/tree/main/01.network/lyj) [황성현](https://github.com/SSAFY-CS-STUDY/Tech_interview/tree/main/01.network/hsh)
## 01-1. Core of Network Overview
## 추가해야할 것
- [ ] MAC주소와 IP주소
- [ ] 서브네팅과 서브넷 주소
- [ ] 방화벽
## [OSI 7 layers와 TCP/IP 4 layer](#osi-7-layers와-tcpip-4-layers)
#### 💡 프로토콜이란?
#### 💡 패킷이란?
#### 💡 OSI 7 Layer와 각 계층에 대한 설명을 해주세요.
#### 💡 TCP/IP Layer와 각 계층에 대한 설명을 해주세요.
#### 💡 OSI 7 Layer 또는 TCP/IP Layer에서 계층화하는 이유가 무엇인가요?
#### 💡 Encapsulation과 Decapsulation을 서로 비교하며 설명해주세요
#### 💡 IP란?
#### 💡 IP 주소란?
#### 💡 IPV4 vs IPV6 을 설명해주세요.
#### 💡 IPv4의 주소 부족현상을 해결하기 위해 현재 어떤 방법을 사용하고 있나요?
## [TCP와 UDP](#tcp-udp)
#### 💡 TCP와 UDP의 특징과 차이점을 설명해주세요.
#### 💡 TCP를 사용하는 대표적인 프로토콜은 무엇인가요?
#### 💡 3-Handshaking과 4-Handshaking의 과정을 설명해주세요.
#### 💡 3-way handshaking 과정에서 클라이언트가 서버가 보낸 ACK+SYN을 받지 못하면?
#### 💡 클라이언트와 서버는 무엇인가요?
#### 💡 4-way handshaking 과정에서 클라이언트가 마지막에 ACK를 굳이 보내는 이유?
#### 💡 만약 Server에서 FIN 세그먼트를 전송하기 전에 전송한 패킷이 Routing 지연이나 패킷 유실로 인한 재전송 등으로 인해 FIN 패킷보다 늦게 도착하는 상황이 발생하면 어떻게 될까?
#### 💡 TCP의 연결 설정 과정(3단계)과 연결 종료 과정(4단계)이 단계가 차이나는 이유?
#### 💡 초기 Sequence Number인 ISN을 0부터 시작하지 않고 난수를 생성해서 설정하는 이유?
#### 💡 UDP에서 신뢰도를 보장하는 방법을 설명해주세요.
## [HTTP와 HTTPS](#http와-https-답변)
#### 💡 HTTP와 HTTPS를 설명해주세요
#### 💡 HTTP의 단점을 설명해주세요
#### 💡 HTTP1.1와 HTTP2.0 차이점은 무엇인가요?
#### 💡 HTTP는 왜 비연결성인가?
#### 💡 모든 웹 페이지에서 HTTPS 를 사용하지 않는 이유를 설명해주세요.
#### 💡 비대칭키 또는 공개키 암호화 방식은 무엇인가요?
#### 💡 HTTP REQUEST 방식 중 GET과 POST의 차이을 설명해주세요.
#### 💡 GET, POST를 제외하고 다른 방식들을 설명해주세요.
#### 💡 조회하기 위한 용도 POST가 아닌 GET 방식을 사용하는 이유?
#### 💡 현대 웹 에서는 비연결성을 해결방법을 설명해주세요.
## [DNS와 DHCP](#dns-dhcp-답변)
#### 💡 도메인과 DNS가 무엇인지 설명해주세요
#### 💡 Domain Name 구조를 설명해주세요.
#### 💡 DNS round robin 방식의 문제점과 해결방법을 설명해주세요.
#### 💡 DHCP 서버의 역할을 간단히 설명해주세요.
#### 💡 Domain Name System 동작과정을 설명해주세요.
## [로드밸런서](#로드밸런서-답변)
#### 💡 로드 밸런싱을 설명해주세요.
#### 💡 L4 로드 밸런싱과 L7 로드 밸런싱에 대해 설명하고, 차이를 말해보세요
#### 💡 게이트웨이란?
#### 💡 서버에 트래픽이 주어졌을 때 어떻게 응답속도를 개선할 수 있는가?
## 01-2. Web of Network Overview
## [WEB](#web-답변)
#### 💡 클라이언트와 서버는 무엇인가요?
#### 💡 url과 uri에 대해 각각 설명해주세요
#### 💡 브라우저에 "www.google.com" 입력하면 어떤일이 일어날까요?
#### 💡 RESTful API란 무엇인가요?
#### 💡 Ajax는 무엇인가요?
#### 💡 Ajax의 장점과 단점은 무엇인가요?
#### 💡 CORS는 무엇인가요?
#### 💡 CORS preflight는 무엇인가요?
#### 💡 소켓이란 무엇인가요?
#### 💡 DOM과 가상DOM
#### 💡 OAuth란 무엇인가요?
#### 💡 SPA
## [cookie와 session](#cookie와-session-답변)
#### 💡 cookie와 session에 대해 설명해주세요
#### 💡 Session 동작 순서를 설명해주세요.
#### 💡 cookie를 쓰는 이유를 설명해주세요
#### 💡 세션 인증방식 단점
#### 💡 토큰 인증방식
#### 💡 JWT
#### 💡 토큰 인증방식 단점
#### 💡 쿠키 인증방식 해결방안
<br/><br/>
# 01-1. Core of Network
## OSI 7 layers와 TCP/IP 4 layers 답변
#### 💡 프로토콜이란?
서로 다른 기기들 간의 데이터 교환을 위해 표준화한 통신 규약입니다. 프로토콜의 기능에는 흐름제어, 오류제어, 순서제어 등이 있습니다.
* __흐름제어__ 는 수신측에서 송신측이 송신하는 데이터의 전송량이나 전송 속도를 조절하는 기능입니다.
이 때, 정지 대기 방식과 슬라이딩 윈도우 방식을 사용합니다.
* __오류제어__ 는 전송중에 발생하는 오류를 검출하고 정정하여 정보의 파손에 대비하는 기능입니다.
* __순서제어__ 는 데이터 블록에 전송 순서를 부여하는 기능입니다.
송신 데이터들이 순서적으로 전송되도록 함으로써 흐름제어 및 오류제어를 용이하게 합니다.
#### 💡 패킷이란?
* 3계층인 네트워크 계층에서 교환되는 정보의 단위입니다.
패킷에는 번호가 붙여지고, 목적지 주소와 오류검출 비트가 포함됩니다.
>
#### 💡 OSI 7 Layer와 각 계층에 대한 설명을 해주세요.
OSI 7 계층은 국제 표준 기관 ISO가 통신 접속부터 완료까지의 과정을 총 7단계로 정의한 국제 통신 표준 모델입니다.
OSI 7 계층은 Physical, Data Link, Network, Transport, Session, Presentation, Application으로 구성되어 있습니다.
* 물리계층은 데이터를 전기신호로 바꿔주는 계층입니다.
* 데이터링크 계층은 MAC 주소를 가지고 통신하는 계층입니다. 오류검출과 흐름제어를 통해 데이터가 안전하게 도달하도록 합니다.
* 네트워크 계층은 IP주소를 이용해서 최적의 경로를 제공하는 역할입니다.
* 전송계층은 데이터 전송을 위한 논리적인 연결을 하는 역할을 합니다.
* 표현계층은 서로 다른 Application들이 data를 이해할 수 있도록 도와주는 계층입니다. 데이타의 압축, 암호화, JPEG포맷 등을 수행합니다.
#### 💡 TCP/IP Layer와 각 계층에 대한 설명을 해주세요.
* TCP/IP는 현재 수많은 프로그램들이 인터넷으로 통신하는데에 있어 가장 기반이 되는 프로토콜입니다.
* 네트워크 액세스 계층, 인터넷 게층, 전송계층, 응용 계층으로 이루어져 있습니다.
* 네트워크 액세스 계층 은 실제 데이터를 송수신하는 역할입니다.
* 인터넷 계층 은 데이터 전송을 위한 주소지정, 경로설정을 제공합니다.
* 전송 계층 은 호스트들 간의 신뢰성 있는 통신을 제공합니다.
* 응용 계층 은 응용 프로그램 간의 데이터 송수신을 제공합니다.
#### 💡 OSI 7 Layer 또는 TCP/IP Layer에서 계층화하는 이유가 무엇인가요?
* 계층을 나눈 이유는 통신이 일어나는 과정을 단계별로 파악할 수 있으며 이상이 생길 경우 해당 계층에서 보수가 쉽기 때문입니다.
#### 💡 Encapsulation과 Decapsulation을 서로 비교하며 설명해주세요
* 캡슐화는 상위 계층에서 하위 계층으로 전송되는 데이터가 이동하면서 헤더에 각 계층의 기능이 합쳐지는 방식을 말합니다.
* 디캡슐화는 데이터가 하위 계층에서 상위 계층으로 전달되면서 각 계층에서 요구되는 헤더 정보가 제거되는 것을 말합니다.
#### 💡 IP란?
* 네트워크 계층의 프로토콜로 패킷의 분해, 조립, 주소지정, 경로 선택 기능을 제공합니다.
#### 💡 IP 주소란?
* Internet Protocol Address로 인터넷에 연결된 모든 컴퓨터 자원을 구분하기 위한 고유 주소입니다.
* 네트워크 부분의 길이에 따라 A클래스에서 E클래스까지 5단게로 구성되어 있습니다.
#### 💡 IPV4 vs IPV6 을 설명해주세요.
* IPv4는 총 32비트로 4개의 8비트로 구성됩니다.A·B·C·D 클래스 CIDR(등급없는 도메인 간 라우팅)로 주소를 할당합니다.
* IPv6는 IPv4의 주소부족문제를 해결하기 위해 만들어졌습니다. 총 128비트로 구성되어 있어 2^128 개의 주소를 부여할 수 있습니다. CIDR를 기반으로 계층적으로 할당합니다. 주소 유형은 유니캐스트·멀티캐스트·애니캐스트 3가지가 있습니다.
#### 💡 IPv4의 주소 부족현상을 해결하기 위해 현재 어떤 방법을 사용하고 있나요?
* NAT, CIDR 기반 서브넷팅, IPv6을 이용하여 IPv4의 주소 부족현상을 해결하고 있습니다.
* NAT를 이용하여 사설 IP주소를 사용하면서 공인 IP주소로 상호변환할 수 있도록 하여 한정된 공인IP주소를 절약할 수 있습니다.
* CIDR(사이더)는 기존 클래스 기반 IPv4 할당 방식의 경우 IP 주소가 늘어나면 할당 가능한 IP주소의 수가 고갈됩니다. 사이더는 가변 길이 서브넷 마스크를 사용하여 임의의 길이의 접두사를 지정할 수 있습니다.
* IPv6는 IP 주소의 길이가 32 비트에서 128 비트로 IPv4의 주소 부족문제를 해소하기 위해 사용되고 있습니다.
</br></br>
## TCP와 UDP 답변
#### 💡 TCP와 UDP의 특징과 차이점을 설명해주세요.
* TCP는 연결형 서비스로 신뢰성을 보장합니다. 신뢰성 보장을 위해 오류제어, 흐름제어, 혼잡제어를 제공합니다.
* UDP는 비연결형 서비스로 비신뢰적이지만 속도가 빨라서 실시간 스트리밍에 사용됩니다.
#### 💡 TCP를 사용하는 대표적인 프로토콜은 무엇인가요?
* HTTP가 있습니다.
#### 💡 3-Handshaking과 4-Handshaking의 과정을 설명해주세요.
* 3-Handshaking 클라이언트가 서버에게 연결 요청. 서버는 클라이언트에게 확인 및 승낙 ACK+SYN 패킷 전송. 클라이언트는 확인 ACK 전달하고 연결.
* 4-Handsahking 클라이언트가 서버에게 종료 요청. 서버는 확인 ACK 전달. 데이터 전송 완료 후 클라이언트에게 FIN 전달. 클라이언트는 서버에게 확인 ACK전송 후 연결 종료
#### 💡 3-way handshaking 과정에서 클라이언트가 서버가 보낸 ACK+SYN을 받지 못하면?
* 클라이언트는 서버에게 SYN 세그먼트를 보내고 시간을 잽니다. Timeout이 되기 전까지 서버에게 ACK, SYN 세그먼트가 오지 않으면 클라이언트는 다시 SYN 세그먼트를 보내고 수신을 대기합니다.
#### 💡 클라이언트와 서버는 무엇인가요?
* 서버-클라이언트(server-client)란 데이터를 저장하고 관리하는 서버 부분과 해당 서버에 접속하여 데이터를 열람하는 클라이언트 부분으로 구성된 네트워크 구조를 말한다.
#### 💡 4-way handshaking 과정에서 클라이언트가 마지막에 ACK를 굳이 보내는 이유?
* 서버가 보낸 FIN세그먼트를 클라이언트가 받지 못하면 클라이언트는 FIN_WAIT2 상태로 종료되지 못한 채 계속 기다려야 합니다. 하지만 서버는 이미 포트를 닫고 응답하지 않은 상태이기 때문에 클라이언트는 불필요햔 자원을 소모할 수 있습니다.
#### 💡 만약 Server에서 FIN 세그먼트를 전송하기 전에 전송한 패킷이 Routing 지연이나 패킷 유실로 인한 재전송 등으로 인해 FIN 패킷보다 늦게 도착하는 상황이 발생하면 어떻게 될까?
* Client에서 세션을 종료시킨 후 뒤늦게 도착하는 패킷이 있다면 이 패킷은 Drop되고 데이터는 유실될 것입니다.
* 이러한 현상에 대비하여 Client는 Server로부터 FIN을 수신하더라도 일정시간(디폴트 240초)동안 세션을 남겨놓고 잉여 패킷을 기다리는 과정("TIME_WAIT")을 거칩니다.
#### 💡 TCP의 연결 설정 과정(3단계)과 연결 종료 과정(4단계)이 단계가 차이나는 이유?
* 연결 과정과 한 단계가 차이나는 이유는 Client가 데이터 전송을 마쳤다고 하더라도 Server는 아직 보낼 데이터가 남아있을 수 있기 때문에 일단 FIN에 대한 ACK만 보내고, 데이터를 모두 전송한 후에 자신도 FIN 메시지를 보내기 때문이다.
#### 💡 초기 Sequence Number인 ISN을 0부터 시작하지 않고 난수를 생성해서 설정하는 이유?
* 0으로 시작하는 ISN은 쉽게 예측되므로 보안에 취약해지는 이유가 있습니다. 또한 다른 사용자와 같은 포트를 사용하고 있을 때 패킷을 착각할 수 있는 경우가 생겨 난수로 ISN을 초기화 합니다. +) ~Seq ack 넘버는 정렬된 바이트 스트림으로 설정된다.~
#### 💡 UDP에서 신뢰도를 보장하는 방법을 설명해주세요.
* RUDP를 사용한다.
</br></br>
## HTTP와 HTTPS 답변
#### 💡 HTTP와 HTTPS를 설명해주세요
* Hyper Text Transfer Protocol의 약자로 인터넷에서 데이터를 주고 받을 수 있는 프로토콜입니다.
* HTTPS는 HTTP에 보안이 추가된 것입니다.
#### 💡 HTTP의 단점을 설명해주세요
* 보안이 취약합니다.
* 평문 통신(암호화 되지 않은 통신)이기 때문에 도청이 가능합니다.
* 통신 상대를 확인하지 않아 위장이 가능합니다.
* 완전성을 증명할 수 없기 때문에 변조가 가능합니다.
#### 💡 HTTP1.1와 HTTP2.0 차이점은 무엇인가요?
* HTTP 1.1은 하나의 연결에 하나의 요청-응답만 가능합니다.
* HTTP 2.0은 하나의 연결에 여러개의 요청-응답 가능합니다.
#### 💡 HTTP는 왜 비연결성인가?
* 연결에 필요한 리소스를 아껴 더 많은 클라이언트와 연결하기 위해서 입니다.
#### 💡 모든 웹 페이지에서 HTTPS 를 사용하지 않는 이유를 설명해주세요.
* 모든 곳에 암호화를 사용하면 자원 낭비. 필요한 곳에만 사용
#### 💡 비대칭키 또는 공개키 암호화 방식은 무엇인가요?
* 서버는 공개된 키로 암호화해서 사용자에게 보내면 사용자는 본인만 가지고 있는 개인키로 복화화하여 문서를 볼 수 있도록 암호화하는 방식
#### 💡 HTTP REQUEST 방식 중 GET과 POST의 차이을 설명해주세요.
* GET은 조회할 때 사용되며 데이터를 헤더에 담아 전달해서 보안적으로 취약
* POST는 생성할 때 사용되며 데이터를 body에 담아 전달해서 GET보다 보안성이 뛰어남
#### 💡 GET, POST를 제외하고 다른 방식들을 설명해주세요.
* 내용을 update할 때 사용하는 PUT과 삭제할 때 사용하는 DELETE 메소드가 있습니다.
#### 💡 조회하기 위한 용도 POST가 아닌 GET 방식을 사용하는 이유?
* GET은 서버의 상태를 변경하지 않기 때문입니다.
#### 💡 현대 웹 에서는 비연결성을 해결방법을 설명해주세요.
* 쿠키와 세션으로 정보를 저장하여 비연결성을 해결했습니다.
</br></br>
## DNS와 DHCP 답변
#### 💡 도메인과 DNS가 무엇인지 설명해주세요
* 도메인이란 ip주소를 사람이 기억하기 쉽게 이름을 부여한 것 입니다. 이러한 도메인을 변환하기 위해 브라우저가 인터넷 자원을 로드할 수 있도록 도메인 이름을 IP주소로 변환시켜 주는 것이 DNS입니다.
#### 💡 Domain Name 구조를 설명해주세요.
* 최상위에서 루트 DNS 서버가 존재하고 계층 구조로 구성되어 있다. PC에서 사용하는 디렉토리 구조와 유사하다.
#### 💡 DNS round robin 방식의 문제점과 해결방법을 설명해주세요.
* DNS round robin 방식은 여러개의 IP를 순서를 정해서 제공하는 방식입니다.
* 이 방식의 문제점은 특정 웹 서버에 문제가 생겨 서비스가 불가능한 상태라도 DNS는 이 상태를 알지 못한다는 것입니다. 개선 방법으로는 처음 선택한 IP가 접속이 안되면 그 다음 IP를 접속하도록 로직을 추가하는 방법이 있습니다.
#### 💡 DHCP 서버의 역할을 간단히 설명해주세요.
* DHCP(Dynamic Host Configuration Protocol)서버는 네트워크 인터페이스를 위해서 IP주소를 가지고 있는 서버에서 실행되는 프로그램으로 일정한 범위의 IP주소를 다른 클라이언트에게 할당하여 자동으로 설정하게 해주는 역할을 합니다.
#### 💡 Domain Name System 동작과정을 설명해주세요.
* 사용자 컴퓨터의 운영체제가 hosts에 해당 Domain의 IP주소가 저장되었는지 확인합니다.
* hosts에 없으면 가장 가까운 로컬 DNS서버에 묻습니다.
* 로컬 DNS서버에도 없으면 ROOT서버에 묻습니다. ROOT서버는 .com의 주소를 알고 있는 TopLevel의 서버주소를 알려줍니다.
* TopLevel 서버는 naver.com 의 주소를 알고 있는 SecondLevel 서버주소를 알려줍니다.
* SecondLevel 서버는 www.naver.com 의 주소를 알고 있는 SUB서버의 주소를 알려줍니다.
* SUB 서버는 사용자에게 최종적으로 www.naver.com의 IP주소를 알려줍니다.
</br></br>
## 로드밸런서 답변
#### 💡 로드 밸런싱을 설명해주세요.
* 서버를 여러대 사용할 때 트래픽이 몰리면 여러 서버에 균등하게 트래픽을 분산 처리하는 기술입니다.
#### 💡 L4 로드 밸런싱과 L7 로드 밸런싱에 대해 설명하고, 차이를 말해보세요
* L4는 4계층인 네트워크 계층에서 사용됩니다. 패킷 레벨에서만 트래픽을 분산하기 때문에 속도가 빠르고 효율성이 높습니다. L7 로드 밸런싱보다 저렴합니다.
* L7는 7계층인 애플리케이션 계층에서 사용됩니다. HTTP Header, Cookie 등과 같이 사용자가 요청한 정보들을 바탕으로 트래픽을 분산하기 때문에 섬세한 라우팅이 가능하고 비정상적인 트래픽을 판별할 수 있습니다. L4 로드 밸런싱보다 가격이 비쌉니다.
#### 💡 게이트웨이란?
* 한 네트워크에서 다른 네트워크로 이동하기 위하여 거쳐야 하는 지점
#### 💡 서버에 트래픽이 주어졌을 때 어떻게 응답속도를 개선할 수 있는가요
* 여러개의 서버에 트래픽을 균등하게 나눠주는 로드 밸런싱을 사용해 응답속도를 개선할 수 있습니다.
</br></br>
# 01-2. Web of Network
## WEB 답변
#### 💡 클라이언트와 서버는 무엇인가요?
* 클라이언트는 서비스를 사용하는 사용자 또는 컴퓨터를 의미하며 서버는 서비스를 제공해주는 컴퓨터를 의미합니다.
#### 💡 url과 uri에 대해 각각 설명해주세요
* URI는 자원의 식별자, URL은 자원의 위치를 기술합니다.
* URI는 URL의 개념을 포함합니다.
#### 💡 브라우저에 "www.google.com" 입력하면 어떤일이 일어날까요?
* 브라우저 주소창에 www.google.com 치면 google 서버를 찾아간다.
* DNS(실제 서버가 어디에있는지 알고 있는 서버)가 연결해줄 곳을 찾음 (여기서 주소 앞에 https가 붙었다면 https방식으로 통신하겠다.)
* 서버의 기본설정이 대부분 index.html되어 있어 서버에서 이파일을 클라이언트로 보냄
* 브라우저는 텍스트로 이루어진 index.html 파일을 파싱한다.
* 한줄한줄 읽으면서 DOM트리를 만들어나감.
* 중간에 link태그를 만나 css요청이 발생하면, 요청과 응답과정을 거치고 css를 파싱함
* CSS파싱이 끝나면 중단된 html을 다시읽고 DOM트리를 완성
* 완성된 DOM트리와 CSSOM트리를 합쳐 Render Tree를 만들고 그린다.
* 중간에 HTML파서는 Script태그를 만나게 되면 javascript 코드를 실행하기 위해 파싱을 중단
* 제어권한을 자바스크립트 엔진에게 넘기고, 자바스크립트 코드 또는 파일을 로드해서 파싱하고 실행
<br><img src = "https://t1.daumcdn.net/cfile/tistory/993D344D5C2347F62E"></br>
## RESTful API 답변
#### 💡 RESTful API란 무엇인가요?
* Rest를 Rest답게 쓰기 위한 방법입니다. Restful의 목적은 이해하기 쉽고 사용하기 쉬운 REST API를 만드는 것입니다. Rest란 네트워크 상에서 Client와 Server 가 통신하는 방식입니다. HTTP URI를 통해 자원을 명시하고, HTTP method(Post, Put, Get, Delete)를 통해 해당 자원에 대한 CRUD를 적용하는 것을 의미합니다.
## AJAX
#### 💡 Ajax는 무엇인가요?
* js기법 중 하나로 페이지 전체를 새로 고치지 않고 일부 데이터만 로드하는 웹 개발 기법
#### 💡 Ajax의 장점과 단점은 무엇인가요?
* 고친 부분만 로드하면 됨
* 요청을 많이하면 서버에 부하. 사용자가 응답을 받지 않아 중간에 나가면 데이터 손실있을 수 있음
## CORS
#### 💡 CORS는 무엇인가요?
* CORS란 서로 다른 Origin끼리 자원을 공유할 수 있는 방식입니다.
* HTTP 헤더를 사용해서 한 origin에서 실행중인 웹앱이 다른 origin의 자원에 접근할 수 있는 권한을 부여할 수 있는 방식입니다.
* 서로 다른 Origin이란 것은 Protocol, Host, Port 중 하나라도 다른 것을 의미합니다.
#### 💡 CORS preflight는 무엇인가요?
* preflight request는 실제 요청을 보내도 안전한지 판단하기 위해 사전에 보내는 요청입니다.
* OPTIONS 메서드로 요청하며 CORS를 허용하는지 확인합니다. CORS가 허용된 웹서버라면 사용 가능한 리소스를 헤더에 담아 응답합니다.
## Socket
#### 💡 소켓이란 무엇인가요?
* 프로세스가 네트워크를 통해 데이터를 주고 받기 위해 필요한 통로입니다.
#### 💡 DOM과 가상DOM
* DOM은 기계나 소프트웨어가 웹 사이트의 구조를 어떻게 이해하는 지에 대한 표준입니다.
* Virtual DOM은 실제 DOM 변화를 최소화 시켜주는 역할을 합니다.
#### 💡 OAuth란 무엇인가요?
* 별도의 회원가입 없이 로그인을 제공하는 플랫폼의 아이디만 있으면 서비스를 이용 할 수 있습니다. 외부 서비스에서도 인증을 가능하게 하고 그 서비스의 API를 이용하게 해주는 것, 이것을 바로 OAuth라고 합니다
#### 💡 SPA
* Single Page Application 의 약자로 단일 페이지로 구성된 웹 어플리케이션을 말합니다.
* SPA는 컴포넌트들이 모여 한 페이지를 작성하고, 특정 부분만 데이터를 바인딩하는 개념입니다. 대표적인 SPA 라이브러리로 React.js, Vue.js, Angular2 등이 있습니다
## cookie와 session 답변
#### 💡 cookie와 session에 대해 설명해주세요
* 세션과 쿠키는 http 비연결성을 해결하기 위해 사용자 정보를 저장하는 역할을 합니다.
* 세션은 서버에 저장되어 안전합니다. 하지만 세션만을 사용하게 되면 서버에 부하가 발생하게 됩니다.
* 쿠키는 클라이언트 저장소에 저장되어 세션보다 보안성이 낮지만 서버에 부하를 주지 않아 자주 사용됩니다.
#### 💡 Session 동작 순서를 설명해주세요.
* 클라이언트가 로그인을 하고, 성공하면 서버가 사용자 세션을 만들고 메모리나 DB에 저장합니다. 그리고 서버가 클라이언트에게 세션 아이디를 보내고 클라이언트의 브라우저에 세션 아이디만 쿠키에 저장하게 합니다.
#### 💡 cookie를 쓰는 이유를 설명해주세요
* 세션을 많이 사용하면 서버에 부하가 가기 때문에 쿠키를 사용합니다.
#### 💡 세션 인증방식 단점
* 세션 데이터가 서버의 메모리에 저장되므로 확장 시 모든 서버가 접근할 수 있도록 별도의 중앙 세션 관리 시스템이 필요합니다.
* 중앙 세션 관리 시스템이 장애가 일어나면 전체 시스템에 문제가 생깁니다.
#### 💡 토큰 인증방식
- 클라이언트가 로그인을 하고, 성공하면 서버로부터 접근 토큰을 부여받는다. 이후 클라이언트가 모든 API 요청을 할 때 접근 토큰을 포함시킨다. 서버는 접근 토큰을 해독해 확인하고 검증되면 해당 API 기능을 수행한다. 기한이 만료되었으면 접근 토큰을 지워주고 재로그인 하게 한다.
#### 💡 JWT
* JWT는 JSON Web Token 의 약자로 전자서명된, URL-safe한 Json 입니다. URL-safe 하다는 것은 URL로 이용할 수 있는 문자로만 구성됐다는 의미입니다.
#### 💡 토큰 인증방식 단점
* 수명이 짧다면, 사용자가 사용 중에 갑자기 토큰 기한이 만료되었다며 재로그인해야 되는 상황이 올 수 있습니다.
* 수명이 길다면, 해커에게 해독되어 사용될 가능성이 높아집니다.
#### 💡 쿠키 인증방식 해결방안
* Secure 옵션 : HTTPS로 통신하는 경우에만 웹브라우저가 쿠키를 서버로 전송한다. XSS 문제를 완화시킬 수 있다.
* HttpOnly 옵션 : document.cookie를 이용해서 쿠키에 접속하는 것을 막는다.
* CSURF 라이브러리 : 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 하는 공격인, CSRF(Cross Site Request Forgery 사이트 간 요청 위조)를 예방할 수 있다
.
# 심화질문-답변
#### 💡 OAuth2의 동작방식이 어떻게 되나요?

#### 💡 HTTP와 웹소켓 차이점은 무엇인가요?
#### 💡 웹소켓 (WebScoket)과 TCP/IP 소켓의 차이점은 무엇인가요?
[뒤로](https://github.com/SSAFY-CS-STUDY/Tech_interview)/[위로](#part-1-3-network)
</br>
</br>
_Network.end_