기출노트 로고기출노트
시작하기

DNS는 주소를 찾고 HTTP는 무엇을 요청할까요?

https://study.example/chapter/voltage?mode=review#formula

주소 안에 여러 정보가 붙어 있습니다. study.example은 접속할 호스트 이름, /chapter/voltage는 경로, mode=review는 쿼리, formula는 조각 식별자입니다.1

이 주소 전체를 DNS가 해석한다고 생각하면 역할이 섞입니다. DNS는 호스트 이름에 대한 주소 정보를 찾는 데 쓰이고, 경로와 쿼리는 자원을 요청할 때 사용됩니다. 마지막 #formula는 서버에 보내는 요청 대상과 구별해야 해요.2

DNS에 문서 제목을 묻지는 않아요

브라우저가 study.example에 대한 주소 정보를 얻는 것과, 그 호스트에 /chapter/voltage를 요청하는 것은 다른 일입니다. DNS의 이름 해석을 통해 IP 주소 정보를 찾을 수 있지만, DNS가 그 경로의 HTML 내용을 가져오는 것은 아닙니다.3

같은 호스트에서 /chapter/current를 열면 경로가 달라집니다. 접속 대상의 주소 정보를 재사용할 수 있어도 서버에 요청할 자원은 달라져요. 도메인 뒤의 글자를 한 덩어리로 외우는 것보다 이 경계를 보면 이름 조회와 문서 요청이 분리됩니다.

이름 하나에 주소 정보가 하나만 있다고 생각할 필요도 없습니다. DNS의 주소 정보나 응답, 서비스 앞단의 구성에 따라 여러 주소·연결 경로가 가능해요.3 그림의 서버 상자 하나는 설명을 단순하게 만든 표현입니다.

호스트의 DNS 조회와 경로의 HTTP 요청을 나누어 표시한 주소 그림

요청에는 #formula가 붙지 않습니다

이 주소를 HTTP/1.1의 요청 형식으로 표현하면 요청 대상은 다음처럼 쓸 수 있습니다. HTTPS 통신을 사람이 읽을 수 있게 풀어 쓴 예입니다.

GET /chapter/voltage?mode=review HTTP/1.1
Host: study.example

경로와 쿼리는 보이지만 #formula는 없습니다. URI 표준은 조각 식별자를 자원에 접근하기 전에 나머지 URI와 분리하는 요소로 설명합니다.2 웹 문서에서는 받아온 문서의 특정 위치를 가리키는 데 쓸 수 있어요.

호스트는 HTTP 요청에서도 역할이 있습니다. 위의 Host 필드는 같은 접속 대상에서 요청한 호스트를 구별하는 정보예요. HTTP/1.1의 origin-form 요청은 경로와 필요한 쿼리를 요청 대상에 두고 호스트를 별도로 전달합니다.4

따라서 “DNS에서 호스트 이름을 사용했으니 이후에는 이름이 필요 없다”는 설명은 충분하지 않습니다. IP 주소로만 접속해본 결과와 원래 호스트 이름으로 여는 결과가 인증서나 서버 설정에 따라 다를 수 있어요. HTTPS의 보안 연결도 HTTP 문서 경로를 받는 것과 구별되는 절차입니다.5

문서를 받으면 페이지 전체가 끝난 걸까요?

HTML을 받았어도 이미지, 스타일시트, 스크립트 등 추가 자료를 요청할 수 있습니다. HTTP 개요 문서는 브라우저가 HTML 문서를 해석하며 화면 구성에 필요한 자원을 추가로 가져오는 흐름을 설명해요.5

그래서 본문은 보이는데 이미지가 빠진 페이지도 가능합니다. 처음 문서 요청과 추가 이미지 요청은 같은 성공·실패 결과를 가질 필요가 없어요. 이미지의 호스트가 다르다면 이름 조회나 연결 대상도 달라질 수 있습니다.

매번 DNS 조회부터 새로 시작하는 것도 아닙니다. 이미 캐시에 가진 주소 정보를 사용하거나 열려 있는 연결을 재사용할 수 있어요.35 주소 입력 뒤의 흐름도는 역할을 설명하는 순서이지, 새 페이지마다 같은 네트워크 요청이 모두 생긴다는 기록이 아닙니다.

오류 메시지가 멈춘 지점을 알려줍니다

이름 해석 실패와 HTTP 404는 같은 ‘못 찾음’으로 읽을 수 없습니다.

이름 해석에서 주소 정보를 얻지 못했다면 접속할 대상을 찾는 단계가 막혔을 수 있어요. 반면 404는 요청 자원을 찾지 못했다는 HTTP 응답 상태입니다.6 HTTP 응답을 받았다는 사실 자체가 앞의 실패와 다릅니다.

404가 서버 전체의 중단을 뜻하지는 않습니다. 다른 경로는 존재할 수 있고, 응답을 원본 서버가 아니라 중간 장치가 만들 수도 있어요. 상태 코드만으로 내부 운영 상태를 모두 판정할 수는 없습니다.

Footnotes

  1. RFC 3986의 3장 Syntax Components에서 authority·host, path, query, fragment의 구분을 확인했다. study.example은 설명용 호스트다. URI 구성 ↩

  2. RFC 3986의 3.5 Fragment에서 역참조 전에 fragment를 나머지 URI와 분리하고 클라이언트에서 처리하는 설명을 확인했다. 조각 식별자 ↩ ↩2

  3. Cloudflare Learning Center 「What is DNS?」에서 도메인 이름과 주소 정보, DNS caching의 역할을 확인했다. DNS ↩ ↩2 ↩3

  4. RFC 9112의 3.2.1 Origin-Form과 3.2 요청 대상 설명에서 HTTP/1.1의 경로·쿼리 및 Host 필드 관계를 확인했다. 요청 대상 ↩

  5. MDN 「Overview of HTTP」의 브라우저와 서버, 추가 자원 요청 및 암호화·연결 흐름을 참고했다. HTTP 개요 ↩ ↩2 ↩3

  6. MDN 「404 Not Found」에서 요청한 자원을 찾지 못할 때의 응답 상태 의미를 확인했다. 404 ↩