웹은 어떻게 통신하는가

1023·6일 전

웹 통신에 쓰이는 프로토콜

브라우저로 웹 페이지를 열 때는 앞선 편에서 정리한 프로토콜이 한꺼번에 동작한다.

구성하는 일계층(2편 기준)
DNS도메인 이름으로 서버의 IP 주소를 찾는다응용
HTTP/HTTPS클라이언트와 서버가 요청과 응답으로 대화하는 규칙응용
TCP/IP데이터가 인터넷을 오가는 방식을 정한다전송/인터넷

HTTP는 응용 계층 프로토콜이고 TCP 위에서, 또는 TLS로 암호화한 TCP 위에서 전달된다. HTTPS는 HTTP를 암호화한 안전한 버전이다. 데이터는 한 덩어리가 아니라 작은 패킷 여러 개로 나뉘어 오가고 각 패킷의 헤더에는 서버와 클라이언트의 IP 주소, 패킷 번호, 전체 패킷 수 같은 정보가 들어 있다. 패킷은 서로 다른 경로로 갈 수 있어서 순서가 뒤바뀌어 도착해도 헤더 정보로 올바른 순서로 다시 맞춘다. 일부가 유실되면 파일 전체가 아니라 빠진 패킷만 다시 요청하면 된다.

클라이언트와 서버

인터넷에 연결된 컴퓨터는 클라이언트와 서버로 나뉜다. 클라이언트는 사용자의 기기와 그 위의 웹 접속 소프트웨어(보통 브라우저)이고 서버는 웹 페이지나 앱을 저장한 컴퓨터다. HTTP는 클라이언트-서버 프로토콜이라서 요청은 항상 클라이언트(브라우저)가 시작한다. 서버가 먼저 요청을 보내지는 않는다.

서버는 겉으로는 한 대처럼 보이지만 실제로는 부하를 나눠 맡는 여러 서버(로드 밸런싱)이거나, 문서를 그때그때 만들어 내는 캐시/데이터베이스 같은 다른 소프트웨어일 수도 있다. 한 서버 머신에서 여러 서버 프로그램이 돌 수 있고 HTTP/1.1의 Host 헤더 덕분에 같은 IP 주소를 공유할 수도 있다. 브라우저와 서버 사이에는 요청을 중계하는 프록시도 있다. 프록시는 캐싱/필터링/로드 밸런싱/인증/로깅 같은 일을 한다. 이렇게 보면 서브넷이나 라우터도 이 요청이 지나가는 길목이다.

URL과 URI

웹 주소를 정확히 부르면 URL이다. URI는 웹의 리소스를 식별하는 이름이고, 가장 흔한 URI의 종류가 웹 주소로 알려진 URL이다. 정리하면 URL은 URI의 한 종류다. 다음 예시로 구성 요소를 나눠 보면 (예시는 직접 만든 주소)

https://www.example.com:443/docs/page?lang=ko&sort=new#intro
구성예시설명
스킴(프로토콜)https리소스를 요청할 때 브라우저가 쓸 프로토콜
권한(도메인 + 포트)www.example.com:443어느 서버인지와 접속할 포트. HTTP 80/HTTPS 443이면 생략 가능
경로/docs/page서버에서 리소스의 위치. 지금은 실제 파일 위치가 아닌 추상화된 경로가 많다
쿼리?lang=ko&sort=new서버에 추가로 전달하는 키/값 쌍, &로 구분
프래그먼트#intro리소스 안의 특정 위치. 서버로는 전송되지 않는다

도메인 대신 IP 주소를 쓸 수도 있지만 훨씬 불편해서 드물다. 이 도메인이 IP로 바뀌는 과정이 DNS의 주제다. 문서 안의 링크에는 일부가 생략된 상대 URL도 쓰이는데 브라우저가 현재 문서의 URL로 빠진 부분을 채운다.

요청과 응답의 구조

HTTP 메시지는 요청과 응답 두 종류이고, 사람이 읽을 수 있게 설계됐다. 요청의 구성은 이렇다.

요청 구성설명
메서드하려는 동작. 리소스를 가져오는 GET, 폼 값을 보내는 POST 등
경로가져올 리소스의 경로(URL에서 스킴/도메인/포트를 뺀 부분)
HTTP 버전사용하는 프로토콜 버전
헤더(선택)서버에 전달하는 추가 정보
본문(선택)POST처럼 보낼 데이터가 있을 때

응답은 HTTP 버전, 상태 코드와 상태 메시지, 헤더, 그리고 가져온 리소스를 담은 본문(선택)으로 이루어진다. 자주 보는 상태 코드는 아래와 같다.

코드의미
200요청 성공
301리소스가 영구적으로 새 위치로 이동(응답에 새 위치가 포함)
400요청 형식이 잘못되어 서버가 처리할 수 없음
403서버가 접근을 허용하지 않음(누군지는 알지만 권한이 없는 경우)
404요청한 리소스를 찾을 수 없음
503서버 쪽 문제로 처리할 수 없음(점검 중처럼 일시적인 경우가 많음)

HTTP 자체는 상태를 저장하지 않는(stateless) 프로토콜이라 연속된 두 요청 사이에 연결 고리가 없다. 그래서 쇼핑몰 장바구니처럼 맥락이 필요한 서비스는 쿠키로 세션을 만든다. HTTP가 상태가 없다는 것과 세션이 없다는 것은 다르다.

한 번의 웹 접속 흐름

주소를 입력하고 페이지가 뜨기까지를 순서대로 정리하면 이렇다.

단계일어나는 일
1브라우저가 DNS로 서버의 실제 IP 주소를 찾는다
2브라우저가 서버와 TCP 연결을 맺는다(왕복이 여러 번 필요)
3브라우저가 HTTP 요청 메시지를 보내고, 이 메시지는 TCP/IP로 전달된다
4서버가 요청을 승인하면 200 상태 코드와 함께 파일을 작은 패킷으로 나눠 보낸다
5브라우저가 패킷을 모아 페이지를 완성해 보여 준다
6연결을 닫거나 다음 요청에 재사용한다

HTTP/1.0은 요청마다 TCP 연결을 새로 열어서 비효율적이었고, HTTP/1.1이 연결을 재사용하는 지속 연결을 도입했다. HTTP/2는 한 연결에서 메시지를 동시에 여러 개 주고받는 멀티플렉싱으로 더 효율을 높였다. 페이지 하나는 HTML뿐 아니라 CSS/JavaScript/이미지 같은 여러 리소스로 이루어져서 브라우저는 HTML을 받은 뒤 필요한 리소스를 추가로 요청한다.

핵심 복습

키워드한 줄 정리
클라이언트/서버요청은 항상 브라우저(클라이언트)가 시작
프록시브라우저와 서버 사이에서 캐싱/필터링/로드 밸런싱 등을 수행
URI/URLURI는 리소스 식별자, URL은 그중 웹 주소
URL 구성스킴/도메인/포트/경로/쿼리/프래그먼트
HTTP 메시지요청은 메서드+경로+버전+헤더, 응답은 버전+상태 코드+헤더+본문
상태 코드200 성공, 301 이동, 403 권한 없음, 404 없음, 503 서버 문제
statelessHTTP는 상태를 저장하지 않고 쿠키로 세션을 보완
접속 흐름DNS 조회 → TCP 연결 → HTTP 요청 → 응답(패킷) → 페이지 완성

📍 참고 자료

확인일: 2026-10-03

0개의 댓글