본문으로 바로가기

00

웹 요청의 해부

주소창에 URL을 입력한 순간부터 화면이 뜨기까지, 그 사이에 무슨 일이 벌어지는가

단계별로 보기

스페이스바로 재생/정지, 좌우 화살표로 단계 이동, R로 처음으로 돌아갑니다.

대기 중1 / 4 단계 — 1단계 — 이름을 주소로 바꾼다

브라우저가 DNS 리졸버에게 묻습니다. "example.com의 주소가 뭐죠?" 리졸버가 답을 돌려줍니다. 아직 웹사이트 데이터는 한 글자도 오지 않았습니다. 주소만 알아낸 상태입니다.

이 강의를 마치면

  • 이름(도메인)을 주소(IP)로 바꾸는 단계가 별도로 존재함을 설명한다.
  • 연결을 맺는 일과 데이터를 요청하는 일이 서로 다른 단계임을 구분한다.
  • 요청과 응답이 지나가는 경로를 순서대로 추적한다.

주소창에 입력한 다음

브라우저 주소창에 example.com을 입력하고 엔터를 누르면 화면이 거의 즉시 뜹니다. 너무 빨라서 하나의 동작처럼 느껴지지만, 실제로는 여러 단계가 순서대로 일어납니다.

이 강의는 그 순서를 봅니다. 순서를 알아야 "왜 느린가"를 물을 수 있기 때문입니다.

1단계 — 이름을 주소로 바꾼다 (DNS)

example.com은 사람이 읽기 위한 이름입니다. 컴퓨터끼리는 숫자로 된 주소 (예: 93.184.216.34)를 씁니다. 그래서 브라우저는 먼저 이 이름의 주소가 뭐냐고 물어봐야 합니다. 이 질문에 답해주는 곳을 DNS 리졸버라고 부릅니다.

전화번호부에서 이름으로 번호를 찾는 것과 같습니다. 번호를 알아야 전화를 걸 수 있듯이, 주소를 알아야 요청을 보낼 수 있습니다.

이미 최근에 물어본 적이 있으면 브라우저나 운영체제가 답을 기억해 둡니다. 그러면 이 단계는 거의 시간이 들지 않습니다. 이 강의는 기억해 둔 게 없는 상태를 가정합니다.

2단계 — 연결을 맺는다

주소를 알았다고 바로 데이터를 달라고 할 수는 없습니다. 먼저 상대방과 연결을 맺어야 합니다. 서로 "들리십니까" "네 들립니다"를 주고받는 절차입니다.

전화를 걸어 상대가 받을 때까지의 과정에 해당합니다. 아직 아무 얘기도 안 했지만, 이 과정에도 시간이 듭니다.

3단계 — 실제로 요청한다

이제야 "이 페이지를 주세요"라고 말합니다. 이것이 HTTP 요청입니다.

4단계 — 서버가 답을 만든다

서버는 요청을 받고 필요하면 데이터베이스에 물어봅니다. 사용자 정보나 게시글 같은 건 서버가 들고 있는 게 아니라 데이터베이스에 저장되어 있기 때문입니다. 답을 받아서 페이지를 만들고, 그 결과를 돌려보냅니다.

왜 이 순서가 중요한가

네 단계는 앞이 끝나야 뒤가 시작됩니다. 그래서 전체 시간은 각 단계 시간의 합입니다.

전체 시간 = 이름 찾기 + 연결 맺기 + 요청/응답 + 서버 처리

이 말은 곧, 어느 한 단계만 느려도 전체가 느려진다는 뜻입니다. 서버를 아무리 빠르게 만들어도 이름 찾기가 3초 걸리면 사용자는 3초를 기다립니다.

그래서 "사이트가 느려요"라는 신고를 받으면 가장 먼저 할 일은 어느 단계가 느린지 나누는 것입니다. 단계를 나누지 않으면 엉뚱한 곳을 고치게 됩니다.

이 강의가 단순화한 것

교육용 모형은 언제나 무언가를 생략합니다. 무엇을 생략했는지 아는 것도 학습의 일부입니다.

전제한 것

  • 브라우저와 운영체제 모두 이 도메인의 주소를 기억하고 있지 않다(DNS 캐시 미스).
  • 이 서버와의 기존 연결을 재사용하지 않고 새로 맺는다.
  • 중간에 프록시나 CDN이 없다.
  • 각 단계의 시간은 설명을 위해 고른 대표값이며 실제 측정값이 아니다.

다루지 않은 것

  • DNS 재귀 질의의 전체 계층(루트 → TLD → 권한 서버)
  • TCP 3-way 핸드셰이크와 TLS 핸드셰이크의 세부 절차
  • Happy Eyeballs(IPv4/IPv6 동시 시도)
  • 연결 재사용(keep-alive)과 커넥션 풀링
  • HTTP/2와 HTTP/3의 프레이밍 차이

더 읽을거리: RFC 9110 — HTTP Semantics · RFC 1034 — Domain Names: Concepts and Facilities

이제 직접 만들어 보세요

읽어서 아는 것과 만들어서 아는 것은 다릅니다. 컴포넌트를 배치하고 트래픽을 흘려서 실제로 동작하는지 확인해 보세요.

실습 과제 열기

이 강의에 물어보기

하루 5번

이 강의 본문만 근거로 답합니다. 강의에 없는 내용은 지어내지 않습니다.