웹 브라우저가 HTML, CSS, JavaScript 파일을 화면에 표시하기 위해 수행하는 일련의 과정이다. 이 과정은 웹 페이지가 사용자에게 보이기 시작할 때까지의 모든 단계를 포함하며, 최적화하면 페이지 로드 속도를 향상시킬 수 있다. 아래는 크리티컬 랜더링 패스의 각 단계에 대한 자세한 설명이다.
display: none 속성을 가진 요소나 <head>, <script>와 같은 태그는 제외된다[2][3].크리티컬 랜더링 패스를 최적화하면 웹 페이지의 초기 렌더링 속도를 개선할 수 있다.
최적화 기법:
이러한 과정을 통해 웹 페이지는 사용자에게 더 빠르고 효율적으로 표시될 수 있다.
웹 브라우저에 URL을 입력하고 웹사이트가 화면에 표시되는 과정은 여러 단계로 이루어져 있다.
각 단계는 웹 페이지가 사용자에게 보이기 시작할 때까지의 모든 과정을 포함하며, 아래에 자세히 설명한다.
사용자가 브라우저의 주소창에 URL을 입력하고 Enter 키를 누르면 브라우저는 입력된 URL을 파싱하여 프로토콜, 도메인 이름, 경로 등을 추출합니다[9][11]. 이 과정에서 브라우저는 어떤 프로토콜(예: HTTP, HTTPS)을 사용할지 결정합니다[18].
브라우저는 도메인 이름을 IP 주소로 변환하기 위해 DNS(Domain Name System)를 사용
캐시에 IP 주소가 없으면 ISP의 DNS 서버가 DNS 쿼리를 시작하여 도메인 이름의 IP 주소를 찾는다[9][11].
IP 주소를 얻은 후, 브라우저는 웹 서버와의 TCP 연결을 설정한다. 이 과정은 3-way handshake로 이루어지며, 클라이언트와 서버 간의 데이터 전송 준비를 위한 세션 수립 과정:
TCP 연결이 설정되면, 브라우저는 HTTP 요청(주로 GET 요청)을 서버에 전송한다. 이 요청에는 사용자가 요청한 리소스의 경로와 함께 필요한 헤더 정보가 포함된다[9][10]. 서버는 요청을 처리하고 HTTP 응답을 보낸다. 응답에는 상태 코드와 함께 요청한 리소스(예: HTML 문서)가 포함된다[18].
웹 서버는 요청을 처리하고 HTTP 응답을 보낸다. 응답에는 상태 코드와 함께 요청한 리소스(예: HTML 문서, JSON 데이터 등)가 포함된다[9][10].
브라우저는 수신한 HTML 문서를 파싱하여 DOM 트리를 생성합니다. 이후 CSS 파일을 파싱하여 CSSOM 트리를 만들고, DOM과 CSSOM을 결합하여 렌더 트리를 생성한다:
브라우저는 모든 리소스를 로드하고 렌더링 과정을 완료하여 사용자에게 웹 페이지를 표시한다. 추가적인 리소스(이미지, 폰트 등)가 필요하면 해당 리소스에 대한 추가 HTTP 요청이 발생할 수 있다[18].
이러한 과정을 통해 사용자는 웹 페이지를 볼 수 있게 되며, 각 단계는 페이지 로딩 속도와 사용자 경험에 중요한 영향을 미친다.
Citations:
[1] https://skm1104.tistory.com/79
[2] https://jinyisland.kr/post/crp/
[3] https://velog.io/@yoondengo/Critical-Rendering-Path%EB%9E%80-Rendering-Engine
[4] https://velog.io/@ybj1227/%ED%8C%8C%EC%8B%B1%EA%B3%BC-DOM%ED%8A%B8%EB%A6%AC-%EA%B5%AC%EC%B6%95
[5] https://chicori3.tistory.com/entry/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-DOM
[6] https://porolog.tistory.com/20
[7] https://yceffort.kr/2021/11/jorney-from-tags-to-dom
[8] https://velog.io/@as13ljh/Critical-Render-Path%EB%9E%80
[9] https://systemdata.tistory.com/94
[10] https://253eosam.oopy.io/post/input-url-on-the-browser
[11] https://velog.io/@gyumin_2/%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80-%EB%8F%99%EC%9E%91-%EC%9B%90%EB%A6%AC-%EC%A3%BC%EC%86%8C%EC%B0%BD%EC%97%90-URL-%EC%9E%85%EB%A0%A5-%EC%8B%9C-%EC%9D%BC%EC%96%B4%EB%82%98%EB%8A%94-%EA%B3%BC%EC%A0%95-%EB%B0%B1%EC%97%94%EB%93%9C-%ED%8E%B8
[12] https://1-7171771.tistory.com/134
[13] https://deveric.tistory.com/97
[14] https://aws.amazon.com/ko/blogs/korea/what-happens-when-you-type-a-url-into-your-browser/
[15] https://gunu-dev.tistory.com/entry/%EC%A3%BC%EC%86%8C%EC%B0%BD%EC%97%90-URL%EC%9D%84-%EC%9E%85%EB%A0%A5%ED%95%98%EB%A9%B4-%EB%AC%B4%EC%8A%A8-%EC%9D%BC%EC%9D%B4-%EC%9D%BC%EC%96%B4%EB%82%A0%EA%B9%8C
[16] https://f-lab.kr/insight/web-browser-url-process
[17] https://www.cloudflare.com/ko-kr/learning/dns/what-is-dns/
[18] https://programmer7895.tistory.com/55
[19] https://sudo-minz.tistory.com/184
[20] https://aws.amazon.com/ko/blogs/korea/what-happens-when-you-type-a-url-into-your-browser/
[21] https://kghworks.tistory.com/126
[22] https://lecor.tistory.com/78
[23] https://velog.io/@gyumin_2/%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80-%EB%8F%99%EC%9E%91-%EC%9B%90%EB%A6%AC-%EC%A3%BC%EC%86%8C%EC%B0%BD%EC%97%90-URL-%EC%9E%85%EB%A0%A5-%EC%8B%9C-%EC%9D%BC%EC%96%B4%EB%82%98%EB%8A%94-%EA%B3%BC%EC%A0%95-%EB%B0%B1%EC%97%94%EB%93%9C-%ED%8E%B8
[24] https://hanamon.kr/dns%EB%9E%80-%EB%8F%84%EB%A9%94%EC%9D%B8-%EB%84%A4%EC%9E%84-%EC%8B%9C%EC%8A%A4%ED%85%9C-%EA%B0%9C%EB%85%90%EB%B6%80%ED%84%B0-%EC%9E%91%EB%8F%99-%EB%B0%A9%EC%8B%9D%EA%B9%8C%EC%A7%80/