웹에서 요청과 응답의 전반적인 과정
Intro
월드 와이드 웹(World Wide Web)은 인터넷에 연결된 사용자들이 서로의 정보를 공유할 수 있는 공간이라고 한다.
브라우저는 url로 해당 하는 서버에서 네트워크를 통해 html문서, 필요한 파일들을 받아와 내 화면에서 보여주는 역활을 한다.
그리고 프론트엔드 개발자의 역활은 어떤 기술을 사용하든 결국 서버에서 제공해줄 html
,css
,js
를 작성하는 것이다.
우리가 작성한 파일이 사용자에게 가기까지의 긴 여정을 정리해보자.
IP, URL, Domain
프론트엔드 기술면접 예상 질문에 단골인 구글을 검색하면 웹은 무슨일을 할까의 프로세스이다.
사용자에게 사이트를 보여주려면 브라우저는 사이트를 호스팅하는 서버를 찾아야 한다. 인터넷의 각 디바이스들은 IP address
라는 고유한 주소를 가지는데, 서버를 찾는다는 건 해당 서버의 ip주소를 찾는다는 뜻이다.
IPv4: 4개의 8비트(0 ~ 255)숫자로 구성, ex)192.0.2.1 최대 제공가능: 2 ** 32(대략 43억)
IPv6: 8개의 16비트를 16진수로 구성,ex)2001:0DB8:0000:0000:0000:0000:1428:57ab 최대 제공가능:2 ** 128(거의 무제한)
하지만 우리는 이런 IP 주소
를 입력하지 않는다. URL(Uniform Resource Locator)
을 입력한다. 우리가 일반적으로 생각하는 인터넷 주소이다. 그리고 URL은 도메인을 포함한다.
아래의 URL을 보자. 주소창에 입력하면 test를 검색한 구글 검색화면이 나올 것이다.
https://www.google.com:443/search?q=test
- https는 통신 프로토콜
- www.google.com는 domain
- :443 port번호(프로토콜 기본포트는 생략가능 - http:80,https:443)
- /search는 path
- ?q=test는 쿼리 스트링
- 참고로 #으로 시작되는 fragment도 있다.
- 특정페이지의 특정위치로 스크롤이동없이 바로 이동
domain
은 서브도메인(subdomain)
, 이름(name)
, 최상위 도메인(TLD)
으로 나뉜다.
www.google.com
은 도메인이다.
- "www"는 서브도메인 | 차상위도메인
- 일반적으로 "world wide web"의 약자
- 도메인 앞에 확장자로 서로 다른 서버를 가르킬 수 있음
ex)_drive.google.com
- "google"은 도메인의 이름 - 웹사이트를 운영하는 주체
- "com"은 최상위 도메인
- 다양한 유형이 있음
.com: company
,.net: network
...
- 다양한 유형이 있음
본론으로 돌아와서 URL은 도메인을 포함하고, 도메인을 알면 DNS(domain name system)
으로 IP 주소를 알 수 있다. 그래서 URL을 입력하면 우리가 원하는 자원에 접근이 가능한 것이다.
DNS(domain name system)
간단하게 DNS는 IP
와 domain
을 매핑한 데이터베이스로 우리가 입력한 URL에 포함된 domain이 DNS 서버를 통해 IP로 반환 된다.
순서는 다음과 같다.
- 브라우저 캐시 확인 -> 최근에 방문한 사이트라면 남아 있을 수 있음
- 호스트 파일 확인
- 운영 체제가 도메인 이름을 ip 주소에 매핑할 때 사용하는 컴퓨 터 파일
- 맥의 경우 /private/etc/hosts 경로에 존재
- 1,2번 과정(내부)에서 찾지 못했다면 외부의 DNS resolver(DNS recursor)에 요청(쿼리)
- 외부 DNS서버들에게 재귀적인 요청을 보내지만 자체 캐시도 가지고 있음
- ISP(인터넷 서비스 제공자)나 기업의 네트워크에서 호스팅
- DNS resolver 캐시에 없다면, 요청한 도메인 이름에 대한 IP 주소를 찾기 위해 DNS 계층 구조를 따라 계층적으로 탐색
- root name server -> 최상위 도메인(TLD) 서버 -> 도메인 레지스트리 서버 -> 도메인의 네임서버
- DNS resolver가 IP 주소를 웹 브라우저로 반환 및 캐싱(Time to Live(TTL))
위의 과정을 거쳐 검색할 도메인의 IP주소를 알게 되었다! 그 다음은?
Network
이제 IP주소를 알고 있으니, 해당서버에 요청을 보내 원하는 응답을 받을 수 있을까?
요청을 보낸다는 건 내가 작성한 내용(로컬)이 외부로 전달된다는 이야기다. 이것이 어떻게 가능할까?
당연한 말이지만 일단 인터넷에 연결이 되어있어야 한다. 외부 DNS로 IP를 가져올 때도, 서버에 데이터를 요청할 때도 랜선이든 wifi든 일단 인터넷 연결이 되어있어야 가능하다. 이에 대해 알아보자.
랜선이라는 단어는 다들 알것이다. 랜선을 안꽂으면 온라인 게임을 할 수 없었으니까 ㅎㅎ... 쿠팡에서 가져온 랜선(UTP 케이블) 사진이다. 랜선을 컴퓨터에 꽂아주면 하드웨어의 유선랜카드와 연결 된다. 와이파이의 경우 무선랜카드를 사용한다. 랜카드는 NIC(Network Interface Controller), 네트워크 어댑터라고도 한다.
IP 주소는 네트워크 상의 논리적인 주소이고, 통신을 위해서는 실제 장비(랜카드)의 MAC 주소(Media Access Control)가 필요하기 때문이다.
잠깐 네트워크 간 통신이 일어나는 과정의 모델에 대해 보고 가자.
먼저 발표된 이론적인 모델 OSI 7계층 모델
과 현실에서 동작하는 TCP/IP 4계층 모델
이 있다.
TCP/IP 4계층 모델
TCP/IP 4계층 모델
로 4개의 계층으로 나뉜다.
- L4: Application Layer
- 응용 프로그램이 이 계층에서 동작 (HTTP, FTP, SMTP, DNS 등)
- 데이터 단위 : 데이터(Data) / 메세지(Message)
- L3: Transport Layer
- 프로세스 간 신뢰성 있는 데이터 전송
- 대표적인 프로토콜 TCP, UDP
- 데이터 단위 : 세그먼트(Segment)
- L2: Internet(network) Layer
- 호스트 간 논리적 데이터 전송
- 대표적인 프로토콜 IP, ARP(IP address to Mac address), RARP(Mac address to IP address)
- 데이터 단위 : 패킷(Packet)
- L1: Network Access Layer
- 물리적 네트워크를 통한 데이터 전송
- 대표 프로토콜: 이더넷, WiFi
- 데이터 단위 : 프레임(Frame)
TCP/IP 요청을 보낸다는 것은 다음의 프로세스를 따른다.