인터넷이 웹페이지를 부르기 위해 어떻게 작동을 하고 주고 받는지 이해하는 것이 필요하다고 생각해서 정리하게 되었다. 내가 열심히 짠 코드를 이 기계친구들이 어떻게 보여주는지 알고있으면 좋겠다는 생각이 들었다.
클라이언트가 서버에 요청을 보내면 서버는 해당 요청에 대해 응답한다.
해당 동작 순서는 이렇다.
1. 사용자가 www.google.com을 브라우저 주소창에 입력한다.
- 브라우저는 프로토콜인 "http://"을 감지한다.
- 이를 통해 브라우저는 웹 서버에 접속할 것임을 알고, 이에 따라 HTTP요청을 준비한다.
2. 브라우저는 도메인 이름인 'www.google.com'을 IP 주소로 변환하기 위해 DNS 서버에 DNS 조회 요청을 보낸다.
- DNS(Domain Name System Server) : URL들의 이름과 IP주소를 저장하고 있는 데이터베이스로, 웹사이트를 위한 주소록의 느낌이다.
- 숫자로 된 IP 주소 (예: 216.87.928.35) 대신 사용자가 이해하고 입력하기 편하도록 주소를 매핑해주는 역할을 한다.
- DNS는 가장 먼저 브라우저에 캐싱된 URL 정보가 있는지 확인한다. DNS records를 정해진 일정 기간동안 방문한 사이트에 한해 캐싱하고 있기 때문에 가장 처음 이곳에서 검색하게 된다.
- 만약 존재하지 않는다면 OS chache를 확인한다. OS 또한 DNS records 에 관한 정보를 캐싱해 저장해두고 있기 때문이다.
- OS에도 존재하지 않는다면 router 캐시에서 확인하고, 여기도 없다면 ISP 라는 인터넷 엑세스를 제공하는 회사 서비스에서 검색하게 된다.
- 캐시는 네트워크 트레픽을 조절하고 데이터 전송 시간을 줄이기 위해 매우 중요하다.
-요청한 URL이 캐시에 없으면, ISP의 DNS 서버가 www.google.com을 호스팅하고 있는 서버의 IP 주소를 찾기 위해 DNS query를 날린다
3. DNS 서버는 도메인 이름 www.google.com을 알고있는 IP 주소로 변환하여 응답한다.
- 예: 216.87.928.35
- DNS는 웹사이트 도메인 이름의 구조에 기반해서 검색한다. 사진을 보면 각 레벨별로 자신들만의 name server가 있고, root에서 third까지 검색을 진행하면서 계속해서 리다이렉트한다.
- 이 요청들은 패킷을 통해 보내지게 되는데, 이 패킷을은 원하는 DNS 기록을 가진 서버에 도달할 때 까지 클라이언트와 서버를 반복적으로 오간다. 이때 패킷이 loss 되면 request fail error가 발생한다.
4. 브라우저는 받은 IP 주소를 사용하여 해당 서버에 TCP/IP connection을 수립한다.
- TCP/IP (Transmission Control Protocol / Internet Protocol)
- 서버와 클라이언트 간에 안정적인 통신을 위한 연결을 설정함
- 즉, 두개의 컴퓨터 또는 네트워크 장치 간에 생성되는 가상적인 연결로, 데이터를 안정적으로 교환하겠다는 프코토콜이며 이를 따른다는 것은 IP주소 체계를 따르며 송신자와 수신자의 논리적 연결을 생성하고 신뢰성을 유지하겠다는 의미이다.
5. 브라우저가 웹 서버에 HTTP 요청을 한다.
- 브라우저는 HTTP 요청 메시지를 생성한다.
- 요청 메시지는 크게 두 부분으로 구성된다 :Headers, Body
- Headers: 메타 데이터, HTTP 메소드, 경로, 호스트(도메인 이름이나 IP주소), 클라이언트 정보
- Body : 요청 본문(POST일 때), 검색어나 폼 데이터등이 담길 수 있다.
- 요청 메시지 예시
GET /search?q=apple HTTP/1.1
Host: www.google.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
6. 서버가 요청을 처리하고 response를 생성해 HTTP response를 보낸다.
- 서버는 요청을 받고 해당 동작을 수행한다. 검색 요청이라면 검색어를 처리하고 결과를 찾아낸다.
- 처리된 결과를 HTTP response 메시지에 담아 브라우저로 반환한다. (TCP/IP 연결을 통해)
7. 브라우저가 HTML content를 보여준다.
- 브라우저는 받은 응답 메시지를 해석하고, 사용자에게 표시하기 위해 HTML, CSS, JavaScript 와 같은 웹 페이지 요소를 처리한다.
- 받은 응답을 화면에 렌더링해서 사용자에게 보여준다.
Reference
'Computer Programming > CS' 카테고리의 다른 글
CPU와 메모리 그리고 M1, M2 chip (0) | 2023.07.07 |
---|---|
인증/인가 (세션, 토큰, JWT) (0) | 2023.07.05 |
페이지 렌더링 방식 : SSR vs CSR vs SSG [+Next.js] (3) | 2023.06.23 |
자바스크립트의 클로저 동작 방식 (렉시컬환경과 렉시컬 스코프) (0) | 2023.06.21 |
[DB] SQL 과 NoSQL의 차이 (MySQL vs MongoDB) (0) | 2023.05.10 |