naver.com에서 새로고침하면 DNS조회부터 다시 시작하나요?

요들레이후·2025년 3월 11일
2

FE study

목록 보기
5/5
post-thumbnail

면접관 : naver.com.com을 주소창에 쳤을 때 화면에 나오기까지 아는대로 다 말해주세요.
나 : (이건 내가 ㄹㅇ 달달 외웠다)

  1. 브라우저 주소창에 ‘naver.com’을 입력하고 엔터 키를 누르면, 브라우저는 URL에서 ‘naver.com’이라는 호스트 이름을 추출합니다.

  2. 브라우저는 처음 방문하는 도메인에 대해 로컬 캐시를 확인한 후 DNS(Domain Name System)서버에 ‘naver.com’호스트 이름에 대한 IP주소를 요청합니다. DNS서버는 이 요청에 대해 ‘naver.com’도메인 이름에 대한 IP주소를 포함하는 DNS 레코드를 반환합니다.

  3. 브라우저는 IP주소를 사용하여 HTTP요청을 해당 서버에 보냅니다. 이 요청은 TCP/IP 프로토콜을 사용하여 전송됩니다.

  4. 서버는 요청을 받고, 요청에 대한 응답으로 HTML, CSS, JavaScript및 기타 웹 페이지 자산을 포함하는 HTTP응답을 생성합니다.

  5. 서버가 생성한 HTTP응답은 TCP/IP 프로토콜을 사용하여 브라우저로 전송됩니다.

  6. 브라우저는 HTTP 응답을 받고, 이를 해석하여 웹 페이지를 렌더링 합니다. 이 과정에는 HTML문서파싱, CSS스타일 적용, Javascript 코드 실행, 이미지 및 기타 자산 로딩 등이 포함됩니다.

(이전까진 브라우저 동작 관련 여기서부턴 랜더링 과정)

  1. Resource Donwnloading : 브라우저는 서버로부터 HTML, CSS, JavaScript와 같은 웹사이트에 필요한 리소스를 다운 받습니다.

  2. HTML DOM Tree 구축 : 렌더링 엔진은 전달받은 HTML 문서를 파싱(parsing)해서 DOM(Document Object Model, 문서 객체 모델) 트리 형성합니다.

  3. CSSOM Tree 구축 : 이어서 다운 받은 외부 CSS 파일과 함께 포함된 스타일 요소를 파싱(parsing)해 CSSOM Tree 형성합니다.

  4. Render Tree 구축 : DOM트리와 CSSOM 트리를 병합하여 렌더트리를 생성합니다. 렌더트리는 시각적 요소를 포함하는 트리 구조입니다. 렌더트리에서 시각적으로 표현되지 않는 요소(display: none)는 제거됩니다.

  5. Rayout : 브라우저는 렌더 트리의 각 노드에 대해 레이아웃을 계산합니다. 이 단계에서 각 요소의 위치와 크기가 결정됩니다.

  6. Paint : 레이아웃 과정이 끝나면 요소에 스타일을 적용하는 paint과정을 거칩니다. 계산된 스타일 정보를 바탕으로 각 요소의 스타일이 적용되고 브라우저는 렌더트리의 노드를 순회하며 각 요소를 그립니다.

  7. 마지막으로 브라우저는 다양한 레이어를 합성하여 최종적인 페이지를 생성하고 생성된 페이지를 사용자에게 표시합니다.

면접관 : 그럼 google.com에서 새로고침하면 1번 과정부터 다시 진행하나요?
나 : (...) 서버에서 캐시.. 하지 않을까요..? (속으로 내 자신에게 백번 천번 욕했다고 한다..)

DNS 캐싱

  • 최초 조회 후 얻은 DNS 응답(IP 주소)은 캐시(cache)에 저장되어 일정 시간 유지됩니다.

  • DNS 레코드에는 TTL(Time to Live) 값이 있어 얼마나 오래 캐시할지를 지정하는데, 브라우저나 OS는 이 TTL 기간 동안 해당 도메인 이름에 대해 재조회 없이 캐시된 IP를 재사용합니다.

  • 예를 들어 naver.com의 DNS TTL이 5분이라면, 최근에 조회한 지 5분 이내에 사용자가 새로고침을 하면 DNS 재질의 없이 기존에 알아둔 IP로 바로 접속합니다.

DNS 캐시 계층

1. 애플리케이션 캐시 (chrome, firefox등은 내부 DNS 캐시를 운영함)
: 웹 브라우저가 자체적으로 DNS캐시를 유지합니다. 브라우저 자체가 캐시를 가지고 있는 경우 우선 참고하고, 캐시가 없거나 만료되었으면 OS레벨 캐시를 조회합니다.

2. 운영체제 캐시 (예: Windows의 DNS Client 서비스, macOS의 mDNSResponder 등)
: 로컬 시스템의 DNS 해석기가 DNS조회 결과를 캐싱합니다. 해당 도메인/IP 기록이 남아있다면 즉시 반환하고, OS캐시에도 없으면 최종적으로 네트워크상의 DNS재귀 서버까지 질의가 진행됩니다.

3. 네트워크상의 DNS 재귀 서버(예: 사용자 ISP의 DNS 혹은 8.8.8.8과 같은 공용 DNS)
: DNS 서버로부터 받은 응답을 TTL 동안 저장하고 있기 때문에, 자주 조회되는 도메인의 경우 재귀 서버 캐시에 이미 존재하여 권한 서버까지 가지 않아도 되는 경우가 많습니다.

즉, 사용자가 새로고침을 눌렀을 때 반드시 매번 DNS 루트부터 조회하는 것이 아니라, 대부분의 경우는 브라우저/OS/재귀서버 어딘가의 캐시에 히트하여 응답 시간이 매우 짧습니다. (참고로 TTL이 만료되어 캐시에서 제거되면, 다음 새로고침 시에는 다시 DNS 요청이 발생하여 최신 IP를 가져오게 됩니다.)

CDN(Content Delivery Network)

  • 콘텐츠 전송 네트워크로, 웹사이트나 애플리케이션의 콘텐츠(HTML, CSS, 이미지, 비디오 등)를 사용자가 있는 지역 가까운 서버에서 빠르게 제공하기 위한 분산 네트워크입니다.

  • CDN의 주요 목적은 콘텐츠를 전 세계에 분산된 서버(엣지 서버)를 통해 제공하여, 로드 시간을 단축하고 서버 부하를 줄이며 네트워크 지연을 최소화합니다.

  • Cloudflare나 Akamai와 같은 CDN을 쓰는 경우, 전세계 사용자들에게 짧은 TTL로 NS레코드를 전파하더라도, 각 지역의 재귀 DNS서버들이 캐시하여 일정 기간 유지하므로 권한 DNS에 부담을 줄입니다.

  • 또한 사용자 단에서도, 한번 연결된 CDN 엣지 서버의 IP는 TTL 동안 유지되므로 같은 엣지를 통해 통신이 계속 이루어져 양쪽 모두 효율적입니다.

  • naver, google과 같은 대형 웹사이트는 일반적으로 자체 CDN또는 전용 로드밸런싱 DNS를 사용해 다수의 서버로 트래픽을 분산합니다. 예를 들어 전세계/전국에 분산된 서버 풀 중 최적의 서버 IP를 반환하도록 DNS를 구성하고, TTL을 비교적 짧게 설정하는 전략을 취할 수 있습니다.

다시 돌아가 질문에 답변을 하면,

브라우저 새로고침시 DNS동작은 캐시의 영향으로 결정됩니다.

OS 및 브라우저 레벨의 DNS 캐시에 유효한 기록이 있다면 즉시 사용하고, 없다면 재귀 DNS 서버에 질의가 발생합니다.

이 모든 계층에서 TTL이 중요하게 활용되며, 적절한 TTL 설정은 사용자가 연속적으로 페이지를 요청할 때 매번 DNS 조회 지연이 발생하지 않도록 하는 핵심입니다.

네트워크 측면에서 캐싱 덕분에 naver.com을 자주 새로고침해도 매번 DNS 서버에 부하를 주지는 않으며, CDN 구조 하에서 사용자들은 대부분 가장 가까운 캐시/엣지로 연결되어 빠르게 콘텐츠를 전달받게 됩니다.

전 개똥벌레 감자라서요, 추가적인 지식이나 틀린 부분 있으면 댓글로 지적해주시면 감사하겠습니다요들

profile
💩 잘㈛는건 ㅇr닌데, 포ブl㈛ズl 않을꺼○F. ㄴr는 별로 코딩을 잘㈛ズl는 않ズl口ざ, ㄱH발ㅈr를 포ブl㈛ズl 않을꺼○F. ュ 정도로 포ブl를 먼저 んı작ㅎŁ⊂ト면, ㅇr무것도 도전㈛ヱ 싶ズl 않을 꺼○F. 💩

0개의 댓글