| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 | 31 |
- Next.js
- 나는야 4학년 #5학년 까지 가보자구
- object 클래스 # java
- 이분탐색
- java #예외처리 #throw #throws
- 정보처리기사 실기 #정처기 실기 #2024년 2회 #정처기 2024년 2회 #공부법 # 꿀팁
- level3
- 주니어 백엔드 개발자
- 25304번
- server engineer
- heap area #stack area #static area #jvm
- 2026 하반기 대기업 반드시 갑니다
- 서버 개발자
- level2
- 서버 엔지니어
- tmax tibero
- AWS
- aws SAA-c03
- java #추상클래스
- 자바 #자바문법 #자바기초 #참조형 #기본형
- 넥슨개발자컨퍼런스
- Spring
- 백엔드 개발자 로드맵
- static #자바 메모리 구조 #멤버 변수
- tibero 7.23
- software enginner
- server developer
- 올 겨울은 조금 따뜻할 것 같다.
- 반복문
- ndc2025
- Today
- Total
개발자 쿠키
[Network] 네트워크 총정리 본문

목차
- 네트워크 계층 구조 (OSI 7계층, TCP/IP 4계층)
- 패킷과 캡슐화
- 물리 계층과 데이터 링크 계층
- 네트워크 계층 (IP, 라우팅, NAT)
- 전송 계층 (TCP, UDP)
- TCP 3-way handshake와 4-way handshake
- 흐름 제어와 혼잡 제어
- 응용 계층 (HTTP, HTTPS)
- 대칭키, 공개키와 TLS handshake
- 브라우저에 naver.com을 치면 일어나는 일
- 로드 밸런싱과 서버 확장
- Blocking, Non-blocking과 Synchronous, Asynchronous
- 면접 예상 질문 40선
1. 네트워크 계층 구조
OSI 7계층을 나누는 이유
가장 중요한 목적은 표준화와 학습 도구입니다. 표준화를 통해 이질적인 포트나 프로토콜 때문에 생기는 호환성 문제를 해결해 비용을 절감했습니다. 또한 계층별 기능과 통신 과정을 단계로 나누면 흐름을 이해하기 쉽고, 특정 지점에 이상이 생겼을 때 그 계층만 수정하면 되기 때문에 유지보수가 편리합니다.
각 계층이 독립적으로 동작하도록 관심사를 분리해서, 문제 발생 지점을 특정하고 특정 계층만 교체할 수 있게 하기 위해서입니다.
계층별 정리
| 계층 | 이름 | 데이터 단위 | 주소 | 대표 프로토콜, 장비 |
|---|---|---|---|---|
| 7 | 응용(Application) | 메시지(Message) | : | HTTP, FTP, DNS, SMTP |
| 6 | 표현(Presentation) | 메시지 | : | JPEG, MPEG, SSL/TLS, 인코딩 |
| 5 | 세션(Session) | 메시지 | : | API, Socket, RPC |
| 4 | 전송(Transport) | 세그먼트(Segment) | 포트 번호 | TCP, UDP |
| 3 | 네트워크(Network) | 패킷(Packet) | IP 주소 | IP, ICMP, 라우터, L3 스위치 |
| 2 | 데이터 링크(Data Link) | 프레임(Frame) | MAC 주소 | Ethernet, 스위치, 브릿지 |
| 1 | 물리(Physical) | 비트(Bit) | : | 케이블, 리피터, 허브 |
OSI 7계층과 TCP/IP 4계층
실제 인터넷은 OSI가 아니라 TCP/IP 모델로 동작합니다. OSI는 이론적 참조 모델, TCP/IP는 실제 구현 모델이라고 답하면 됩니다.
| TCP/IP 4계층 | 대응하는 OSI 계층 |
|---|---|
| 애플리케이션 | 응용 + 표현 + 세션 |
| 전송 | 전송 |
| 인터넷 | 네트워크 |
| 네트워크 액세스 | 데이터 링크 + 물리 |
2. 패킷과 캡슐화
패킷이란
패킷은 네트워크에서 출발지와 목적지 사이를 라우팅되는 데이터의 단위입니다. 패키지(package)와 덩어리를 뜻하는 버킷(bucket)을 합친 말로, 통신망을 통해 전송하기 쉽도록 자른 데이터의 전송 단위입니다.
패킷의 구조
+----------------------------------------+
| 헤더 (Header) |
| 패킷 길이, 프로토콜, 출발지/목적지 IP |
+----------------------------------------+
| 페이로드 (Payload) |
| 실제 전송되는 데이터 |
+----------------------------------------+
| 트레일러 (Trailer) |
| 오류 검출 코드 (CRC, 체크섬 등) |
+----------------------------------------+
캡슐화와 역캡슐화
송신 측에서는 상위 계층에서 내려올 때마다 각 계층의 헤더가 하나씩 붙습니다. 이것을 캡슐화라고 합니다.
데이터
→ [TCP 헤더 | 데이터] 세그먼트
→ [IP 헤더 | TCP 헤더 | 데이터] 패킷
→ [Ethernet 헤더 | IP 헤더 | TCP 헤더 | 데이터 | FCS] 프레임
수신 측은 반대로 아래 계층부터 헤더를 하나씩 벗겨내며 올라갑니다. 이것이 역캡슐화입니다. 데이터를 전송할 때 오버헤드가 생기는 이유가 바로 이 헤더들 때문입니다.
MTU와 단편화
MTU(Maximum Transmission Unit)는 한 번에 전송할 수 있는 최대 크기이고 이더넷 기준 보통 1500바이트입니다. 이보다 큰 데이터는 잘려서 전송되는데, 이 과정을 IP 단편화라고 합니다. 단편화가 일어나면 조각 하나만 유실돼도 전체를 재전송해야 하므로 성능이 떨어집니다. 그래서 TCP는 MSS(Maximum Segment Size)를 협상해 애초에 단편화가 생기지 않는 크기로 보냅니다.
3. 물리 계층과 데이터 링크 계층
MAC 주소
48비트, 16진수로 표기되는 물리 주소입니다. 제조 단계에서 NIC(네트워크 인터페이스 카드)에 부여되며 원칙적으로 전 세계에서 유일합니다. IP 주소가 논리 주소로 바뀔 수 있는 반면, MAC 주소는 장비에 고정된 주소입니다.
ARP (Address Resolution Protocol)
IP 주소는 아는데 MAC 주소를 모를 때, IP 주소로 MAC 주소를 알아내는 프로토콜입니다.
왜 둘 다 필요한가가 단골 질문입니다. IP는 네트워크와 네트워크 사이를 건너가기 위한 논리 주소이고, MAC은 최종 구간에서 실제 장비를 특정하기 위한 물리 주소입니다. 목적지 IP는 끝까지 변하지 않지만, 목적지 MAC은 라우터를 하나 지날 때마다 다음 홉의 MAC으로 계속 바뀝니다.
스위치와 허브의 차이
허브는 들어온 신호를 모든 포트로 그대로 뿌립니다(1계층). 스위치는 MAC 주소 테이블을 보고 목적지 포트로만 전달합니다(2계층). 그래서 허브는 충돌 도메인이 하나지만, 스위치는 포트마다 충돌 도메인이 분리됩니다.
4. 네트워크 계층
IP 주소
인터넷에 연결된 장비를 식별하는 번호입니다.
IPv4 고갈에 대응하기 위해 사내망에서는 사설 IP를 쓰고, 인터넷 경계에서 NAT 장비가 공인 IP와 사설 IP를 변환합니다.
| 구분 | 공인 IP | 사설 IP |
|---|---|---|
| 할당 | ISP가 부여 | 라우터가 내부에서 부여 |
| 범위 | 전 세계 유일 | 내부망 안에서만 유일 |
| 외부 접근 | 가능 | 불가 (NAT 필요) |
서브넷과 게이트웨이
라우팅
패킷이 목적지까지 갈 경로를 결정하는 과정입니다. 라우터는 라우팅 테이블을 보고 다음 홉을 정합니다. 정적 라우팅은 관리자가 직접 지정하고, 동적 라우팅은 RIP, OSPF, BGP 같은 프로토콜로 경로를 학습합니다.
DHCP
호스트의 IP 주소와 TCP/IP 기본 설정을 클라이언트에 자동으로 제공하는 프로토콜입니다. PC는 DHCP 서버로부터 자신의 IP 주소, 가장 가까운 라우터의 IP 주소, DNS 서버의 IP 주소를 받습니다. 그 후 ARP로 라우터의 MAC 주소를 알아냅니다.
ping은 되는데 서비스 접속이 안 된다면, ICMP(3계층)는 살아 있고 포트(4계층)나 방화벽 문제라는 뜻이므로 계층을 나눠서 원인을 좁힐 수 있습니다.5. 전송 계층
TCP와 UDP
| 구분 | TCP | UDP |
|---|---|---|
| 연결 방식 | 연결 지향 (handshake 필요) | 비연결형 |
| 신뢰성 | 보장 (재전송, 순서 보장) | 보장하지 않음 |
| 순서 | 순서대로 도착 보장 | 순서 뒤바뀔 수 있음 |
| 흐름, 혼잡 제어 | 있음 | 없음 |
| 헤더 크기 | 20바이트 이상 | 8바이트 |
| 전송 단위 | 바이트 스트림 | 데이터그램 |
| 속도 | 상대적으로 느림 | 빠름 |
| 용도 | HTTP, 파일 전송, 메일 | DNS, 스트리밍, 실시간 게임, VoIP |
UDP를 쓰는 이유
신뢰성이 없다는 것이 무조건 단점은 아닙니다. 실시간 영상이나 음성은 조금 유실되더라도 계속 흘러가는 것이 중요하지, 지난 프레임을 재전송받아봐야 이미 의미가 없습니다. DNS 질의는 데이터가 작아서 연결을 맺는 비용이 질의 자체보다 크기 때문에 UDP를 씁니다.
HTTP/3가 UDP 기반인 이유도 자주 물어봅니다. TCP는 세그먼트 하나가 유실되면 뒤에 온 데이터가 멀쩡해도 전부 대기하는 HOL(Head of Line) 블로킹이 발생합니다. HTTP/3의 QUIC은 UDP 위에서 스트림별로 독립적인 재전송을 처리해 이 문제를 해결했습니다.
TCP 헤더의 핵심 필드
6. TCP 3-way handshake와 4-way handshake
3-way handshake (연결 수립)
Client Server
| --- SYN (seq=x) ---------> | CLOSED → LISTEN
| <-- SYN+ACK (seq=y,ack=x+1) | SYN_RECEIVED
| --- ACK (ack=y+1) -------> | ESTABLISHED
왜 3번인가가 핵심 질문입니다. 양방향 통신이므로 클라이언트에서 서버로, 서버에서 클라이언트로 두 방향 모두 정상인지 확인해야 합니다. 2번이면 서버는 자기가 보낸 응답이 도착했는지 알 수 없고, 4번은 서버의 ACK와 SYN을 하나로 합칠 수 있어서 불필요합니다.
4-way handshake (연결 종료)
Client Server
| --- FIN ---------------> | CLOSE_WAIT
| <-- ACK --------------- |
| <-- FIN --------------- | LAST_ACK
| --- ACK ---------------> | TIME_WAIT → CLOSED
- 클라이언트가 FIN을 보내 더 보낼 데이터가 없음을 알립니다.
- 서버는 일단 ACK만 보냅니다.
- 서버가 남은 데이터를 모두 보낸 뒤 FIN을 보냅니다.
- 클라이언트가 ACK를 보내고 TIME_WAIT 상태로 들어갑니다.
왜 종료는 4번인가: 연결은 양방향이고, 한쪽이 끝났다고 반대 방향까지 끝난 것은 아니기 때문입니다. 서버는 FIN을 받아도 아직 보낼 데이터가 남아 있을 수 있어서 ACK와 FIN을 한 번에 합칠 수 없습니다. 이 구간을 Half-Close라고 합니다.
TIME_WAIT이 필요한 이유
마지막 ACK가 유실되면 서버가 FIN을 재전송하는데, 클라이언트가 즉시 소켓을 닫아버리면 이 FIN에 응답할 주체가 사라집니다. 또 같은 포트를 바로 재사용했을 때 이전 연결의 지연된 패킷이 새 연결로 섞여 들어오는 것도 막아야 합니다. 그래서 MSL의 2배 동안 기다립니다.
실무에서는 트래픽이 많은 서버에서 TIME_WAIT 소켓이 수만 개씩 쌓여 포트가 고갈되는 문제가 생깁니다. Keep-Alive로 연결을 재사용하거나 커널 파라미터를 조정해 대응합니다.
7. 흐름 제어와 혼잡 제어
둘 다 "보내는 속도를 조절한다"는 점은 같지만 누구를 배려하는가가 다릅니다.
| 구분 | 흐름 제어 | 혼잡 제어 |
|---|---|---|
| 목적 | 수신 측 버퍼 오버플로 방지 | 네트워크 과부하 방지 |
| 대상 | 송신자와 수신자 (1:1) | 네트워크 전체 |
| 기준 | 수신 윈도우(rwnd) | 혼잡 윈도우(cwnd) |
실제 전송량은 두 값 중 작은 쪽으로 결정됩니다.
흐름 제어 기법
혼잡 제어 기법
혼잡을 감지하는 두 가지 신호를 구분해서 답하면 좋습니다. 타임아웃은 상황이 심각하다고 보고 윈도우를 1로 되돌리며, 중복 ACK 3번은 그래도 패킷이 흐르고 있다는 뜻이므로 절반으로만 줄입니다.
8. 응용 계층 (HTTP, HTTPS)
HTTP의 특징
무상태가 곧 확장성의 전제라는 점이 백엔드 면접의 핵심 포인트입니다. 서버가 상태를 들고 있으면 로드 밸런서가 같은 서버로만 요청을 보내야 하고(Sticky Session), 그 서버가 죽으면 세션이 통째로 날아갑니다. 그래서 세션을 Redis 같은 외부 저장소로 빼거나 JWT처럼 상태를 클라이언트가 들고 있게 만듭니다.
HTTP 메서드와 상태 코드
| 메서드 | 용도 | 멱등성 | 안전성 |
|---|---|---|---|
| GET | 조회 | O | O |
| POST | 생성, 처리 | X | X |
| PUT | 전체 수정, 대체 | O | X |
| PATCH | 부분 수정 | X | X |
| DELETE | 삭제 | O | X |
| 코드 | 의미 |
|---|---|
| 2xx | 성공 (200 OK, 201 Created, 204 No Content) |
| 3xx | 리다이렉션 (301 영구, 302 임시, 304 Not Modified) |
| 4xx | 클라이언트 오류 (400, 401 인증 필요, 403 권한 없음, 404, 429) |
| 5xx | 서버 오류 (500, 502 Bad Gateway, 503 Service Unavailable, 504 Timeout) |
401과 403의 차이는 단골입니다. 401은 네가 누군지 모르겠다(인증), 403은 누군지는 알지만 권한이 없다(인가) 입니다.
HTTP 버전별 차이
| 버전 | 핵심 |
|---|---|
| HTTP/1.0 | 요청마다 연결을 새로 맺음 |
| HTTP/1.1 | Keep-Alive로 연결 재사용, 파이프라이닝. 다만 응답은 순서대로 와야 해서 HOL 블로킹 존재 |
| HTTP/2 | 바이너리 프레이밍, 멀티플렉싱, 헤더 압축(HPACK), 서버 푸시. TCP 레벨 HOL 블로킹은 남음 |
| HTTP/3 | UDP 기반 QUIC 사용. TCP HOL 블로킹 해결, 연결 수립 지연 감소 |
HTTPS
HTTP에 SSL/TLS 암호화를 더한 것입니다. 기본 포트는 HTTP 80, HTTPS 443입니다.
HTTPS가 보장하는 것은 세 가지입니다.
9. 대칭키, 공개키와 TLS handshake
대칭키 암호화
암호화와 복호화에 같은 키를 사용합니다. 연산이 빠르고 대용량 데이터에 적합하지만, 키를 상대에게 전달하는 과정 자체가 위험하다는 근본적인 문제(키 배송 문제)가 있습니다. AES가 대표적입니다.
공개키(비대칭키) 암호화
공개키와 개인키 한 쌍을 사용합니다. 공개키로 암호화한 것은 개인키로만 풀 수 있습니다. 키 배송 문제가 없지만 연산이 무겁습니다. RSA가 대표적입니다.
| 구분 | 대칭키 | 공개키 |
|---|---|---|
| 키 | 하나 (양쪽 공유) | 공개키 + 개인키 |
| 속도 | 빠름 | 느림 |
| 문제 | 키 배송 | 연산 비용 |
| 용도 | 실제 데이터 암호화 | 키 교환, 전자 서명 |
HTTPS가 둘을 섞어 쓰는 이유가 정확히 이 표에서 나옵니다. 공개키로는 대칭키를 안전하게 주고받는 것까지만 하고, 실제 데이터는 빠른 대칭키로 암호화합니다. 이 방식을 하이브리드 암호화라고 합니다.
인증서와 CA
서버가 보내준 공개키가 진짜 그 서버의 것인지 어떻게 믿을까요. 여기서 CA(Certificate Authority)가 등장합니다. CA는 서버의 공개키와 도메인 정보를 담은 인증서에 CA의 개인키로 서명합니다. 브라우저는 이미 신뢰하는 CA들의 공개키를 내장하고 있어서, 그 공개키로 서명을 검증하면 인증서가 위조되지 않았음을 확인할 수 있습니다.
TLS handshake 흐름
Client Server
| Client Hello (지원 암호 스위트, 랜덤값) → |
| ← Server Hello (선택된 스위트, 랜덤값) |
| ← Certificate (인증서 = 서버 공개키) |
| 인증서 검증 (CA 공개키로 서명 확인) |
| Pre-Master Secret을 서버 공개키로 암호화 → |
| 서버가 개인키로 복호화 |
| 양쪽이 동일한 세션키(대칭키) 생성 |
| ← Finished / Finished → |
| 이후 대칭키로 암호화된 통신 |
정리하면 협상 → 인증서 검증 → 키 교환 → 세션키 생성 → 대칭키 통신 순서입니다.
주의할 점은 TCP 3-way handshake가 끝난 뒤에 TLS handshake가 시작된다는 것입니다. 그래서 HTTPS는 첫 연결 지연이 HTTP보다 큽니다. TLS 1.3은 왕복 횟수를 1-RTT로 줄이고 세션 재개 시 0-RTT까지 지원해 이 문제를 개선했습니다.
10. 브라우저에 naver.com을 치면 일어나는 일
면접에서 가장 많이 나오는 질문이자, 네트워크 전체를 꿰는 질문입니다.
1) URL 파싱
브라우저가 입력값을 URL로 해석해 프로토콜, 도메인, 경로를 분리합니다.
2) DNS 조회
도메인 네임은 사람이 외우기 쉽도록 IP 주소를 문자로 표현한 주소입니다. 컴퓨터가 이해할 수 있는 IP로 바꿔야 하고, 그 매핑을 관리하는 것이 DNS입니다.
조회 순서는 캐시부터입니다. 브라우저 캐시 → OS 캐시 → hosts 파일 → 로컬 DNS 서버 순으로 찾고, 없으면 계층적으로 질의합니다.
로컬 DNS 서버 → Root 네임서버 : ".com 네임서버 주소는 여기"
→ .com 네임서버 : "naver.com 네임서버 주소는 여기"
→ naver.com 네임서버 : "www.naver.com의 IP는 이것"
이렇게 여러 번 오가는 이유는 도메인이 계층 구조이고 DNS 서버도 그에 맞춰 계층화되어 있기 때문입니다. 최상위를 담당하는 Root 네임서버는 전 세계에 13개 그룹뿐입니다.
DNS는 기본적으로 UDP 53번 포트를 사용합니다. 응답이 512바이트를 넘거나 영역 전송(Zone Transfer)을 할 때는 TCP를 씁니다.
3) ARP로 다음 홉 MAC 주소 확인
목적지 IP를 알아도 실제로 프레임을 내보내려면 다음 홉(보통 게이트웨이)의 MAC 주소가 필요합니다. ARP로 알아냅니다.
4) TCP 3-way handshake
443 포트로 소켓을 열고 연결을 수립합니다.
5) TLS handshake
HTTPS라면 인증서를 검증하고 세션키를 만듭니다.
6) HTTP 요청과 응답
HTTP 요청 메시지가 TCP 세그먼트, IP 패킷, 이더넷 프레임으로 캡슐화되어 전송됩니다. 중간에 로드 밸런서가 요청을 실제 웹 서버로 분배하고, WAS가 처리한 결과가 응답 메시지로 돌아옵니다.
7) 렌더링
브라우저가 HTML을 파싱해 DOM을 만들고, CSS로 CSSOM을 만들어 렌더 트리를 구성한 뒤 화면에 그립니다. 중간에 이미지나 JS 같은 정적 리소스를 위한 추가 요청이 발생하며, 이 부분은 보통 CDN이 응답합니다.
이 흐름을 답할 때는 각 단계에서 어떤 프로토콜과 어떤 계층이 동작하는지를 붙여서 말하면 훨씬 좋은 인상을 줍니다.
11. 로드 밸런싱과 서버 확장
서버를 확장하는 두 가지 방법
로드 밸런서
클라이언트와 서버 사이에 위치해 트래픽을 여러 서버로 분산시키는 하드웨어 또는 소프트웨어입니다.
| 구분 | L4 로드 밸런서 | L7 로드 밸런서 |
|---|---|---|
| 기준 | IP, 포트 (전송 계층) | URL, HTTP 헤더, 쿠키 (응용 계층) |
| 속도 | 빠름 | 상대적으로 느림 |
| 기능 | 단순 분산 | 경로별 라우팅, 캐싱, 압축, SSL 종료 |
분산 알고리즘
API Gateway와 로드 밸런서
둘은 함께 씁니다. API Gateway가 요청을 관리하고 적절한 서비스로 라우팅하며, 로드 밸런서가 그 서비스의 인스턴스들로 트래픽을 분산합니다. Amazon API Gateway, Kong, Zuul과 AWS ELB, Nginx가 대표 조합입니다.
헬스 체크
로드 밸런서는 주기적으로 각 서버에 헬스 체크 요청을 보내 죽은 서버를 대상에서 제외합니다. 스프링에서 Actuator의 /health 엔드포인트를 열어두는 이유가 여기에 있습니다. 이때 DB 연결까지 확인하는 헬스 체크를 쓰면, DB 장애 시 모든 인스턴스가 동시에 제외되어 서비스가 완전히 죽을 수 있으므로 주의해야 합니다.
12. Blocking, Non-blocking과 Synchronous, Asynchronous
가장 헷갈리는 주제이고, 그래서 면접에서 자주 나옵니다. 두 개념은 관점이 다른 축입니다.
| 조합 | 설명 | 예시 |
|---|---|---|
| Sync + Blocking | 호출하고 멈춰 서서 결과가 올 때까지 기다림 | 전통적인 소켓 read(), JDBC |
| Sync + Non-blocking | 바로 리턴받지만 완료됐는지 계속 물어봄 (폴링) | 논블로킹 소켓 반복 확인 |
| Async + Blocking | 결과는 콜백으로 받지만 호출부는 대기 | 드문 조합 |
| Async + Non-blocking | 바로 리턴하고 완료되면 콜백, 이벤트로 통지 | Node.js, WebFlux, CompletableFuture |
I/O 멀티플렉싱
Non-blocking에서 소켓 하나하나를 계속 확인하면 CPU가 낭비됩니다. 그래서 여러 소켓을 한 번에 감시하다가 준비된 것만 알려주는 방식이 나왔습니다.
Nginx가 적은 프로세스로 수만 연결을 감당하는 이유, 자바 NIO의 Selector와 Netty의 EventLoop가 동작하는 원리가 모두 이것입니다.
13. 면접 예상 질문 40선
계층 구조와 기본 개념
물리, 데이터 링크, 네트워크 계층
TCP와 UDP
흐름 제어와 혼잡 제어
HTTP와 HTTPS
보안
실무와 아키텍처
'Computer Science' 카테고리의 다른 글
| [OS] 운영체제 총정리 (0) | 2026.08.01 |
|---|---|
| [자율주행 플랫폼] 5개 레이어로 정리한 인프라, 네트워크, V2X 용어 (1) | 2026.01.20 |
| 소켓 프로그래밍 완전 정복하기 (0) | 2025.03.07 |
| 부동소수점 연산 (1) | 2025.02.19 |