[개발자면접] 네트워크 (OSI7 Layer, 공인IP 사설IP, HTTP, HTTPS, 쿠키 세션, 로드밸런싱)
1. OSI 7 layer와 각 계층에 대해 아는대로 설명해주세요.
OSI 7 계층은 네트워크 통신을 구성하는 요소들을 7개의 계층으로 표준화한 것입니다. 이렇게 표준화하는 장점은 통신이 일어나는 과정을 단계별로 파악할 수 있어서, 문제가 발생하면 해당 문제를 해결하기 좋습니다.
- 7 계층(응용 계층) : 사용자에게 통신을 위한 서비스 제공. 인터페이스 역할
- 6 계층(표현 계층) : 데이터의 형식(Format)을 정의하는 계층 (코드 간의 번역을 담당)
- 5 계층(세션 계층) : 컴퓨터끼리 통신을 하기 위해 세션을 만드는 계층
- 4 계층(전송 계층) : 프로그램과 프로그램의 연결. 최종 수신 프로세스로 데이터의 전송을 담당하는 계층 (단위 :Segment) (ex. TCP, UDP)
- 3 계층(네트워크 계층) : 패킷을 목적지까지 가장 빠른 길로 전송하기 위한 계층 (단위 :Packet) (ex. Router ICMP IP ARP)
- 2 계층(데이터링크 계층) : 데이터의 물리적인 전송과 에러 검출, 흐름 제어를 담당하는 계층 (단위 :frame) (ex. 이더넷, mac)
- 1 계층(물리 계층) : 데이터를 전기 신호로 바꾸어주는 계층 (단위 :bit) (장비: 케이블,리피터,허브)
2. www.naver.com에 접속할 때 생기는 과정 (웹 동작 방식 이해)
1. 사용자가 브라우저에 URL(www.naver.com)을 입력
브라우저가 URL에 적힌 값을 파싱 해서 HTTP Request Message를 만들고 전송 합니다.
2. 이때, Domain으로 요청을 보낼 수 없기 때문에 DNS Lockup을 수행합니다.
DNS Lockup 과정은 크롬의 경우 브라우저 → hosts 파일 → DNS Cache의 순서로 도메인에 매칭 되는 ip를 찾습니다.
일반적으로 설명하는 DNS Lockup은 루트 도메인 서버에서부터 서브 도메인 서버 순으로 찾게 됩니다.
3. 이 요청은 프로토콜 스택이라는 OS에 내장된 네트워크 제어용 소프트웨어에 의해 패킷에 담기고
패킷에 제어정보를 덧붙여 LAN 어댑터에 전송하고, LAN 어댑터는 이를 전기신호로 변환시켜 송출합니다.
4. 패킷은 스위칭 허브 등을 경유하여 인터넷 접속용 라우터에서 ISP로 전달되고 인터넷으로 이동합니다.
(ISP: Internet Service Provider : 인터넷 서비스 제공자)
5. 액세스 회선에 의해 통신사용 라우터로 운반되고 인터넷의 핵심부로 전달되고, 고속 라우터들 사이로 목적지까지 패킷이 흘러들어 가게 됩니다.
6. 핵심부를 통과한 패킷은 목적지의 LAN에 도착하고, 방화벽이 패킷을 검사한 후 캐시 서버로 보내 웹 서버에 갈 필요가 있는지 검사합니다.
7. 웹 서버에 도착한 패킷은 프로토콜 스택이 패킷을 추출하여 메시지를 복원하고 웹 애플리케이션에 넘깁니다. (TCP 3 way handshake)
8. 도착한 HTTP 응답 메세지는 웹 페이지 데이터로 변환되어 웹 브라우저에 의해 출력 됩니다.
9. 요청에 대한 HTTP 응답 데이터를 작성하여 클라이언트로 회송하고, 이는 전달된 방식 그대로 전송됩니다.
3. TCP와 UDP의 차이
TCP는 연결형 서비스로 3-way handshaking 과정을 통해 연결을 설정하기 때문에 높은 신뢰성을 보장하지만, 속도가 비교적 느리다는 단점이 있습니다.
UDP는 비연결형 서비스로 3-way handshaking을 사용하지 않기 때문에 신뢰성이 떨어지는 단점이 있지만, 데이터 수신 여부를 확인하지 않기 때문에 속도가 빠르다는 장점이 있습니다. 그래서 신뢰성이 중요한 ‘파일 교환’과 같은 경우에 TCP를 쓰고 UDP는 실시간성이 중요한 스트리밍에 자주 사용됩니다.
4. 공인(public) IP와 사설(private) IP의 차이?
공인 IP는 ISP가 제공하는 IP 주소이며, 외부에 공개되어 있는 IP주소 입니다. 사설 IP는 일반 가정이나 회사 내 등에 할당된 네트워크 IP 주소이며, IPv4의 주소부족으로 서브넷팅된 IP이기 때문에, 라우터에 의해 로컬 네트워크상 기기에 할당됩니다. 사설 IP 주소만으로는 인터넷에 직접 연결할 수 없고, 라우터를 통해 1개의 공인 IP를 할당해서 사설 IP를 각각 할당 받아 인터넷에 접속 할 수 있습니다.
* 네트워크 강의 추천 유튜브 따라학잇
https://www.youtube.com/watch?v=s5kIGnaNFvM
네트워크 개념 자체가 처음 공부할때 굉장히 와닿지 않고 어려웠는데 이걸 쉬운맛으로 설명해주는게 아니라! 아주 매운맛 진짜 네트워크의 맛을 잘 느낄 수 있게 확실히 알려주는 강의 입니다.. 네트워크 핵심이라 이 강의만 잘 이해하면 정말... b
5. NAT 란?
특정 IP를 다른 IP로 바꿔주는 기술.
이를 활용한 가장 일반적인 예가 공유기 인데, 내부에서만 사용할 수 있는 사설 네트워크 대역을 만들고 내부에 있는 PC가 외부와 통신할때 공인 IP로 바꿔서 통신하도록 합니다. 이렇게하면 내부에서 외부로 나갔다가 들어오는 것은 가능하지만 외부에서 바로 내부로 접근할 수는 없습니다. 그래서 서버 컴퓨터가 사설 네트워크 대역에 있으면 네트워크 장비에 포트포워딩과 같은 설정이 필요합니다.
+ host only / NAT / Bridge 차이
- Host Only : VMware 안에서 구성된 VM들 끼리만 통신을 하고, My Computer와는 통신을 할 수 없음
- NAT : 내 컴퓨터에서 Vm OS에게 ‘각각’ IP주소를 부여하는 것 (가상의 공유기를 통해서 내 컴퓨터의 ip를 공인ip로 하고 사설 네트워크 대역을 만들어서 그 대역에 가상머신을 할당하는 것)
- Bridge : 내 컴퓨터와 같은 네트워크 대역대로 가상머신 ip가 할당됩니다.
6. HTTP와 HTTPS
HTTP와 HTTPS의 차이점 , SSL Handshake 과정
(REST API를 설계했다면 이해할 수 있을 정도로 설명하면 됩니다.)
HTTP(Hyper Text Transfer Protocol) 란 HTML(웹문서를 만들기 위한 언어) 문서 등을 주고받는데 쓰이는 통신 프로토콜이며, TCP 와 UDP를 사용하여 통신하며 80번 포트를 사용하는 통신프로토콜(통신규약)입니다. 간단하게는 클라이언트와 서버가 웹페이지를 주고받는 통신규약이라 할 수 있습니다.
[ HTTP, HTTP 메서드의 GET, POST 방식 ]
+ API 란?
Application Programming Interface의 약자로, 응용 프로그램 프로그래밍 인터페이스. 프로그램들이 서로 상호작용하는 것을 도와주는 매개체 입니다.
+ SDK 란?
SDK(Software Development Kit) 는 말 그대로 소프트웨어 개발 도구 모음 입니다. 즉, 개발에 도움이 될 개발 도구 프로그램, 디버깅 프로그램, 가이드 문서, API 등 이 있습니다. 예를 들어, JDK, Android SDK, Tizen, iOS SDK, Facebook SDK 등 수 많은 SDK가 존재합니다.
7. 쿠키(Cookie)와 세션(Session)의 차이점?
쿠키는 사용자의 컴퓨터에 저장하는 기록 정보 파일이고,
세션은 웹 사이트의 여러 페이지에서 사용되는 사용자 정보를 서버 메모리에 저장하는 방법 입니다.
방문자가 한 웹 서버에 접속해 있는 상태를 세션이라 할 수 있습니다.
둘은 정보의 저장 위치, 저장 형식, 만료 시점, 사용하는 자원의 차이가 있습니다.
+ CORS란?
교차 출처 리소스 공유. 프런트엔드 개발 시에 로컬에서 API 서버에 요청을 보낼 때 흔하게 발생합니다. 서로 다른 도메인 간 자원을 공유하는 것을 뜻합니다. 대부분의 브라우저에서는 이를 기본적으로 차단하며, 서버 측에서 헤더를 통해 사용 가능한 자원을 알려줍니다.
+ Preflight Request란?
Actual 요청 전에 인증 헤더를 전송하여 서버의 허용 여부를 미리 체크하는 테스트 요청. preflight request는 실제 요청을 보내도 안전한지 판단하기 위해 사전에 보내는 요청입니다. OPTIONS 메서드로 요청하며 CORS를 허용하는지 확인합니다. CORS가 허용된 웹서버라면 사용가능한 리소스를 헤더에 담아 응답합니다.
8. 세션 인증과 토큰 인증의 차이
세션 기반 인증은 클라이언트로부터 요청을 받으면 클라이언트의 상태 정보를 저장하므로 Stateful한 구조를 가지고, 토큰 기반 인증은 상태 정보를 서버에 저장하지 않으므로 Stateless한 구조를 가집니다.
9. Stateful한 세션 기반의 인증 방식 단점?
서버에 세션을 저장하기 때문에, 그러니까 서버에 클라이언트 상태를 다 유지하고 있어야 해서 사용자가 증가하면 서버 메모리나 디비에 부하가 심해질 수 있습니다.
+ 세션 기반 인증과 토큰 기반 인증은 각각 어느 경우에 적합한가?
단일 도메인이라면 세션 기반 인증을 사용하고, 아니라면 토큰 기반 인증을 사용하는 것이 적합합니다. 세션을 관리할 때 사용되는 쿠키는 단일 도메인 및 서브 도메인에서만 작동하도록 설계되어 있기 때문에, 여러 도메인에서 관리하는 것이 어렵습니다. (CORS 문제, 확장성 등)
10. way-handshake란?
TCP 네트워크에서 통신 하는 장치끼리 연결을 수립하는 방법 입니다. 총 3번에 걸쳐 데이터를 주고 받으며 통신이 가능한 상태인지 확인합니다.
11. 로드밸런싱이란?
부하분산! 서버로 트래픽이 많을 때 서버의 부하량 등을 고려해서 적절히 분산처리를 해주는 서비스. (추후 사용량이 많아 서버 확장으로 서비스 중단없이 서버 증설이 가능) 로드 밸런싱의 종류는 OSI 7계층에 따라 나뉩니다.
L4 : Transport 계층을 사용, IP 주소와 포트 번호 부하 분산이 가능
L7 : Application 계층을 사용, URL 또는 HTTP 헤더에서 부하 분산이 가능
+ 부하분산 알고리즘
- 라운드로빈 클라이언트로부터 받은 요청을 로드밸런싱 대상 서버에 순서대로 할당받는 방식입니다. 첫 번째 요청은 첫 번째 서버, 두 번째 요청은 두 번째 서버, 세 번째 요청은 세 번째 서버에 할당합니다. 로드밸러닝 대상 서버의 성능이 동일하고 처리 시간이 짧은 애플리케이션의 경우, 균등하게 분산이 이루어지기 때문에 이 방식을 사용합니다.
- 가중 라운드로빈 가중 라운드 로빈 방식(Weighted Round Robin Method)은 실제 서버에 서로 다른 처리 용량을 지정할 수 있습니다. 각 서버에 가중치를 부여할 수 있으며, 여기서 지정한 정숫값을 통해 처리 용량을 정합니다.
- 최소 연결 방식 최소 연결 방식은 연결 수가 가장 적은 서버에 네트워크 연결방향을 정합니다. 동적인 분산 알고리즘으로 각 서버에 대한 현재 연결 수를 동적으로 카운트할 수 있고, 동적으로 변하는 요청에 대한 부하를 분산시킬 수 있습니다.