끄적이기

[TIL - 6] 웹 통신의 큰 흐름

배씌 2025. 3. 5. 10:45

이때까지 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주소를 가장 가까운 곳에서부터 찾기 시작한다.

 

  1. 브라우저 캐시 확인
    • 브라우저는 최근에 방문한 사이트의 IP 주소를 캐시에 저장 해둔다.
    • 만약 google.com의 IP 주소가 캐시에 있다면, 바로 사용하고 DNS 조회는 하지 않음.
    • (캐시는 자주 사용하는 데이터나 값을 미리 복사해두는 공간이다. 이를 통해 메모리를 절약할 수 있음)
  2. 운영체제(OS) 캐시 확인
    • 브라우저 캐시에 없으면 운영체제에서 유지하는 DNS 캐시 확인
  3. 로컬 네트워크(라우터) 캐시 확인
    • OS 캐시에도 없으면 사용자의 라우터가 유지하는 DNS 캐시 확인
  4. ISP(인터넷 서비스 제공자) DNS 서버 조회
    • 라우터에서도 못 찾으면, 사용자의 ISP(예: KT, SKT, LGU+)에 설정된 DNS 서버에 요청한다.
  5. 권한 있는 네임 서버 조회(DNS Lookup)
    • ISP DNS 서버도 모르면, 글로벌 DNS 네트워크를 따라 상위 네임 서버까지 올라간다.
    • 일반적으로 루트 도메인 서버 -> 서브 도메인 서버 순으로 찾게 된다.

 

3. TCP 3-Way Handshake (서버와 연결)

 

위 과정을 통해 IP 주소를 얻었다면, google 서버와 연결을 시도해야 한다. 이때 TCP를 사용하며, 신뢰성을 위해 3-Way Handshake 를 수행함.

 

  1. SYN (Synchronize)
    • 클라이언트(브라우저) -> 서버
    • 연결 요청을 보냄
  2. SYN-ACK (Synchronize-Acknowledge)
    • 서버 -> 클라이언트
    • 요청을 승인하고, 응답을 보냄
  3. ACK (Acknowledge)
    • 클라이언트 -> 서버
    • 연결 확인을 보냄

 

4. TLS Handshake (보안 연결)

이때, 웹사이트가 HTTPS를 사용하므로, TLS Handshake 과정이 필요하다. -> 암호화된 통신을 위한 보안 연결

 

  1. 클라이언트가 "Hello" 메시지 전송
    • TLS 버전, 지원하는 암호화 방식(Cipher Suite), 랜덤 값 등을 포함한다.
  2. 서버가 "Hello" 메시지 및 인증서 전송
    • 서버는 SSL/TLS 인증서 를 보내고, 암호화 방식을 협상한다.
  3. 클라이언트가 인증서 확인
    • 인증서가 신뢰할 수 있는 CA(Certificate Authority)에서 발급된 것인지 검증한다.
  4. 세션 키 생성 및 교환
    • 브라우저와 서버는 대칭키 암호화 를 위해 안전한 키 교환을 수행한다.
  5. 보안 연결 확립
    • 이제 모든 데이터는 암호화된 형태로 전송 된다.

 

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계층과 매핑시켜 기록해두겠다.

 

  1. 사용자가 URL 입력 -> 응용 계층 (7계층)
  2. DNS 조회 -> 네트워크 계층 (3계층)
  3. TCP 3-Way Handshake -> 전송 계층 (4계층)
  4. TLS Handshake -> 표현 계층 & 세션 계층 (6, 5계층)
  5. HTTP 요청 전송 -> 응용 계층 (7계층)
  6. 서버에서 요청 처리 -> 응용 계층 (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)이 중요한 역할을 합니다. 더 자세한 부분이 필요하시면 설명드릴 수 있습니다."