← 모든 글
Computer Science
시리즈 · 한 요청의 여정 · 1/2

한 요청은 어떤 과정을 거칠까?

HTTP 요청 하나가 클라이언트부터 서버까지 도달하는 과정과 도착해서 처리 후 응답이 돌아오기까지 과정을 정리해보았습니다.

by rati·

HTTP/0.9부터 HTTP/3까지의 발전 과정을 이해하려면, 먼저 HTTP가 전체 네트워크 어디쯤에 있는지 알아야 한다. 개별 기술을 깊게 파다 보면 전체 구조를 놓치기 쉬워서, 네트워크를 공간·계층·시간 세 관점으로 나눠 본다.

아래 장면에서 노드를 누르거나 단계를 넘기며 요청 하나의 여정을 따라가 보자.

INTERACTIVE / 3DONE REQUEST, END TO END
장면을 불러오는 중…
드래그로 회전, 노드를 눌러 국면 선택
국면 1/11URL 해석

주소창 입력이 URL인지 판단하고, 캐시와 HSTS로 네트워크에 나갈 필요가 있는지 먼저 따진다.

글에서 자세히 읽기

1. 공간적 관점: 어디를 지나가는가

클라이언트 to 로컬 네트워크 to 공유기 to ISP/인터넷 라우터 to 목적지 네트워크 to 서버

전달 구간은 크게 세 가지다.

  1. 호스트 to 라우터
  2. 라우터 to 라우터
  3. 라우터 to 목적지 호스트

같은 로컬 네트워크의 호스트끼리는 라우터를 거치지 않고 직접 통신할 수도 있다.

2. 계층적 관점: 어떤 책임을 수행하는가

TCP/IP 4계층

계층 책임 대표 기술
응용 계층 애플리케이션 통신 의미 정의 HTTP, DNS
전송 계층 프로세스 간 통신, 전송 서비스 TCP, UDP
인터넷 계층 호스트 간 패킷 전달, 라우팅 IP, ICMP
네트워크 접근 계층 인접 장치 간 전달, 물리 신호 Ethernet, Wi-Fi

OSI 7계층(L7 응용, L6 표현, L5 세션, L4 전송, L3 네트워크, L2 데이터 링크, L1 물리)은 개념적 참조 모델이다. 실제 인터넷 기술이 각 계층에 일대일로 대응하지는 않는다.

왜 계층으로 나누는가

데이터 전송 방식이 바뀌어도 전부 뜯어고치지 않으려는 것이다. 책임을 분리해 변경의 영향 범위를 줄인다. 하위 계층이 제공하는 서비스 계약만 유지되면 상위 계층은 그대로 둘 수 있다. 객체지향의 인터페이스와 같은 발상이다. 다만 계층 사이의 의존성이 완전히 없어지는 것은 아니다.

계층별 주소 체계

구분 계층 역할
MAC 주소 L2 해당 링크에서 장치 인터페이스 식별
IP 주소 L3 목적지까지 패킷 전달
포트 번호 L4 TCP/UDP 통신 엔드포인트 구분
HTTP 경로 L7 서버에서 요청 대상 자원 식별

TCP 연결은 보통 네 가지 정보로 구별한다.

  • 출발지 IP
  • 출발지 포트
  • 목적지 IP
  • 목적지 포트

Java의 ServerSocket.accept()는 TCP 연결을 수락한다. HTTP 요청 하나를 받았다는 뜻이 아니다.

캡슐화와 역캡슐화

Ethernet + IPv4 + TCP 통신에서는 이렇게 감싸진다.

HTTP 데이터 to TCP 세그먼트 to IP 패킷 to Ethernet 프레임 to 물리 신호

수신 측은 역순으로 벗긴다. 각 계층은 자기에게 필요한 헤더만 해석한다.

HTTP 메시지 하나와 TCP 세그먼트 하나가 반드시 대응하지는 않는다. TCP는 메시지 단위가 아니라 바이트 스트림을 제공하기 때문이다.

3. 라우팅에서 헷갈리는 것들

목적지 IP는 바뀌지 않는다

원격 서버로 요청할 때 IP 패킷의 목적지를 처음엔 공유기 IP로 두었다가 나중에 서버 IP로 바꾼다고 오해하기 쉽다. 그렇지 않다.

  • 목적지 IP는 처음부터 최종 서버 IP다.
  • 공유기 IP는 다음 홉을 정하는 데 쓰인다.
  • Ethernet 링크마다 목적지 MAC 주소는 달라질 수 있다.
  • 라우터는 기존 L2 프레임을 벗기고, 다음 링크에 맞는 새 프레임을 만든다. 다음 링크가 Ethernet이어야 하는 것도 아니다.
  • TTL 같은 IP 헤더 일부 필드는 라우팅 중에 바뀐다.

가정용 공유기에서는 NAT가 동작해 출발지 IP와 포트가 변환될 수 있다. 라우팅과 NAT는 별개의 개념이다.

DNS, 라우팅, ARP

이름 하는 일
DNS (Domain Name System) 도메인 이름 to IP 주소
라우팅 목적지 IP를 기준으로 다음 홉 결정
ARP (Address Resolution Protocol) 현재 링크에서 다음 대상의 MAC 주소 확인

ARP의 일반적인 동작은 다음과 같다.

  1. ARP 캐시 확인
  2. 매핑이 없으면 ARP Request 브로드캐스트
  3. 해당 IP를 가진 장치가 ARP Reply 응답
  4. IP-MAC 매핑을 캐시에 저장
  5. 그 MAC 주소로 Ethernet 프레임 전송

스위치와 라우터

  • L2 스위치: 출발지 MAC으로 MAC 테이블을 학습하고, 목적지 MAC으로 전달할 포트를 고른다. 목적지 MAC을 모르면 보통 같은 VLAN의 다른 포트로 플러딩한다.
  • 라우터: 목적지 IP로 라우팅 테이블을 조회해 다음 홉을 정하고, 다음 링크에 맞는 프레임을 만든다.

4. 시간적 관점: 어떤 순서로 일어나는가

캐시와 기존 연결이 없는 HTTP/1.1 HTTPS 요청을 가정한 논리적 흐름이다.

  1. URL 해석
  2. DNS 조회로 목적지 IP 확인
  3. 라우팅 테이블 조회, 다음 홉 결정
  4. ARP 등으로 링크 계층 주소 확인
  5. TCP 연결 수립
  6. TLS 핸드셰이크
  7. HTTP 요청 전송
  8. 서버 OS와 Tomcat에서 요청 처리
  9. Spring MVC Controller 실행
  10. HTTP 응답 반환
  11. 클라이언트의 응답 처리
  12. 연결 재사용 또는 종료

주의할 점이 있다.

  • DNS 조회 자체도 네트워크 통신이 필요하다.
  • 실제 브라우저에서는 캐시, 기존 연결, 병렬 처리, CDN이 개입한다.
  • HTTP/3는 TCP가 아니라 UDP 기반 QUIC을 쓰므로 연결 과정이 다르다.

5. HTTP 버전 개요

버전 핵심
HTTP/0.9 GET 기반 단순 문서 요청. 상태 코드, 헤더 없음
HTTP/1.0 버전, 상태 코드, 요청·응답 헤더, Content-Type. 기본은 요청마다 연결 종료 (일부 구현에 Keep-Alive 확장)
HTTP/1.1 지속 연결이 기본. 연결 재사용, 메시지 길이 구분 메커니즘
HTTP/2 바이너리 프레이밍, 스트림, 멀티플렉싱, 헤더 압축
HTTP/3 UDP 기반 QUIC. 전송 계층 HOL Blocking 완화, TLS 1.3 통합

이 표는 개요일 뿐이고, 각 버전의 내부 구조는 이후 글에서 다룬다.

6. 정리

요청 1개가 서버에 갔다가 돌아오는 과정이 전부다.

핵심은 맞다. 다만 HTTP 요청 한 번과 TCP 연결 한 번은 같지 않다.

  • 하나의 TCP 연결에서 여러 HTTP 요청을 처리할 수 있다.
  • HTTP/2는 하나의 연결 위에서 여러 스트림을 멀티플렉싱한다.
  • HTTP/3는 TCP 대신 QUIC을 쓴다.
  • DNS 조회 같은 준비 단계에도 별도의 네트워크 통신이 일어난다.

이 구분이 이후 HTTP 버전별 발전을 이해하는 기반이 된다.

다음에 다룰 주제

  1. URL 구조와 DNS
  2. 서브넷, CIDR, 라우팅 테이블, NAT
  3. TCP: 3-way handshake, 흐름 제어, 혼잡 제어, TIME_WAIT
  4. TLS 핸드셰이크와 HTTP 메시지 경계
  5. HTTP/0.9 to HTTP/3 내부 동작
  6. Java Socket, Tomcat, curl로 직접 확인하기
끝까지 읽어주셔서 감사합니다.