www.google.com을 검색하면 어떤 일이 일어날까?

이시우·2021년 3월 22일
0

컴퓨터 지식

목록 보기
10/17

타 블로그 글을 읽고 제가 정리한 내용입니다.

계기

웹개발을 공부하고 있는데 웹 동작의 기초도 잘 모르는 것 같아서 공부해 보기로 했다.
네이버 개발자님은 이 과정을 100개의 과정으로도 설명할 수 있다고 하시던데 나는 일단 8개로..ㅎ 설명해봤다.



1. 브라우저에 www.google.com 을 검색한다.

우리가 웹사이트에 접속하기 위해서는www.google.com같은 도URL이 아닌 IP 주소가 필요하다. 127.0.0.1 같은... 이런 숫자로 된 친구가 필요하다.
웹사이트에 접속하기 위해서 항상 IP 주소를 외워야 한다면 너무 어렵지 않을까? 그래서 우리가 편리하게 이용할 수 있는게 DNS이다.

  • DNS란?

    DNS는 Doman Name System의 약자로 URL의 이름과 IP주소를 저장하고 있는 데이터베이스이다.

    일상생활을 예로 들어보자.
    친구들에게 전화해야 하는데 전화번호부가 없다면 항상 전화번호를 외워서 전화해야 할 것이다. 전화번호부가 있어서 내가 친구들의 이름을 저장하고, 그 이름으로 전화를 걸 수 있으니 정말 편리한 기능이다 !

    DNS는 인터넷 서버의 전화번호부다. URL의 이름을 통해 IP주소를 불러와 주는 역할을 하는 것이다.
    터미널에 nslookup www.google.com 입력하면 구글의 IP 주소를 얻어올 수 있고 이 주소를 입력해도 똑같이 구글 창이 뜬다.
    전화번호부에서 이름으로 전화를 걸든 번호로 전화를 걸든 똑같은 것 처럼 !


2. 캐싱된 DNS 기록을 통해 google에 대응되는 IP주소가 있는지 확인한다.

웹사이트 이름을 브라우저에 검색하면 브라우저는 DNS 기록을 4가지의 캐시에서 확인을 한다.
브라우저 캐시 > systemcall을 통한 OS의 캐시 > router의 캐시 > ISP의 캐시
순서로 확인을 한다.
캐시는 네트워크 트래픽을 조절하고 데이터 전송 시간을 줄이기 위해 매우 중요하기 때문에 여기저기서 캐싱을 진행한다.

  • ISP 란?

    인터넷 서비스 공급자의 약자이다. 우리가 아는 SK, LG, KT 등등이 해당된다.
    총 3단계로 구성되는데
    1단계 : 대륙간 인터넷 트래픽 교환
    2단계 : 1단계와 3단계의 중간 단계 역할
    3단계 : 우리가 흔히 아는 서비스 제공업체
    라고 한다.

router의 캐시, ISP의 캐시는 완벽하게 이해는 안가지만 전체적인 흐름은 이해가 간다.
모든 요청이 DNS서버로 간다면 트래픽이 엄청 높아질 것이고 시간도 많이 걸리니 비효율 적이겠지 ?


3. www.google.com을 호스팅하고 있는 서버의 IP 주소를 찾기 위해 DNS query를 내보낸다.

캐시에 www.google.com의 IP주소가 없다면 ISP는 DNS서버들을 검색해 해당 사이트의 IP주소를 찾아야한다.
이러한 검색을 recursive search(재귀적 탐색?) 이라고 한다.
ISP의 DNS서버는 다른 DNS 서버들에게 물어 물어 도메인의 IP를 찾는다.
도메인의 구조는 아래와 같다.
실제 도메인에는 끝에 .이 붙는다..! 처음 알았다.
따지고보면 www.google.com.인거였구나..

쉽게 생각하면 위에서부터 하나씩 만나면서 내려오는 구조이다.
Top-level 서버에서 .com에 대한 정보를 받아 .com 서버에간다.
.com 서버에서 google.com 서버에 대한 정보를 받고 DNS기록에서 www.google.com에 매칭되는 IP주소를 받아 오는 것이다.

모든 요청은 데이터 패킷을 통해 보내진다.
패킷 안에는 보내는 요청의 내용, ISP의 DNS서버의 주소가 포함되어 있다.

  • 데이터 패킷이란?

    패키지(package)와 덩어리를 뜻하는 버킷(bucket)의 합성어이다.
    통신망을 통해 전송하기 쉽도록 자른 데이터의 전송 단위이다.
    쉽게 말하면 우리가 주고받는 이메일, 채팅 메세지 등 다양한 데이터의 내용을 작은 단위로 쪼갠 데이터 이다.
    헤더, 데이터, 테일러로 이루어져 있는데 헤더에는 수신처의 주소 등이 기록되고 테일러에는 에러 정보가 기록된다.

4. 브라우저가 서버와 TCP connection을 한다.

브라우저가 올바른 IP 주소를 받게 되면 서버와 connection을 빌드하게 된다.
브라우저는 인터넷 프로토콜을 사용해서 서버와 연결이 된다.
웹사이트의 HTTP 요청의 경우에는 일반적으로 TCP를 사용한다.

클라이언트와 서버간 데이터 패킷들이 오가려면 TCP connection이 되어야 한다. TCP/IP three-way handshake라는 프로세스를 통해서 클라이언트와 서버간 connection이 이뤄지게 된다. 단어 그대로 클라이언트와 서버가 SYN과 ACK메세지들을 가지고 3번의 프로세스를 거친 후에 연결이 된다.


5. Browser가 웹 서버에 HTTP 요청을 한다.(request를 보낸다.)

TCP로 연결이 되었다면, 데이터를 전송하면 된다.
클라이언트는 GET 요청을 통해 서버에게 www.google.com 웹페이지를 요구한다.
요청에 따라 부가적인 정보들이 함께 전송되는데 개발자 도구의 network에서 자세한 내용을 확인할 수 있다.


6. 서버가 요청을 처리하고 response를 생성한다.

서버는 웹서버를 가지고 있다(i.e. Apache, IIS...). 이들은 브라우저로부터 요청을 받고 request handler한테 요청을 전달해서 요청을 읽고 response를 생성하게 한다.
Request handler란 ASP.NET, PHP, Ruby 등으로 작성된 프로그램을 의미한다.
이 request handler는 요청과 요청의 헤더, 쿠키를 읽어서 요청이 무엇인지 파악하고 필요하다면 서버에 정보를 업데이트 한다.
그 다음에 response를 특정한 포맷으로(JSON, XML, HTML) 작성한다.

이 부분은 잘 모르는 부분이라 어려웠다.
그래서 블로그에 있던 내용을 통째로 가져왔다.
쉽게 생각하면 온 요청을 바탕으로 해석해서 알맞은 답을 정해진 포맷으로 전달해 준다는 건가..?


7.서버가 HTTP response를 보낸다.

서버의 response에는 요청한 웹페이지, status code, compression type(Content-Encoding) - 어떻게 인코딩 되어 있는지, 어떻게 페이지를 캐싱할지(Cache-Control), 설정할 쿠키가 있다면 쿠키, 개인정보 등이 포함된다.


8.Browser가 HTML content를 보여준다.

HTML을 렌더링 후 태그들을 체크해 추가적으로 필요한 요소들을 GET으로 요청한다.
불러온 파일들은 브라우저에 의해 캐싱되어 다시 불러지지 않도록한다.
사용자가 캐시를 삭제하면 다시 불러오겠지..?

모든 요청이 끝나면 우리가 아는 www.google.com 페이지가 나오게 된다 !

0개의 댓글