[웹 페이지 요청에 대한 동작방식]
브라우저에 입력된 URL을 DNS 서버에서 검색해서 domain name에 해당하는 IP 주소를 찾아 사용자가 입력한 URL 정보와 함께 전달한다.
IP 주소는 HTTP 프로토콜을 사용해 웹 페이지 사본을 보내달라는 HTTP 요청 메시지를 생성하고 이 메시지는 TCP 프로토콜을 이용해서 인터넷을 거쳐 해당 IP 주소의 컴퓨터로 전송된다.
이렇게 도착한 HTTP 요청 메시지는 HTTP 프로토콜을 사용해 웹 페이지 URL 정보로 변환된다.
웹 서버는 도착한 웹 페이지 URL 정보에 해당하는 데이터를 검색한다.
검색된 웹 페이지 데이터는 HTTP 프로토콜을 이용해 HTTP 응답 메시지를 만들어 TCP 프로토콜을 이용해 인터넷을 거쳐 요청 컴퓨터로 전송된다.
도착한 HTTP 응답 메시지는 HTTP 프로토콜을 사용하여 웹 페이지 데이터로 변환되어 웹 브라우저에 의해 출력된다.
[DNS]
DNS(Domain Name System Servers)는 웹 사이트를 위한 주소록과 같다.
IP Checker와 같은 도구에 도메인을 입력해 IP 주소를 찾아 웹 사이트 주소에 쉽게 접속할 수 있게 매핑을 해주는 역할을 합니다. DNS의 가장 큰 목적은 사람들에게 편리함을 주기 위해서이다.
우선 도메인 네임을 브라우저에 검색하면 브라우저는 DNS 기록을 4가지의 캐시에서 확인한다.
- 가장 먼저 브라우저 캐시를 확인한다.
브라우저는 일정기간 동안 DNS 기록들을 저장하고 있으며 DNS query가 이 곳에서 가장 먼저 실행된다. - 브라우저 캐시에서 찾지 못했다면 systemcall을 통해서 OS 캐시에 저장하고 있는 DNS 기록들을 확인한다..
- DNS 캐시에서 찾지 못했다면 router와 통신을 해서 router 캐시를 확인한다.
- 마지막으로 ISP 캐시를 확인한다. (ISP : DNS 서버를 구축)
많은 곳에 캐시들을 저장하는 이유는 캐시는 네트워크 트래픽을 조절하고 데이터 전송 시간을 줄이기 위해 매우 중요하다.
요청한 URL이 캐시에 없다면?
ISP의 DNS 서버가 www.google.com을 호스팅하고 있는 서버의 IP 주소를 찾기 위해 DNS query를 날린다.
접속을 위해서는 IP 주소를 반드시 알아야하며 DNS query의 목적은 여러 다른 DNS 서버들을 검색해서 해당 사이트의 IP주소를 찾는 것이다. 👉 이러한 검색을 recursive search라고 부른다.
과정을 보면
DNS recursor(ISP의 DNS 서버)가 root name server에 연락을 한다.
root name 서버는 .com 도메인 name server(다른 DNS 서버)로 리다이렉트 한다.
.com name server는 google.com name server로 리다이렉트 한다.
google.com name server는 DNS 기록에서 매칭되는 IP 주소를 찾고 DNS recursor로 보낸다.
이 모든 요청들은 패킷들을 통해서 보내지게 된다.
[TCP connection]
브라우저가 올바른 IP 주소를 받게 되면 서버와 connection을 빌드하게 된다.
HTTP 요청의 경우 일반적으로 TCP를 사용해 서버와 연결이 된다.
클라이언트와 서버간 데이터 패킷들이 오가려면 TCP connection이 되어야 한다.
[웹 서버에 HTTP 요청]
클라이언트는 GET 요청을 통해 서버에게 웹 페이지를 요구한다.
요청 시 위에서처럼 accept, accept-encoding, user-agent, cookie 등을 확인할 수 있다.
[WAS와 데이터베이스에서 웹페이지 작업을 처리]
WAS는 사용자의 컴퓨터나 장치에 웹 어플리케이션을 수행해주는 미들웨어를 말한다.
브라우저로부터 요청을 받으면,웹서버는 페이지의 로직이나 데이터베이스의 연동을 위해 WAS에게 이들의 처리를 요청한다.WAS는 이 요청을 받아 동적 페이지 처리를 하고, DB에 필요한 데이터 정보를 받아서 파일을 생성한다.이렇게 처리된 결과를 웹서버로 전송한다.
Web Server와 Web Application Server의 차이
웹서버 : 정적 컨텐츠(HTML, CSS, IMAGE 등)를 요청받아 처리한다.
WAS : 동적 컨텐츠(JSP, ASP, PHP 등)을 요청받아 처리리한다.
👉 DB서버에 대한 접속 정보가 있기 때문에 외부에 노출 될 경우 보안상의 문제를 이유로 웹서버와의 연결을 통해서 요청을 전달 받는다.
[서버가 요청을 처리하고 response를 생성한다]
브라우저로부터 요청을 받아 request handler한테 요청을 전달하고
request handler는 요청과 요청의 헤더, 쿠키를 읽어 요청이 무엇인지 파악한다.
필요하다면 서버에 정보를 업데이트 한다.
이렇게 요청을 읽고 response를 특정한 포맷(JSON, XML, HTML)으로 생성하게 한다.
[서버가 HTTP response를 보낸다]
서버의 response에는 요청한 웹 페이지, status code, Content-Encoding, Cash-Control, 쿠키, 개인정보 등이 있다.
status code의 종류
- 1xx은 정보만 담긴 메세지라는 것을 의미한다.
- 2xx response가 성공적이라는 것을 의미한다.
- 3xx 클라이언트를 다른 URL로 리다이렉트함을 의미한다.
- 4xx 클라이언트 측에서 에러가 발생했음을 의미한다.
- 5xx 서버 측에서 에러가 발생했음을 의미한다.
[웹 브라우저가 HTML content를 보여준다]
Reference.
http://tcpschool.com/webbasic/works
https://devjin-blog.com/what-happen-browser-search/
'www.google.com'을 주소창에 입력하면 일어나는 일
'ETC' 카테고리의 다른 글
[Test Code] TDD와 BDD와 ATDD에 대해서 (0) | 2022.09.13 |
---|---|
[JPA] JPA N+1 문제 및 해결방안 (0) | 2022.09.11 |
JWT(Json Web Token)에 대해 (0) | 2022.08.31 |
GET, POST, PUT (0) | 2022.06.21 |
Git 연습하기 (0) | 2022.01.09 |