응용 계층 (DNS/HTTP) - 이름을 찾고, 대화한다
사람은 IP 주소가 아니라 이름을 쓴다. 이름을 주소로 바꾸는 분산 시스템 DNS, 그리고 그 주소 위에서 웹이 대화하는 언어 HTTP.
지난 편 복습
4편까지로 배달 문제는 끝났다. IP가 호스트까지 길을 찾고, TCP가 프로세스까지 순서대로 빠짐없이 전달한다. 아래 계층들이 만들어준 이 신뢰성 있는 통로 위에서, 응용 프로그램은 이제 내용에만 집중하면 된다.
이번 편의 질문은 두 가지다. 사람이 쓰는 이름은 어떻게 주소가 되는가? 그리고 웹은 그 위에서 무슨 말을 주고받는가?
DNS: 이름을 주소로
사람은 93.184.216.34가 아니라 www.example.com을 기억한다. 이름을 IP 주소로 바꾸는 시스템이 DNS(Domain Name System) 다.
계층적 이름, 분산된 관리
전 세계 도메인을 한 서버가 관리할 수는 없다. DNS는 이름 자체를 계층으로 설계했다. www.example.com.은 오른쪽부터 루트(.) → 최상위 도메인(com) → example.com → www 순으로 읽으며, 각 단계는 자기 아래 단계의 관리만 위임한다. 1편의 계층화가 통신이 아닌 이름 공간에 적용된 모습이다.
해석 과정
호스트가 직접 전 세계를 뒤지지는 않는다. 질문은 보통 통신사나 회사가 운영하는 재귀 리졸버(recursive resolver) 에게 위임된다.
브라우저 → 리졸버: "www.example.com의 주소는?"
리졸버 → 루트 서버: "...?" → "com은 저쪽에 물어봐"
리졸버 → com 서버: "...?" → "example.com은 저쪽에"
리졸버 → example.com 네임서버: "...?" → "93.184.216.34"
리졸버 → 브라우저: "93.184.216.34"
매번 이 여정을 반복하면 느리므로, 모든 단계에 캐시가 있다. 각 응답에는 TTL(Time To Live) 이 붙어 있어, 그 시간 동안은 리졸버와 운영체제, 브라우저가 저장된 답을 재사용한다.
DNS 조회는 보통 UDP 53번 포트를 쓴다. 질문 하나에 응답 하나로 끝나는 짧은 통신이라, 4편에서 본 대로 TCP의 연결 수립 비용이 아깝기 때문이다.
HTTP: 웹의 언어
주소를 알았으니 대화할 차례다. HTTP(HyperText Transfer Protocol) 는 웹의 요청-응답 프로토콜로, TCP 위에서 동작한다. 클라이언트가 요청을 보내면 서버가 응답하는 단순한 구조이고, 메시지는 사람이 읽을 수 있는 텍스트다.
요청 응답
GET /index.html HTTP/1.1 HTTP/1.1 200 OK
Host: www.example.com Content-Type: text/html
Accept: text/html Content-Length: 1256
<!doctype html> ...
메소드(method) 는 행위를 나타낸다. 조회는 GET, 제출은 POST, 교체는 PUT, 삭제는 DELETE다. 상태 코드(status code) 는 결과를 요약한다. 2xx는 성공, 3xx는 리다이렉트, 4xx는 클라이언트 잘못(404 Not Found), 5xx는 서버 잘못(500 Internal Server Error)이다.
무상태성과 쿠키
HTTP는 무상태(stateless) 프로토콜이다. 서버는 요청 하나하나를 독립적으로 처리하며, 이전 요청을 기억하지 않는다. 덕분에 서버를 여러 대로 늘려도 어느 서버가 응답하든 상관없어 확장이 쉽다.
하지만 로그인처럼 상태가 필요한 기능도 있다. 이를 위해 서버는 응답에 쿠키(cookie) 를 실어 보내고, 브라우저는 이후 요청마다 그 쿠키를 다시 붙인다. 상태를 서버가 기억하는 대신 클라이언트가 매번 제시하게 만든 것으로, 무상태 프로토콜 위에 상태를 얹는 표준적인 방법이다.
오늘날의 웹은 HTTP를 그대로 노출하지 않고, TLS로 암호화한 HTTPS(443번 포트)를 기본으로 쓴다. 암호화 계층의 동작은 이 시리즈의 범위를 벗어나므로 다루지 않는다.
요약
| DNS | HTTP | |
|---|---|---|
| 역할 | 이름 → IP 주소 | 웹 자원의 요청과 응답 |
| 전송 계층 | 주로 UDP 53 | TCP 80 (HTTPS는 443) |
| 구조 | 계층적 위임 + 캐시(TTL) | 요청-응답, 무상태 |
| 상태 관리 | - | 쿠키로 보완 |
핵심은 이것이다.
응용 계층은 아래 계층이 만든 통로 위에서 내용만 다룬다. DNS가 이름을 주소로 바꾸고, HTTP가 그 주소와 대화한다.
다음 편 예고
이제 모든 조각이 모였다. 마지막 편에서는 주소창에 URL을 입력하고 Enter를 누른 순간부터 화면에 페이지가 뜨기까지, 시리즈 전체를 하나의 흐름으로 관통한다.