클라우드 컴퓨팅 수업을 듣고 강사님께서 그런 말을 하셨다.
'ROI(Return On Investment)가 큰일을 해라.'
"그 중에서 본인이 생각하기에는 근본을 잘 알고 있어야한다. 내가 당신에게 만약 https://google.com 을 지금 브라우저에서 친다면, 일어나는 일들을 나한테 설명해라" 라고 한다면, 이 주제에 관해 얼마나 넓게, 얼마나 깊게 설명할 수 있겠는가?"
이 질문을 듣고 여러 답변들을 머릿속에 되뇌어봤지만, "DNS 서버", "네트워크 통신", "프론트, 백엔드 API" 등등 단어들을 떠올렸지만, 매끄럽게 연결지어 설명할 수 있나? 의문을 가지게 되었고, 강의의 소주제였던 Bact To Basic을 문구 삼아, 학교 수업에 배웠던 지식들을, 그리고 구글링을 활용해 저만의 면접 답변을 만들어 보려고 글을 작성하게 되었습니다.
본론으로 돌아와서, 브라우저에서 어떤 일이 일어나는지 개괄적으로 설명해보겠습니다.
1. 브라우저의 해당 주소로 캐시가 남아있는지 체크한다. (1편)
2. DNS로 도메인에 매칭되는 IP 주소를 획득한다. (1편)
3. 브라우저가 TCP/IP 프로토콜을 이용하여 서버에 연결한다. (2편)
4. Firewall 과 Https/SSL을 활용하여 보안과정을 거친다. (2편)
5. Load Balancer를 활용하여, 트랙픽을 분산시킨다. (3편)
6. Web Server에서 다양한 정보들을 사용자에게 전송합니다. (3편)
7. HTML 컨텐츠들을 렌더링한다. (3편)
이렇게 요약할 수 있습니다!
이제 각 과정들을 딥하게 한번 살펴보시죠.
1. 브라우저의 해당 주소로 캐시가 남아있는지 체크한다.
원래라면, 바로 2번의 과정을 수행할 수도 있습니다. 하지만, 우리는 속도가 빠른 것이 굉장히 중요하지 않나요? 따라서 캐시를 사용하려고 하는 것입니다. 즉, 먼저 이전에 방문한 웹 페이지의 캐시를 확인하고 해당 페이지의 로컬 복사본을 사용할 수 있는지 확인하는 것입니다. 이는 웹 페이지 로딩 시간을 크게 단축 시키는데 도움이 됩니다.
브라우저는 이전에 방문한 웹 페이지의 일부 내용을 로컬 저장소에 보관하여 다시 방문할 때 해당 웹 페이지를 빠르게 로드할 수 있도록 도와주는 것입니다.. 이 캐시는 여러 형식의 데이터를 포함할 수 있으며, 주로 이미지, 스타일 시트, JavaScript 파일, 폰트 등을 저장합니다. 이 캐시를 검사함으로써, 서버에서 다운로드하지 않아도 되기에 성능 향상을 얻을 수 있으며, 서버에 반복적인 요청을 보내는 것을 최소화하여 네트워크 부하를 줄일 수도 있습니다.
캐시도 여러 종류에서 찾아볼 수 있습니다.
(1) 브라우저 캐시를 처음으로 살펴봅니다.
(2) 브라우저 캐시에서 정보를 찾을 수 없었다면, OS 캐쉬를 찾아봅니다. systemcall을 통해 그 내용에 접근 가능합니다.
(3) 라우터 캐시를 확인해봅니다. 라우터라고 함은, 둘 이상의 패킷 전환 네트워크 또는 서브네트워크를 연결하는 장치로, 집에서 사용하는 공유기를 생각하면 됩니다.
(4) ISP(Internet Service Provider) 캐시를 마지막으로 확인합니다. 한국에서는 인터넷을 제공하는 회사, 미국에서는 AT&T 같은 회사를 생각하면됩니다. 즉, 인터넷 서비스 제공업체가 사용자의 인터넷 트래픽을 관리하고, 최적화하기 위해 사용하는 캐시 시스템입니다.
2. DNS로 도메인에 매칭되는 IP 주소를 획득한다.
우선 DNS란?
Domain Name System의 약자로 인터넷에서 도메인 이름과 IP 주소 간의 상호 변환을 담당하는 시스템이나 프로토콜을 가르킵니다. 이러한 시스템은 전세계적으로 약속된 규칙을 공유하며, 상위 기관에서 인증된 기관에게 도메인을 생성하거나 IP 주소로 변경할 수 있는 권한을 부여합니다. 즉, 상위기관, 하위기관으로 계층 구조를 가지며 분산 데이터베이스 구조입니다.
DNS 구성요소는 무엇이 있는가?
1. Domain Name Space
- 도메인 네임 스페이스라는 규칙으로 도메인 이름 저장을 분산합니다.
- 최상위 도메인부터 하위 도메인으로 내려가는 계층 구조로 구성되어있습니다.
- example.com에서 example은 하위도메인, .com은 최상위 도메인(TLD-Top Level Domain)이라고 합니다.
- 최상위 도메인은 도메인 이름의 가장 높은 수준을 나타냅니다. ".com", ".org" 같은 상용 TLD와 ".us", ".kr" 같은 국가 코드 TLD가 있습니다.
- 하위 도메인은 최상위 도메인 아래에 위치하며, 도메인 이름을 더 세분화하고 구체화하는데 사용됩니다.
- 즉, 웹 사이트, 이메일 주소, 네트워크 리소스 등을 인터넷 상에서 고유하게 식별하는데 중요한 역할을 합니다.
2. Name Server -> 권한이 존재하는 DNS 서버
- 도메인 이름과 관련된 IP 주소 및 다른 DNS 레코드를 저장하고 관리합니다.
- 네임 서버는 도메인 이름을 IP 주소로 변환하거나 역변환 작업을 처리합니다.
- 네임 서버 역시 계층 구조로 구성되어있습니다.
- 해당 도메인의 DNS 정보를 찾고, IP 주소로 해석했다면, 리졸버에게 전달합니다.
3. Resolver -> 권한이 없는 DNS 서버
- 리졸버는 사용자의 컴퓨터 또는 네트워크 장치에 있는 DNS 클라이언트입니다.
- 사용자의 요청에 따라 네임 서버와 상호작용하며, 결과를 사용자의 컴퓨터로 반환합니다.
DNS 동작 방식
그럼 이제 DNS 동작 방식을 알아봅시다.
전세계에 도메인 수가 너무 많기 때문에 DNS 서버 종류를 계층화해서 단계적으로 처리하기 때문에 복잡할 수 있습니다.
1. 웹 브라우저에 도메인 주소를 입력하면 먼저 PC에 저장된 Local DNS(기지국 DNS 서버)에게 해당 도메인 주소(ex. google.com) 이라는 hostname에 대한 IP 주소를 요청합니다.
- Local DNS(기지국 DNS 서버) 란?
기본적으로 인터넷을 사용하기 위해선 IP를 할당해주는 통신사(KT, SK, LG 등...)에 등록하게 된다.
컴퓨터의 LAN선을 통해 인터넷이 연결되면, 가입했던 각 통신사의 기지국 DNS 서버가 등록되게 된다.
그러니까 KT를 사용하는 집이면 KT DNS가 되고, SK통신사 사용하는 집이면 SK DNS가 자동으로 셋팅 된다.
만약 Local DNS에 접속정보가 캐싱되어 있다면, 해당 DNS 서버로부터 IP주소를 바로 받을 수 있다. (2번부터 7번 과정 생략, 바로 8번으로 직행한다는 의미)
하지만 없다면, 다음과 같은 과정을 거쳐야한다.
2. Local DNS는 이제 "google.com 의 IP 주소"를 찾아내기 위해 다른 DNS 서버들과 통신(DNS 쿼리)을 시작한다. 먼저 Root DNS 서버에게 "www.naver.com 의 IP 주소"를 요청한다.
- Root DNS(루트 네임서버)란?
Root DNS는 인터넷의 도메인 네임 시스템의 루트 존이다.
ICANN이 직접 관리하는 절대 존엄 서버로, TLD DNS 서버 IP들을 저장해두고 안내하는 역할을 한다.
전세계에 961개의 루트 DNS가 운영되고 있다.
3. Root DNS 서버 는 "google.com 의 IP 주소" 를 찾을 수 없어 Local DNS 서버에게 찾을 수 없다고 다른 DNS 서버에게 물어봐" 라고 응답을 한다.
4. 이제 Local DNS 서버는 com 도메인을 관리하는 TLD DNS 서버(최상위 도메인 서버)에 다시 google.com에 대한 IP 주소를 요청한다.
- TLD(Top-Level Domain, 최상위 도메인) DNS Server 란?
TLD는 도메인 등록 기관(Registry)이 관리하는 서버로, 도메인 네임의 가장 마지막 부분을 말한다.
예를들어 웹사이트에서 한번쯤은 봐왔던 .com 이나 co.kr 같은 도메인들을 관리하고 부여하는 서버이다.
Authoritative DNS 서버 주소를 저장해두고 안내하는 역할을 한다.
5. com 도메인을 관리하는 DNS 서버에도 해당 정보가 없으면, Local DNS 서버에게 IP 주소 찾을 수 없음. 다른 DNS 서버에게 물어봐 라고 응답을 한다.
6. 이제 Local DNS 서버는 google.com DNS 서버(Authoritative DNS 서버)에게 다시 "google.com 의 IP 주소" 를 요청한다.
- Authoritative DNS Server 란?
실제 개인 도메인과 IP 주소의 관계가 기록/저장/변경되는 서버. 그래서 권한의 의미인 Authoritative가 붙는다.
일반적으로 도메인/호스팅 업체의 ‘네임서버’를 말하지만, 개인이나 회사 DNS 서버 구축을 한 경우에도 여기에 해당하게 된다.
7. naver.com DNS 서버 에는 "google.com 의 IP 주소" 가 있다.
그래서 Local DNS 서버에게 "google.com에 대한 IP 주소는 xxx.xxx.xxx.xxx" 라는 응답을 한다.
8. 이를 수신한 Local DNS는 google.com 의 IP 주소를 캐싱을 하고 이후 다른 요청이 있을시 응답할 수 있도록 IP 주소 정보를 단말(PC)에 전달해 준다.
이렇게 Local DNS 서버가 여러 DNS 서버에 차례대로 (Root DNS 서버 → TLD DNS 서버(.com) → Authoritative DNS 서버(google.com) 요청하여 그 답을 찾는 과정을 재귀적 쿼리 Recursive Query 라고 부른다.