base

웹 동작 원리: www.google.com을 입력하면 무슨 일이 일어날까?

우리는 매일 브라우저 주소창에 www.google.com과 같은 URL을 입력해 정보를 찾고, 콘텐츠를 보고, 서비스를 이용합니다. 하지만 이 단순한 입력은 실제로는 수많은 기술이 동시다발적으로 작동하며 이뤄지는 복합적인 프로세스입니다. 이 글에서는 DNS 조회, TCP 및 TLS 연결, HTTP 요청과 응답, 브라우저 렌더링하는 각 단계에서 어떤 기술이 사용되는지 알아봅시다.


1. URL 입력과 구조 해석

사용자가 브라우저 주소창에 www.google.com을 입력하면, 브라우저는 단순 텍스트(검색어)인지, URL인지, 아니면 주소 단축(예: 북마크 키워드)인지를 판단합니다. 그리고 사용자가 명시적으로 http://나 https://를 붙이지 않아도, 브라우저는 “도메인처럼 보인다”고 판단되면 자동으로 기본 스킴을 붙입니다. 대다수 브라우저는 HTTPS를 기본으로 사용하기 때문에 내부적으로는 https://www.google.com으로 해석합니다. 만약 HTTPS 연결이 불가능하거나 별도로 설정이 필요한 환경(예: 특정 포트, 내부망)이라면, http://를 강제하기도 하지만, 일반 사용자 관점에서는 “HTTPS가 기본”으로 설정됩니다.


브라우저가 내부적으로 “https://www.google.com”으로 바꿔 간주했다고 하면, 다음과 같이 구성을 쪼갭니다.

구조 해석
<스킴>   :  https
<인증>   :  (현재 예시에는 사용자명/암호가 없으므로 생략)
<호스트> :  www.google.com
<포트>   :  (생략됨) → 스킴이 https이므로 기본 443번 포트를 사용
<경로>   :  (생략됨) → 기본으로 "/"
<쿼리>   :  (생략됨) → 아무 파라미터도 없으므로 빈 문자열
<프래그먼트(해시)>: (생략) → 빈 문자열

세부 설명은 아래와 같습니다.

컴포넌트실제 값비고
스킴(Scheme)https사용자가 생략했으나 브라우저가 자동 추가
인증(Authentication)예: user:pass@ 형태 (여기서는 없음)
호스트(Hostname)www.google.com도메인 네임
포트(Port)443 (기본값)HTTPS 기본 포트. 명시하지 않았으므로 자동 지정
경로(Path)/생략하면 루트 경로(/)로 본다
쿼리(Query)예: ?q=abc&lang=ko 형태 (여기서는 없음)
프래그먼트(Hash)예: #section1 (여기서는 없음)

URL 표준(RFC 3986)에 따르면, 스킴이 없는 경우, 브라우저는 “도메인으로 보이는 문자열”을 만나면 자동으로 스킴과 기본 포트, 기본 경로를 채워 줍니다. 따라서 사용자가 “www.google.com”만 입력해도, 브라우저는 내부에서 “https://www.google.com/”이라고 간주합니다. 해당 정보를 통해 브라우저는 서버와 연결을 시작하기 위한 준비를 마치고, IP 주소를 찾기 위한 DNS 조회 단계로 넘어갑니다.


2. DNS 조회: 도메인 → IP 주소

도메인을 입력했을 때, 브라우저는 알고 있는 IP가 있는지 순차적으로 확인합니다. 각 계층에서 IP를 찾으면 그 값을 바로 사용하고, 없다면 다음 단계로 넘어갑니다.

  1. 브라우저 DNS 캐시 : 브라우저 자체에서 최근에 동일 도메인으로 접속한 기록이 남아 있는지를 확인합니다. 같은 탭이나, 다른 탭에서 이미 조회한 기록이 있으면 그 값으로 사용해서 네트워크 요청을 줄입니다.
  2. 운영체제(OS) hosts 파일 : 브라우저 DNS 캐시 다음, OS DNS 캐시 전에 hosts 파일(/etc/hosts 혹은 C:\Windows\System32\drivers\etc\hosts)을 먼저 확인하는 과정이 있습니다. 로컬에 도메인-IP 매핑을 강제하고 싶을 때 이 파일을 사용합니다.
  3. 운영체제(OS)의 DNS 캐시 : 브라우저 캐시가 없으면, OS( 윈도우의 DNS 클라이언트 캐시, macOS/Linux의 nscd 등)에서 관리하는 캐시를 확인합니다.
  4. 로컬 네트워크 장비(라우터)의 캐시 : 같은 네트워크 내부에서 여러 기기들이 동일 도메인을 접속할 때, 라우터는 한번 질의된 결과를 잠시 보관하여, DNS 쿼리를 줄입니다.
  5. ISP/공용의 DNS 서버 캐시 : 인터넷 제공자가 운영하는 권장 DNS 서버(ex. ISP(인터넷 사업지) - KT, SK브로드밴드 / 공용(public) 리졸버 - Google Public DNS(8.8.8.8) 등)에 질의를 하고, DNS 서버도 DNS 레코드의 TTL에 따라 결과를 캐싱하므로, ISP 네트워크 내에 다른 사용자가 조회한 값이 있으면 즉시 응답합니다.

위 네 가지 캐시 계층 모두에서 해당 도메인의 IP를 찾지 못했다면, ISP의 리졸버(DNS 서버)는 권한 있는 네임서버를 찾아가는 재귀적 질의를 수행합니다. 이때 거치는 단계는 크게 세 단계로 요약됩니다.


  1. 루트 네임서버(Root Name Server)에 질의 : www.google.com을 찾는다고 하면, 먼저 .com TLD를 누가 관리하느냐를 알아야 하므로 전 세계에 분산되어 있는 루트 서버(13개 주요 그룹) 중 하나에 질의(A 또는 AAAA 레코드 요청)를 보냅니다. 루트 서버는 .com 최상위 도메인을 담당하는 TLD 네임서버 목록을 응답해 줍니다.
  2. TLD 네임서버(.com TLD)에 질의 : 루트 서버로부터 받은 응답을 바탕으로, 이제 google.com의 권한 네임서버는 어디인지 묻습니다. 이 단계에서는 .com을 담당하는 여러 TLD 서버 중 하나에 질의하여, 최종적으로 google.com 도메인을 관리하는 권한(authoritative) 네임서버(예: ns1.google.com, ns2.google.com 등)의 정보(또는 IP 주소)를 받아옵니다.
  3. 권한 네임서버(Google 권한 서버)에 질의 : 마지막으로 www.google.com의 실제 IP는 무엇인가요?라고 권한 네임서버에 묻습니다. 권한 서버는 해당 호스트 이름(예: www.google.com)에 매핑된 A(IPv4) 또는 AAAA(IPv6) 레코드를 응답으로 돌려줍니다.

정리하면, 브라우저가 실제 HTTP 요청을 보내기 전, 도메인 → IP 매핑을 위해 여러 단계의 캐시(브라우저 → OS → 라우터 → ISP)를 먼저 살펴봅니다. 어느 계층에서도 캐시가 없다면, ISP의 리졸버가 루트 → TLD → 권한 네임서버 순서로 차례차례 질의하여 최종 IP를 가져온다. 최종 IP는 각 계층별 TTL에 맞춰 저장되며, TTL이 만료되면 다시 같은 과정을 거치게 됩니다.


3. TCP 연결: 3-Way Handshake

IP 주소를 획득한 브라우저는 해당 서버와 연결을 맺기 위해 TCP 프로토콜을 사용합니다. TCP 연결은 신뢰성 있는 통신을 보장하기 위해 3단계 핸드셰이크를 수행합니다.

  1. 클라이언트가 서버에 TCP 연결을 하고 싶다는 SYN 플래그가 설정된 패킷을 보냅니다.
  2. 서버가 클라이언트의 SYN을 받고, 연결 할 준비가 되었다는 SYN + ACK 패킷으로 응답합니다.
  3. 클라이언트가 서버의 SYN + ACK를 응답받고, 연결을 시작하겠다는 ACK 패킷을 보내면 TCP 연결이 완료됩니다.

이 과정이 끝나면, 양쪽(클라이언트와 서버)은 데이터 전송을 위한 “TCP 연결 상태”가 되고, 이후 실제 애플리케이션(예: HTTP, FTP 등)이 TCP 세션을 통해 데이터를 주고받을 수 있게 됩니다.


4. TLS(SSL) 핸드셰이크: HTTPS 보안 설정

TLS(Transport Layer Security, 옛 이름 SSL)는 TCP 위에서 추가로 “암호화된 통신 채널”을 만드는 단계입니다. 일반적으로 HTTPS( 스킴 )에서는 “먼저 TCP 핸드셰이크를 통해 연결을 맺고, 그 위에서 TLS 핸드셰이크를 수행”하게 됩니다. 주된 목적은 서버(혹은 클라이언트) 인증, 대칭키 교환, 암호화 방식을 협의합니다.

  1. 서버가 디지털 인증서(Certificate)를 클라이언트에 전송
  2. 클라이언트가 인증서를 검증하고 대칭키 생성을 위한 암호화된 데이터를 서버에 전달
  3. 서버와 클라이언트는 동일한 세션 키(Session Key)를 생성해 암호화 통신을 시작

이 과정이 끝나면, TCP 연결 위에 암호화된 (대칭키 기반) 통신 채널이 구축됩니다. 이후 HTTP 요청/응답은 모두 이 채널 안에서 암호화되어 오가게 됩니다.

TCP 3-way 핸드셰이크TLS(SSL)핸드셰이크
계층전송 계층(OSI 4계층/TCP-IP)전송 계층 위의 보안 계층(OSI 5~6 계층 경계)
주요 목적안정적인(연결형) 데이터 전송 경로 구축데이터 암호화, 서버·클라이언트 인증, 세션키 교환
단계 수3단계일반적으로 6~8단계(사용 암호화 방식에 따라 상이)
핸드셰이크 타이밍애플리케이션 데이터 전송 이전에 반드시 수행됨TCP 연결 성립 후, 실제 애플리케이션 데이터(예: HTTP) 전송 전에 수행
메시지 종류SYN, SYN-ACK, ACKClientHello, ServerHello, Certificate, KeyExchange, ChangeCipherSpec, Finished 등
보안 여부평문(암호화되지 않음)암호화 매개변수 협상 및 세션키 공유를 통해 이후 메시지 암호화됨

“TCP 핸드셰이크”와 “TLS 핸드셰이크”는 서로 다른 목적과 다른 계층에 속하며, 연속적으로 수행됩니다.


5. HTTP 요청: 웹 콘텐츠 요청

TLS 통신이 완료되면, 브라우저는 서버에 HTTP 요청을 보냅니다. 보통 기본 경로에 대한 GET / 요청이 전송됩니다.

http
GET / HTTP/1.1
Host: www.google.com
User-Agent: Mozilla/5.0
Accept: text/html,application/xhtml+xml
Connection: keep-alive

이 요청에는 브라우저 종류, 언어 설정, 요청 헤더 정보 등이 포함되며, 이는 서버가 적절한 콘텐츠를 반환하는 데 사용됩니다. 위에서 GET / 이라는 것은 경로(Path)가 /라는 뜻이고, 별도의 쿼리나 해시가 없으므로 기본 페이지 루트를 요청하는 형태입니다.


6. HTTP 응답: HTML 반환

서버는 요청을 처리한 뒤, HTML 콘텐츠와 함께 응답을 반환합니다. 응답 예시는 다음과 같습니다:

http
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 8912
...
<html>
  <head>
    <link href="style.css">
    <script src="app.js"></script>
  </head>
  <body>Welcome to Google</body>
</html>

HTML 내부에는 추가로 요청해야 할 리소스(JS, CSS, 이미지 등)가 포함되어 있으며, 브라우저는 이를 해석해 다시 요청을 보냅니다.


7. 추가 리소스 요청

브라우저는 HTML을 해석하며 만나는 외부 리소스에 대해 다음과 같이 동작합니다:

  • 이미지, 스크립트, 스타일시트는 별도로 HTTP 요청을 생성
  • HTTP/2 이상인 경우, 하나의 연결로 다중 리소스를 동시에 다운로드 가능
  • JS는 asyncdefer 속성 유무에 따라 비동기 또는 렌더링 차단 방식으로 처리

브라우저는 이 리소스들을 비동기적으로 병렬 처리하며, 사용자에게 빠르게 화면을 보여주는 데 집중합니다.


8. 브라우저 렌더링: DOM부터 최종 출력까지

리소스가 모두 수신되면 브라우저는 렌더링 파이프라인을 실행합니다.

  1. HTML 파싱 → DOM 트리 구성
  2. CSS 파싱 → CSSOM 트리 구성
  3. DOM + CSSOM → Render Tree 구성
  4. Layout 단계: 각 요소의 위치와 크기를 계산
  5. Paint 단계: 요소를 픽셀 단위로 시각화
  6. Compositing 단계: GPU를 이용해 최종 레이어를 합성

이 렌더링 과정이 완료되면 브라우저는 최종적으로 사용자에게 완성된 웹 페이지를 보여줍니다.


9. 브라우저 최적화 전략

실제 브라우저는 성능 최적화를 위해 다양한 기술을 적용합니다.

  • DNS 프리페치(DNS Prefetch): 예상 리소스를 미리 DNS 조회
  • 리소스 캐싱: 자주 사용되는 JS/CSS/이미지 등을 캐시하여 재사용
  • 압축 전송(Gzip, Brotli): 응답 크기를 줄여 로딩 속도 향상
  • 렌더링 블로킹 최소화: JS 로딩 방식 조정, CSS 분할 로딩 등

이러한 전략은 사용자 경험(UX)을 극적으로 향상시키는 핵심 요소입니다.


마무리

www.google.com을 주소창에 입력하는 단순한 동작 뒤에는 다음과 같은 수십 가지 컴포넌트가 숨겨져 있습니다. 먼저 브라우저는 DNS 조회를 통해 도메인을 IP로 변환하고, 그 IP 주소로 TCP 3-Way Handshake를 수행해 연결을 설정합니다. 이어서 필요하다면 TLS 핸드셰이크를 거쳐 암호화 채널을 만든 뒤, HTTP 요청을 전송하고 서버로부터 응답을 받습니다. 수신된 HTML, CSS, JavaScript 코드를 해석해 렌더 트리를 구성하고, 레이아웃·페인트 과정을 거쳐 최종적으로 화면에 페이지가 표시됩니다. 이 모든 과정에서 네트워크 스택, 보안 모듈, 운영체제 커널, 브라우저 엔진 등 다양한 계층의 컴포넌트들이 유기적으로 작동하며 사용자가 원하는 웹사이트를 빠르고 정확하게 보여주기 위해 협력합니다.


참고 자료