CS 공부를 하며 항상 나오는 문제는
주소창에 www.naver.com을 입력하면 무슨 일이 일어나나요 ?
였습니다.
그래서 이번 포스팅에서는 해당 질문에 대해 윈도우 운영체제 기준으로 자세히 답해보도록 하겠습니다.
웹 브라우저에 www.naver.com 을 입력하면 일어나는 일
IP 주소 가져오기
우리는 보통 웹 브라우저에서 검색을 하면 주소창에 URL(보통 도메인 이름)의 형태로 작성을 합니다.
URI? URL?
URI는 Uniform Resource Idenfier의 약자로, 통합 자원 식별자라고도 합니다.
✅ Uniform은 리소스를 식별하는 통일된 방식을 말합니다.
✅ Resource는 URI로 식별 가능한 모든 종류의 자원(웹 브라우저 파일 및 그 외의 리소스 포함)을 지칭합니다
✅ Identifier는 다른 항목과 구분하기 위해 필요한 정보입니다.
즉, URI는 인터넷 상의 리소스 자원 자체를 식별하는 고유한 문자열 시퀀스입니다.
🔍 예를 들어 soyeonnnb.tistory.com은 URI 입니다. 리소스의 이름만 나타내기 때문이죠.
URL은 Uniform Resource Locator의 약자로, 네트워크 상에서 통합 자원(리소스)의 위치를 나타내기 위한 규약입니다.
✅ 웹사이트 주소 + 컴퓨터 네트워크 상의 자원 이라고 할 수 있습니다.
쉽게 말하면, 특정 웹페이지 주소에 접속하기 위해서는 웹 사이트의 주소 뿐 아니라 프로토콜(http, https, sftp, smp 등) 을 함께 알아야 접속이 가능한데, 이들을 모두 나타내는 것이 URL 입니다.
🔍 https://soyeonnnb.tistory.com은 URL 입니다. 이름과 더불어 어떻게 도달할 수 있는지 위치까지 나타내기 때문이죠.(https 프로토콜 포함)
따라서, URI = 식별자, URL = 식별자 + 위치라고 할 수 있습니다.
하지만 우리는 단순히 www.naver.com의 형식으로, IP 주소를 알지 못합니다.
따라서 DNS에게 질의를 하여 IP 주소를 가져오게 됩니다.
하지만 모든 주소에 대해서 DNS 서버에 질의를 날리는 것은 아닙니다.
다음과 같은 순서에 따라 IP 주소를 갖게 됩니다.
1️⃣ 로컬 캐시 확인(컴퓨터 내 hosts 파일 확인)
브라우저는 일정 기간 동안의 DNS 기록들을 저장하고 있습니다. DNS 쿼리가 이곳에서 가장 먼저 실행됩니다.
윈도우 기준으로 C:\Windows\System32\drivers\etc 에 저장되어 있으며, 제 hosts 파일의 경우 다음과 같이 입력되어 있습니다.
# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
# 102.54.94.97 rhino.acme.com # source server
# 38.25.63.10 x.acme.com # x client host
# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost
2️⃣ DNS 캐시 확인
만약 hosts 파일에 정보가 없으면, 컴퓨터에 있는 local DNS cache에 ip 주소가 있는지 확인합니다.
PC에서 DNS 서버에 질의를 날리게 되면 이를 캐싱해두게 됩니다. 따라서 이전에 질의를 했던 기록이 있다면 이를 활용하게 됩니다.
Local DNS Server는 ip를 찾기 위해 가장 먼저 찾게되는 곳입니다.
- Local DNS 서버에 내가 찾는 도메인의 ip 주소가 캐싱되어 있다면 해당 값 반환
- Local DNS 서버에 ip 주소가 없다면 Root DNS 서버에 질의
3️⃣ DNS 서버에 질의
DNS 쿼리를 보내고 응답받는 과정을 알기 위해서는 도메인의 구조를 먼저 알아야 합니다.
어떤 DNS 서버에 도메인네임에 대한 쿼리를 날렸을 때, 한 번에 ip 주소를 돌려줄 수 있는 네임서버는 없습니다.
각각의 레벨을 담당하는 네임서버가 있으며, 각 서버는 바로 하위 레벨 도메인에 대한 네임서버 주소 밖에 알지 못합니다.
예를 들어, Root Server 는 Top-Level 의 정보 밖에 모르고, Top-Level 서버는 Second-Level 의 정보 밖에 모릅니다.
따라서, DNS 요청이 들어올 경우 Root 부터 시작해서 단계적으로 ip 주소를 찾아가게 됩니다.
이렇게 여러 네임서버를 거쳐 ip 주소를 찾는 과정을 Recursive Query 라고 합니다.
✅ 항상 PC에서 직접적으로 DNS에 질의를 하는 것이 아니라, PC 설정에 따라 만약 DNS가 공유기로 설정되어 있다면, 공유기의 DNS forwarding 기술을 통해 공유기에서 DNS 서버에 질의를 하여 그 응답을 전해주는 식으로도 작동 가능합니다.
이러한 방식을 통해 브라우저에서는 IP 주소를 획득하게 됩니다.
GSLB
구글이나 네이버와 같이 사람들이 많이 사용하는 사이트들은 GSLB를 하고 있습니다. 그렇다면 GSLB가 무엇일까요 ?
GSLB는 Global Server Load Balancing의 약자로, 글로벌 특정 지역에 트래픽이 증가할 경우 DNS 기반으로 인접 지역으로 네트워크 트래픽을 자동 분산합니다. 특정 서버에 장애가 발생할 경우에는 네트워크 트래픽을 정상 리소스로 로드 밸런싱함으로써 서비스가 안정적으로 지속될 수 있도록 합니다.
쉽게 말해 여러개의 서버 중에서 제 IP로 접속했을 때 가장 좋은 IP 주소를 리턴해주는 기술입니다.
GSLB 개념은 다음 포스팅을 참고해주세요 🥰
https://soyeonnnb.tistory.com/114
CDN
CDN 서비스란, Content Delivery Network 서비스의 약자로, 지리적으로 분산된 여러개의 서버입니다.
주로 콘텐츠의 전송 속도를 최적화하고 사용자에게 빠른 응답시간을 제공하는 데에 중점을 둡니다. 또한 정적 및 동적 콘텐츠를 사용자에게 가까운 위치에 캐싱하여 전송 시간을 최소화합니다.
특징
콘텐츠 캐싱: CDN은 주로 정적 콘텐츠를 여러 서버에 캐싱하여 사용자에게 가까운 서버에서 콘텐츠를 제공합니다.
로드 밸런싱: CDN도 로드 밸런싱을 수행하지만, 주된 목적은 사용자에게 가까운 서버에서 빠르게 콘텐츠를 제공하는 것입니다.
보안 및 DDoS 방어: 일부 CDN은 콘텐츠 전송 과정에서 보안 및 DDoS 방어 기능을 제공합니다.
TCP 연결
이제, 네이버의 IP 주소를 얻었으니 연결을 해보도록 하겠습니다.
연결을 위해서는 TCP 연결을 해야합니다. 왜냐하면 브라우저를 통해 HTTP 연결을 해야하는데, HTTP 는 TCP 연결을 기반으로 하기 때문입니다.
이러한 연결은 3-way handshake를 통해 이루어집니다.
HTTP Request/Response
TCP 연결을 한 후에 HTTP 요청을 보내고, 그에 따른 HTTP 응답을 받습니다. 이 과정에서 서버가 요청을 받아 데이터를 검색하고, 해당 요청에 맞는 비지니스 로직을 처리한 후, HTTP 응답 메세지를 생성하여 TCP 프로토콜을 통해 인터넷을 거쳐 전송하게 됩니다.
도착한 HTTP 응답 메세지는 HTTP 프로토콜을 이용하여 웹 페이지 데이터로 변환됩니다. 이렇게 변환된 웹 페이지 데이터는 웹 브라우저에 의해 출력되어 사용자가 볼 수 있게 됩니다.
참고
https://www.youtube.com/watch?v=GAyZ_QgYYYo&t=1157s
https://www.elancer.co.kr/blog/view?seq=74
https://www.joinc.co.kr/w/man/12/GSLB
'CS 정리 > 개발 상식' 카테고리의 다른 글
[DB] 기본키, 후보키, 슈퍼키, 대체키, 외래키 (1) | 2024.05.27 |
---|---|
[CS] DNS가 무엇인가요 ? (0) | 2024.05.24 |
[CS] GSLB란? (0) | 2024.05.21 |
[CS] IP 주소의 개념과 기능 (0) | 2024.05.20 |
[CS] 소켓 통신이란 ? (0) | 2024.05.18 |