www.google.com을 브라우저 주소창에 입력하면 벌어지는 일.
기술 면접 질문으로 꽤 많이 나오는 질문이며,
구글링을 해보면 자료가 굉장히 많이 나오는 주제 중 하나입니다.
이미 매우 훌륭한 글들이 많긴 하지만,
공부할 겸 블로그에 정리해보고자 이렇게 포스팅을 해봅니다.
아무래도 자신이 쓴 글이 가장 보기 편한 법이니까요.
DNS 서버에서 서버 IP 주소 찾기
DNS(Domain Name Server)는 도메인 이름과 IP 주소간의 변환을 담당하는 서버입니다.
웹사이트 등의 주소는 사실 IP 주소입니다. http://123.456.789.01과 같이 IP 주소를 통해 접속을 하는데,
IP 주소의 경우 사람들이 외우기 쉽지 않습니다.
따라서 www.google.com, www.naver.com 과 같이 사람들이 외우고 이해하기 쉬운
도메인 이름을 붙여 사용하며,
DNS 서버는 이를 IP 주소로 변환하거나 그 반대의 역할을 수행합니다.
가끔가다 길고 복잡한 도메인도 있긴 하지만, IP 주소를 치고 들어가는 것 보다야 훨씬 쉽겠지요?
유저가 브라우저 주소창에 도메인을 입력하면,
해당 브라우저는 DNS 캐시를 먼저 확인합니다. 이전에 조회한 기록이 있는지 찾는 것이죠.
캐시가 없거나 이미 만료되었을 경우,
브라우저는 DNS 서버에 해당 도메인의 IP 주소를 요청(DNS Query) 합니다.
TCP로 브라우저 - 서버 연결
TCP(Transmission Control Protocol)는 연결 지향형 프로토콜로,
UDP에 비해 데이터의 손실이 적고 신뢰성이 보장됩니다.TCP를 통해 브라우저(클라이언트)와 서버가 연결되며,
클라이언트가 서버와 연결을 시도할 때,클라이언트가 서버에 연결 요청 (SYN) ->서버가 클라이언트의 요청에 수락 + 응답 (SYN - ACK) ->클라언트가 서버의 응답 확인 (ACK)3단계로 이루어지며, 이 과정을 3 - Handshaking이라고도 합니다
이 3단계의 프로세스 덕분에 보다 신뢰성있는 데이터 통신을 제공하지요.
HTTP로 웹 페이지 요청과 응답 주고받기
HTTP(Hypertext Transfer Protocol)는 요청(Request)과 응답(Response)을 주고 받을 때 사용되는
일종의 프로토콜(Protocol) - 규칙 혹은 형식, 방법 입니다.
TCP로 브라우저(클라이언트)와 서버가 연결이 된 후,
HTTP를 사용해 서버에서 특정 리소스를 가져오거나, 서버에 특정 연산을 요청할 수 있습니다.
HTTP를 사용해 특정 요청에 대한 형식을 작성해 요청(Request) 하면
서버는 이 요청에 맞는 응답(Response)을 합니다.
HTTP의 대표적인 요청 메서드로는
POST (Create), GET (Read), PUT/PATCH (Update), DELETE (Delete) 등이 있습니다.
서버는 이에 대한 응답으로 요청한 리소스와 응답코드 (200 OK, 404 Not Found) 등을 답신합니다.
신청서 등 특정 양식을 채워 넣으면, 기관이 이를 처리해 결과를 우리에게 알려주는 셈이지요.
HTTP는 서로 소통하기 위한 언어, 양식, 신청서, 규칙 등에 대한 프로토콜,
TCP는 클라이언트와 서버의 연결과 관련된 프로토콜로 볼 수 있습니다.
때문에 HTTP는 TCP 위에서 작동된다고도 볼 수 있겠습니다.
HTTP 요청(Request)을 받은 서버?!
서버가 HTTP 요청을 받으면 WAS(Web Application Server)가 이 요청을 수신합니다.
WAS는 웹 애플리케이션 실행, 동적인 처리, 데이터베이스 작업,
보안 처리, 세션 관리, 스레드 관리 등을 처리하는 미들웨어입니다.
웹 서버를 보조하며 웹 애플리케이션을 효과적으로 구동할 수 있게 합니다.
Spring, Django, Node.js(Express.js) 등이 이에 속한다 볼 수 있습니다.
요청을 수신한 WAS는 요청에 따라 비지니스 로직이나 데이터베이스 작업을 수행한 뒤,
이 요청을 웹 서버(Tomcat, Nginx 등)에 넘기고, 이에 대한 응답을 받아
HTTP 프로토콜로 응답을 만들어 회신합니다.
물론 WAS는 웹 서버를 보조하는 미들웨어이므로, 없을 수도 있으며,
WAS가 없을 경우 웹 서버 자체적으로 HTTP 요청을 받아들이고, 응답하는 역할을 수행할 수도 있습니다.
마침내 응답을 받은 브라우저! 이제 렌더링하여 Google 홈페이지를 보여준다!
서버로부터 받은 HTTP 응답에는
HTML, CSS, JS 뿐 아니라 이미지, 폰트 등의 리소스가 있을 수 있습니다.
브라우저는 이러한 응답 데이터들을 렌더링하여 최종적으로 위와 같은 Google 홈페이지를 보여줍니다.
요약
후기
공부한 내용을 정리한 글인 만큼 잘못된 내용이 있을 수도 있습니다.
만약 잘못된 내용이 있다면 댓글 남겨주세요. 더 공부해보겠습니다.