[TIL - 6] 웹 통신의 큰 흐름
이때까지 Spring도 사용해보고 RESTful API도 나름 작성해보았는데, 정작 어떻게 돌아가는 건지는 이해하려 하지 않고, 주먹구구식으로 사용만 해온것 같다. 이번 기회에 제대로 이해하고, 정리해보았다.
"https://google.com" 에 접속할 때 생기는 일들?
위 질문에 대한 답변을 생각하며 우선 과정들을 생각해보았다.
1. URL 입력 및 해석
클라이언트(사용자)가 브라우저의 주소창에 "https://google.com" 을 입력하면 브라우저가 이를 해석해야 한다.
- https:// -> 프로토콜
- google.com -> 도메인 이름
- / -> 경로(Path)
프로토콜은 컴퓨터나 네트워크 장치들이 서로 통신할 때 따르는 규칙들이다. (HTTP, TCP/IP 등)
도메인 주소는 쉽게 말하면 인터넷 주소이다. 실제로는 통신하려면 IP 주소가 필요하지만, 사람들이 한눈에 알아보기 쉽게 문자열로 표현한 것.
2. DNS 조회
위에서 말했듯이, 실제 통신에는 IP주소가 필요하다. 따라서, 도메인 주소 -> IP 주소로 변환하는 과정이 필요한데, 이를 DNS 조회라고 한다. (UDP 프로토콜 사용)
브라우저는 IP주소를 가장 가까운 곳에서부터 찾기 시작한다.
- 브라우저 캐시 확인
- 브라우저는 최근에 방문한 사이트의 IP 주소를 캐시에 저장 해둔다.
- 만약 google.com의 IP 주소가 캐시에 있다면, 바로 사용하고 DNS 조회는 하지 않음.
- (캐시는 자주 사용하는 데이터나 값을 미리 복사해두는 공간이다. 이를 통해 메모리를 절약할 수 있음)
- 운영체제(OS) 캐시 확인
- 브라우저 캐시에 없으면 운영체제에서 유지하는 DNS 캐시 확인
- 로컬 네트워크(라우터) 캐시 확인
- OS 캐시에도 없으면 사용자의 라우터가 유지하는 DNS 캐시 확인
- ISP(인터넷 서비스 제공자) DNS 서버 조회
- 라우터에서도 못 찾으면, 사용자의 ISP(예: KT, SKT, LGU+)에 설정된 DNS 서버에 요청한다.
- 권한 있는 네임 서버 조회(DNS Lookup)
- ISP DNS 서버도 모르면, 글로벌 DNS 네트워크를 따라 상위 네임 서버까지 올라간다.
- 일반적으로 루트 도메인 서버 -> 서브 도메인 서버 순으로 찾게 된다.
3. TCP 3-Way Handshake (서버와 연결)
위 과정을 통해 IP 주소를 얻었다면, google 서버와 연결을 시도해야 한다. 이때 TCP를 사용하며, 신뢰성을 위해 3-Way Handshake 를 수행함.
- SYN (Synchronize)
- 클라이언트(브라우저) -> 서버
- 연결 요청을 보냄
- SYN-ACK (Synchronize-Acknowledge)
- 서버 -> 클라이언트
- 요청을 승인하고, 응답을 보냄
- ACK (Acknowledge)
- 클라이언트 -> 서버
- 연결 확인을 보냄
4. TLS Handshake (보안 연결)
이때, 웹사이트가 HTTPS를 사용하므로, TLS Handshake 과정이 필요하다. -> 암호화된 통신을 위한 보안 연결
- 클라이언트가 "Hello" 메시지 전송
- TLS 버전, 지원하는 암호화 방식(Cipher Suite), 랜덤 값 등을 포함한다.
- 서버가 "Hello" 메시지 및 인증서 전송
- 서버는 SSL/TLS 인증서 를 보내고, 암호화 방식을 협상한다.
- 클라이언트가 인증서 확인
- 인증서가 신뢰할 수 있는 CA(Certificate Authority)에서 발급된 것인지 검증한다.
- 세션 키 생성 및 교환
- 브라우저와 서버는 대칭키 암호화 를 위해 안전한 키 교환을 수행한다.
- 보안 연결 확립
- 이제 모든 데이터는 암호화된 형태로 전송 된다.
5. HTTP 요청 전송
연결 전 과정이 모두 완료 되었으므로, Google 서버에 HTTP 요청을 보내면 된다.
GET / HTTP / 1.1
Host: google.com
User-Agent: ( ... )
Accept: text/html
6. 서버에서 요청 처리
이후 서버에서 요청을 처리하고, 클라이언트에게 응답을 반환한다. 이때 필요한 과정을 추가로 처리한다. (예: 백엔드 서버에서 데이터 처리, 데이터베이스 조회 등)
OSI 7계층과의 연관
이전에 네트워크 시험 공부를 하다 OSI 7계층에 대해 빡세게 외웠던 기억이 있어서 생각이 나서 찾아보았더니, 위 과정 OSI 7계층에 기반한다는 것을 알게되었다.
(OSI 7계층 : 네트워크 통신을 7개의 계층으로 나눈 모델)
| 계층 | 이름 | 역할 |
| 7 | 응용 계층 | 웹 브라우저, HTTP 프로토콜 |
| 6 | 표현 계층 | 데이터 인코딩, 암호화 (SSL/TLS) |
| 5 | 세션 계층 | 연결 유지, 세션 관리 (TLS Handshake) |
| 4 | 전송 계층 | 신뢰성 있는 데이터 전송 (TCP) |
| 3 | 네트워크 계층 | IP 주소를 이용한 패킷 라우팅 (IP) |
| 2 | 데이터 링크 계층 | MAC 주소 기반 데이터 전송 (이더넷, Wi-Fi) |
| 1 | 물리 계층 | 실제 하드웨어 |
위 과정을 OSI 7계층과 매핑시켜 기록해두겠다.
- 사용자가 URL 입력 -> 응용 계층 (7계층)
- DNS 조회 -> 네트워크 계층 (3계층)
- TCP 3-Way Handshake -> 전송 계층 (4계층)
- TLS Handshake -> 표현 계층 & 세션 계층 (6, 5계층)
- HTTP 요청 전송 -> 응용 계층 (7계층)
- 서버에서 요청 처리 -> 응용 계층 (7계층)
답변 예시
"웹 페이지를 요청할 때 어떤 과정이 발생하나요?"
" 웹 통신은 OSI 7계층의 흐름 을 따라 진행됩니다.
먼저, 응용 계층(7계층) 에서 HTTP 요청 을 생성하고, 네트워크 계층(3계층) 의 DNS 조회 를 통해 도메인을 IP 주소 로 변환합니다.
이후, 전송 계층(4계층) 에서 TCP 3-Way Handshake 로 서버와 연결을 설정하고, HTTPS라면 TLS Handshake(5~6계층) 를 통해 보안 연결을 확립합니다.
그 후, 서버는 요청을 처리하고 HTTP 응답을 반환하는데, 이 과정에서도 전송 계층(TCP), 네트워크 계층(IP), 데이터 링크 계층(MAC) 을 거쳐 브라우저에 도달합니다.
마지막으로 브라우저가 HTML을 렌더링 하여 웹 페이지를 표시합니다."
💡 (추가 질문에 대비한 마무리 멘트)
"이 과정에서 OSI 7계층의 각 역할이 잘 분리되어 있으며, 특히 전송 계층의 신뢰성(TCP)과 네트워크 계층의 패킷 라우팅(IP)이 중요한 역할을 합니다. 더 자세한 부분이 필요하시면 설명드릴 수 있습니다."