브라우저 주소창에 URL을 입력하면 벌어지는 일을 보기 전에 먼저 URL, URN, 그리고 URI에 대해 보겠습니다.
URL은 URI의 가장 흔한 형태로, 리소스의 위치와 접근 방법을 함께 지정합니다. 웹 브라우저에 흔히 입력하는 주소가 바로 URL입니다.
스킴(Scheme): 사용할 프로토콜(http, https, ftp 등)
권한 정보(Authority):
경로(Path): 서버 내 리소스의 경로 (/user/profile 등)
쿼리(Query): 리소스에 전달할 매개변수 (?id=123&page=2 등)
프래그먼트(Fragment): 문서 내 특정 부분을 가리키는 식별자 (#section1 등)
URN은 리소스의 이름을 지정하는 URI의 한 형태로, 위치에 독립적인 식별자입니다.
예: urn:isbn:0451450523 (ISBN을 통한 책 식별)
URI는 인터넷 상의 리소스를 고유하게 식별하기 위한 통합 자원 식별자입니다. 즉, 인터넷에 있는 자원을 구분하기 위한 '이름'이라고 생각할 수 있습니다.
실제로 웹에서는 URL이 가장 널리 사용되며, 일상적으로 "URL"과 "URI"는 혼용되어 사용되기도 합니다.
브라우저는 입력된 URL을 분석하여 프로토콜(http/https), 도메인, 경로 등의 구성 요소로 분리합니다.
도메인 이름을 해당 웹 서버의 IP 주소로 변환합니다. 이 과정은 다음 순서로 진행됩니다.
- 브라우저 캐시 -> OS 캐시 -> 라우터 캐시 -> ISP DNS 서버 순으로 확인
위 캐시들에서 찾지 못하면, 재귀적 DNS 쿼리를 통해 루트 DNS 서버부터 시작하여 IP 주소를 찾습니다.
서버의 IP 주소를 찾았다면, 브라우저는 TCP 3-way handshake 과정을 통해 서버와 연결을 수립합니다.
이 과정을 통해 신뢰성 있는 통신 채널이 구축됩니다.
HTTPS URL인 경우, 암호화된 연결을 위한 TLS 핸드셰이크가 추가로 진행됩니다(인증서 확인 및 키 교환).
연결이 설정되면, 브라우저는 서버에 HTTP 요청을 전송합니다. 이 요청에는 HTTP 메서드(GET, POST), 헤더(Accept, User-Agent), 쿠키 등이 포함됩니다.
서버는 요청을 받아 처리합니다. 이는 단순한 정적 파일 제공일 수도 있고, 데이터베이스 조회, 애플리케이션 로직 실행 등을 포함한 복잡한 처리일 수도 있습니다.
서버가 처리를 완료하면, 결과를 HTTP 응답으로 브라우저에 전송합니다. 이 응답에는 상태코드, 헤더, 그리고 요청한 콘텐츠가 포함됩니다.
브라우저는 받은 응답을 처리하여 사용자에게 보여줍니다. HTML 문서의 경우 다음 과정을 거칩니다.
HTML 파싱
DOM 트리 구성
CSS 파싱 및 CSSOM 구성
DOM과 CSSOM을 결합한 렌더 트리 구성
레이아웃 계산(각 요소의 크기와 위치)
화면에 페인팅
추가 리소스 로딩
HTML 내에 포함된 이미지, CSS, JavaScript 등의 추가 리소스에 대해서도 위 과정(1~8)이 반복됩니다.
페이지 내의 JavaScript 코드가 실행되어 DOM 조작, 이벤트 처리, AJAX 요청 등이 이루어집니다.