URL 입력부터 화면 렌더링까지
우리가 브라우저에 URL을 입력하고 엔터를 누르는 순간부터 웹페이지가 화면에 표시되기까지, 눈에 보이지 않는 곳에서 수많은 단계가 연쇄적으로 실행된다. 이 전체 흐름을 이해하면 웹 개발과 서버 운영의 큰 그림이 잡힌다.
1단계 DNS 조회
브라우저는 입력된 도메인 이름을 IP 주소로 변환하기 위해 DNS 질의를 수행한다. 로컬 캐시, OS 캐시, 리졸버 캐시를 순서대로 확인하고, 캐시 미스가 나면 루트 서버부터 재귀적으로 질의하여 최종 IP 주소를 획득한다. 이 과정은 일반적으로 수십 밀리초 내에 완료된다.
2단계 TCP 연결 수립
IP 주소를 확보하면 브라우저는 해당 서버의 포트(HTTP 80, HTTPS 443)로 TCP 3-Way Handshake를 수행한다. SYN, SYN-ACK, ACK 패킷을 교환하여 양방향 통신 채널을 확보한다. HTTPS라면 이 위에 TLS 핸드셰이크가 추가로 진행되어 암호화 키를 협상하고 보안 채널을 수립한다. 3단계 HTTP 요청 전송 TCP 연결이 완료되면 브라우저는 HTTP 요청 메시지를 서버로 전송한다. 요청 메시지에는 메서드(GET, POST 등), 요청 경로, Host 헤더, User-Agent, Accept 헤더, 쿠키 등이 포함된다. GET 요청이라면 URL의 경로에 해당하는 리소스를 달라는 의미이고, POST라면 폼 데이터나 JSON 바디를 함께 전달한다. 4단계 서버 측 처리 웹서버(Nginx, Apache)가 요청을 수신한다. 정적 파일 요청이라면 웹서버가 파일 시스템에서 해당 파일을 찾아 바로 응답한다. 동적 요청이라면 리버스 프록시를 통해 WAS(Tomcat, Gunicorn, Express)로 전달된다. WAS는 라우팅 규칙에 따라 적절한 핸들러 함수를 실행하고, 필요한 경우 데이터베이스에 쿼리를 날려 데이터를 조회하거나 수정한다. 비즈니스 로직 처리가 끝나면 HTML 문서 또는 JSON 데이터를 생성하여 HTTP 응답 메시지에 담아 반환한다. 5단계 HTTP 응답과 렌더링 서버의 응답 메시지에는 상태 코드(200 OK, 404 Not Found, 500 Internal Server Error 등), 응답 헤더(Content-Type, Content-Length, Cache-Control 등), 그리고 응답 바디(HTML, JSON, 이미지 바이너리 등)가 포함된다. 브라우저는 HTML을 파싱하여 DOM 트리를 생성하고, CSS를 파싱하여 CSSOM을 구성한 뒤, 둘을 결합한 렌더 트리를 기반으로 레이아웃 계산과 페인팅을 수행한다. HTML 파싱 중 외부 리소스(CSS, JS, 이미지, 폰트)를 발견하면 각각에 대해 추가 HTTP 요청을 보낸다. 캐싱이 속도를 결정한다 이 전체 과정에서 성능을 좌우하는 핵심은 캐싱이다. 브라우저 캐시에 이전에 받은 리소스가 남아 있으면 서버에 요청조차 보내지 않는다. CDN(Content Delivery Network)은 전 세계 엣지 서버에 정적 콘텐츠를 미리 복제해두어 사용자와 물리적으로 가까운 서버에서 응답한다. 서버 측에서도 Redis 같은 인메모리 캐시에 자주 조회되는 데이터를 올려두면 데이터베이스 부하를 줄이고 응답 시간을 단축할 수 있다. #웹서버 #HTTP #DNS #TCP #브라우저렌더링 #웹동작원리 #CDN #캐싱 #리버스프록시 #웹개발기초
답글 남기기