Backend
home
🌐

TCP/IP와 HTTP의 동작 원리

태그
Computer Science
게시일
2026/05/12
최종 편집 일시
2026/05/12 11:51
1 more property

왜 이 글을 쓰는가

MSA 글을 쓰고, Reverse Proxy 글을 쓰고, Jenkins CI/CD를 정리했다.
그런데 막상 "TCP 연결이 어떻게 이루어지냐", "HTTP/1.1과 HTTP/2는 뭐가 다르냐"는 질문 앞에서 정확하게 말하기 어려웠다.
모든 서버 통신의 바닥에는 TCP/IP가 있고, 그 위에 HTTP가 있다.
이 계층을 제대로 이해하지 못하면 성능 문제가 생겼을 때, 네트워크 이슈가 생겼을 때 원인을 짚기 어렵다.

1. TCP/IP 모델이란

TCP/IP는 인터넷 통신의 표준 프로토콜 스택이다.
흔히 OSI 7계층과 함께 비교되지만, 실제 인터넷에서 쓰이는 건 TCP/IP 4계층 모델이다.
계층
이름
역할
대표 프로토콜
4
응용 계층
사용자와 직접 맞닿는 계층
HTTP, HTTPS, DNS, FTP
3
전송 계층
프로세스 간 통신, 신뢰성 보장
TCP, UDP
2
인터넷 계층
호스트 간 라우팅
IP, ICMP
1
네트워크 접근 계층
물리적 전송
Ethernet, Wi-Fi
패킷은 위 → 아래로 각 계층을 지나며 헤더가 붙고(캡슐화),
수신 측에서는 아래 → 위로 헤더를 벗기며(역캡슐화) 원래 데이터를 꺼낸다.

2. IP — 경로를 찾는 역할

IP(Internet Protocol)는 패킷을 목적지까지 전달하는 역할을 한다.
신뢰성은 보장하지 않는다. 패킷이 유실되거나 순서가 바뀌어도 IP는 모른다.
신뢰성은 상위 계층인 TCP가 담당한다.

3. TCP — 신뢰성 있는 연결

TCP(Transmission Control Protocol)는 데이터가 순서대로, 빠짐없이 도착한다는 것을 보장한다.

3-way Handshake — 연결 수립

SYN: 클라이언트가 서버에 연결 요청
SYN + ACK: 서버가 수락, 자신도 연결 요청
ACK: 클라이언트가 확인
이 세 번의 교환으로 양방향 통신 채널이 열린다.

4-way Handshake — 연결 종료

연결 종료는 4단계가 필요하다. 양쪽이 각자 독립적으로 연결을 끊기 때문이다.

TCP vs UDP

특징
TCP
UDP
연결 방식
연결 지향 (3-way handshake)
비연결
신뢰성
순서 보장, 재전송
없음
속도
상대적으로 느림
빠름
사용 예
HTTP, HTTPS, FTP
DNS, 동영상 스트리밍, 게임
UDP는 느려도 안 되는 상황 — 실시간 영상, 게임, VoIP — 에 적합하다.
패킷 하나가 늦는 것보다 조금 끊기는 게 낫기 때문이다.

4. HTTP — 웹 통신의 언어

HTTP(HyperText Transfer Protocol)는 TCP 위에서 동작하는 응용 계층 프로토콜이다.
클라이언트가 요청(Request)을 보내고, 서버가 응답(Response)을 돌려주는 구조다.

HTTP 요청 구조

시작줄: 메서드 + 경로 + HTTP 버전
헤더: 메타 정보 (Content-Type, Authorization 등)
바디: POST/PUT일 때 실제 데이터

HTTP 응답 구조

주요 HTTP 메서드

메서드
의미
멱등성
GET
조회
O
POST
생성
X
PUT
전체 수정
O
PATCH
부분 수정
X
DELETE
삭제
O
멱등성(Idempotent): 같은 요청을 여러 번 해도 결과가 동일한 성질.
GET을 여러 번 해도 데이터는 안 바뀐다. POST는 요청할 때마다 새 리소스가 생긴다.

HTTP 상태 코드

범위
의미
2xx
성공 (200 OK, 201 Created)
3xx
리다이렉션 (301 Moved, 302 Found)
4xx
클라이언트 오류 (400 Bad Request, 401, 403, 404)
5xx
서버 오류 (500 Internal Server Error, 503)

5. HTTP 버전별 진화

HTTP/1.0 — 요청마다 새 연결

요청 하나에 TCP 연결 하나. 3-way handshake 오버헤드가 매번 발생한다.

HTTP/1.1 — Keep-Alive, Pipelining

Keep-Alive로 하나의 TCP 연결을 재사용한다.
Pipelining으로 응답을 기다리지 않고 여러 요청을 연속으로 보낼 수 있다.
단, HOL(Head-of-Line) Blocking 문제가 있다. 앞 요청이 지연되면 뒤 요청도 다 기다린다.

HTTP/2 — Multiplexing

HTTP/2의 핵심은 스트림(Stream) 개념이다.
하나의 TCP 연결에서 여러 요청/응답이 순서 상관없이 동시에 처리된다.
HOL Blocking이 HTTP 레벨에서는 해결된다.
추가로:
헤더 압축(HPACK): 반복되는 헤더를 압축해서 전송
서버 푸시: 클라이언트가 요청하기 전에 서버가 리소스를 미리 전송

HTTP/3 — QUIC 기반

HTTP/3는 TCP 대신 QUIC(UDP 기반)을 전송 계층으로 사용한다.
HTTP/2의 Multiplexing은 TCP 레벨의 HOL Blocking은 해결 못 했다.
TCP 패킷 하나가 유실되면 전체 스트림이 대기한다.
HTTP/3는 UDP 위의 QUIC 프로토콜이 연결 수립과 재전송을 직접 처리해서
이 문제를 근본적으로 해결한다.
버전
전송 프로토콜
특징
HTTP/1.0
TCP
요청마다 새 연결
HTTP/1.1
TCP
Keep-Alive, Pipelining, HOL 문제
HTTP/2
TCP
Multiplexing, 헤더 압축, 서버 푸시
HTTP/3
QUIC (UDP)
TCP HOL 제거, 빠른 연결 수립

6. HTTPS — TLS로 암호화된 HTTP

HTTPS = HTTP + TLS(Transport Layer Security)
TCP 연결 이후 TLS Handshake가 추가된다.
왜 HTTPS가 느리다고 하는가?
TLS Handshake 과정이 추가되기 때문이다.
HTTP/2는 TLS를 사실상 강제하면서도 Multiplexing으로 오버헤드를 상쇄한다.

7. DNS — 도메인을 IP로 변환

브라우저에 https://example.com을 입력하면 가장 먼저 DNS 조회가 일어난다.
이 과정이 끝난 뒤에야 TCP 연결 → TLS Handshake → HTTP 요청이 시작된다.

8. 전체 흐름 — 브라우저에서 서버까지

https://api.example.com/users 요청 하나가 가는 과정을 전부 이어보면:

정리

개념
핵심
TCP
신뢰성 있는 전송. 3-way로 연결, 4-way로 종료
UDP
빠르지만 비신뢰성. 실시간 통신에 적합
HTTP/1.1
Keep-Alive. HOL Blocking 존재
HTTP/2
Multiplexing. HTTP 레벨 HOL 해결
HTTP/3
QUIC 기반. TCP 레벨 HOL까지 해결
HTTPS
TLS Handshake로 암호화
DNS
도메인 → IP 변환, 통신 전 가장 먼저 발생
MSA에서 서비스 간 통신이 왜 느린지, Reverse Proxy가 어떻게 TLS를 대신 처리하는지,
HTTP/2가 왜 성능상 유리한지 — 이 글의 내용이 그 모든 것의 기반이다.