네트워크
[네트워크] DNS와 웹 통신 흐름
위시리
2025. 3. 17. 13:27
www.example.com 이라는 웹사이트를 방문한다고 가정하고, 이때 어떤 과정이 일어나는지 살펴보자
1. DNS(Domain Name System) 조회 과정
DNS란?
인터넷에서는 컴퓨터들이 서로 통신할 때 IP주소(ex. 192.168.1.1)를 사용한다.
하지만 사람들이 숫자로 된 ip주소를 기억하기 어렵기 때문에 웹사이트 이름(도메인 이름, ex. www.example.com )을 사용한다.
이때 DNS가 이 도메인 이름을 ip주소로 변환해주는 역할을 한다.
- 사람이 인식하기 쉬운 도메인 이름을 서버가 인식하는 IP 주소로 변환하는 분산 데이터베이스 시스템
분산 데이터베이스 시스템
하나의 데이터베이스(DB)를 여러 개의 서버(노드)에 분산하여 저장하고 관리하는 시스템
즉, 단일 서버가 아닌 여러 서버에서 데이터를 관리하여 성능, 확장성, 가용성을 높이는 방식
웹사이트 주소 입력 후 DNS 과정
- 브라우저가 먼저 캐시(cache) 확인
- 브라우저는 최근 방문한 사이트의 ip주소를 잠시 저장
- 만약 캐시에 www.example.com 의 ip 주소가 남아있다면 DNS 조회 없이 바로 연결 가능
- ex. 크롬이 www.example.com → 172.217.169.110을 저장하고 있다면 바로 사용
- 없으면 2단계로
- 운영체제(OS) 캐시 확인
- 브라우저에서 찾지 못하면, 운영체제(Windows, Mac 등)에 저장된 DNS 정보 확인
- OS 차원에서 DNS 정보를 저장해둔게 있다면 사용
- 없으면 3단계로
- 로컬 DNS 서버 (재귀 DNS 서버)로 요청
- 운영체제 캐시에도 없으면, 인터넷 제공업체(ISP)의 DNS 서버로 요청
- 예를 들어, KT를 사용하고 있다면 KT의 DNS 서버에 www.example.com 의 ip 주소가 뭔지 물어봄
- 없으면 4단계
- DNS 서버가 단계적으로 조회 진행
- 만약 로컬 DNS 서버도 모르면, 로컬 DNS 서버가 직접 루트 → TLD → 권한 DNS 서버를 거쳐 IP 주소를 찾음
- 로컬 DNS 서버(재귀 DNS 서버, ISP DNS 서버)는 재귀적으로(Recursive) 상위 서버들에게 요청을 보내서 최종 IP 주소를 찾음
- 루트 네임서버(root DNS) : .com 을 관리하는 TLD 서버를 가르쳐 줌
- TLD 네임서버(.com 담당 서버) : example.com 을 관리하는 네임서버를 알려 줌
- 권한있는 네임서버(Authoritative Name Server) : www.example.com 의 실제 ip 주소를 알려줌
- ip 주소 반환 및 저장
- 최종적으로www.example.com = 172.217.169.110 같은 IP 주소를 받음
- 이 정보를 브라우저, 운영체제, 로컬 DNS 서버가 캐싱해서 다음에 더 빠르게 조회할 수 있다.
2. 웹 서버와 연결 (TCP 3-way Handshake)
DNS에서 ip 주소를 알아냈다면, TCP의 3-way Handshake 과정을 거쳐 이제 내 컴퓨터(클라이언트)와 웹사이트의 웹 서버와 네트워크 연결을 맺고 직접 통신할 준비를 한다.
https://wishlee0204.tistory.com/314
3. 웹페이지 요청 및 응답
웹 서버와 TCP 연결이 맺어지면, 웹사이트의 데이터를 받아오면 된다.
이때, 웹 브라우저는 서버에 HTTP(S)요청으로 웹 페이지를 보여달라고 한다.
요청 과정 ( HTTP / HTTPS )
1. 클라이언트(브라우저) → 서버에 요청
- 브라우저가 서버에 GET 요청을 보냄
GET /index.html HTTP/1.1
Host: www.example.com
2. 서버 → 클라이언트 : 응답 반환 ( 200 OK )
- 서버가 요청을 확인하고, HTML, CSS, JavaScript 등의 데이터를 클라이언트에 보냄
HTTP/1.1 200 OK
Content-Type: text/html
4. 웹페이지 렌더링 (브라우저 화면에 표시)
이제 브라우저는 받은 HTML 을 해석하고, 웹페이지를 완성한다.
웹 페이지 로딩 과정
1. HTML 파일 해석 (파싱)
HTML 코드를 읽고, 내부에 있는 CSS, JavaScript, 이미지 파일도 가져온다.
2. 추가 요청 발생 (CSS, JS, 이미지 다운로드)
<link rel="stylesheet" href="style.css">
<script src="app.js"></script>
<img src="logo.png">
- 브라우저는 style.css, app.js, logo.png를 추가로 요청해야 한다.
- 그러면 서버가 다시 필요한 파일들을 전송해 준다.
3. 브라우저가 화면을 완성하여 웹사이트 표시
모든 리소스(HTML, CSS, JS, 이미지)를 다 가져오면, 브라우저가 최종적으로 웹사이트를 화면에 표시한다.