쾌락코딩

브라우저에 URL을 입력하면 일어나는 일 (1)

|

어느 사이트에선가 “브라우저에 URL을 입력한 후 원하는 화면이 보일 때까지 어떤 일이 일어나는지 아는가?” 라는 질문을 보았다. 아마 어느 스타트업의 cto님께서 이런 질문에 대답을 할 줄 아는 사람을 원한다고 적은 글이었던 것 같다. 생각해보면 학교에서 네트워크를 배우긴했지만 tcp/ip의 장단점, arp의 역할 등등을 알고만 넘어갔지 실제로 어떻게 통신이 되고, 그것들이 어떻게 쓰이는 몰랐다. 그래서 한번 이 질문에 답변을 해보고자 큰 틀로 정리를 하려고 한다.

in 웹 브라우저

우선은 웹 브라우저에 url을 입력하는 것으로 통신은 시작된다. 그럼 사용자가 url을 입력하고 엔터를 누르면 무슨 일이 일어나는가?

http request 메시지를 만든다

http 요청 메시지는 아래와 같이 되어있다. http_request 위의 그림처럼 어떤 행위(get,post,delete,put 등등)를 할 것인지, uri가 무엇이고 http version이 몇인지, 그리고 부가적인 자세한 정보가 필요한 경우 Header값을 설정할 수 있다. 마지막으로 post와 같이 클라이언트에서 서버로 어떤 데이터를 전달 해야 할 경우 body영역에 데이터를 싣는다. 우리가 url을 입력하면 브라우저는 이를 해독해 그림과 같은 http 메세지를 자동으로 만들어 준다.

Header의 종류도 다양하고, method의 종류도 다양하지만 여기서 다루진 않겠다.

OS에 데이터 송출을 의뢰한다

HTTP 메세지를 만들면 브라우저는 이를 OS에 의뢰한다(정확히는 프로토콜 스택). 브라우저 자체에는 이 메세지를 네트워크에 송출하는 기능이 없기 때문이다. 그런데 OS에 의뢰를 할 때는 도메인 명이 아니라 ip주소로 메세지를 받을 상대를 지정해야 한다. 이 과정에서 DNS서버를 조회해야 한다.

브라우저는 어떻게 도메인 주소를 IP주소로 변경할까?

사실 아주 정확하게는 모르지만, 큰 흐름은 이렇다. socket이라는 라이브러리가 있는데, 이는 네트워크의 기능을 애플리케이션 단에서 호출할 수 있게 하는 표준 라이브러리이다. 브라우저는 이 라이브러리를 사용해서 dns서버로 도메인 주소를 보내면, dns가 ip주소로 응답을 준다. 그런데 결국 socket을 이용해 dns로 어떤 요청을 보낸다는 것 역시 OS 내부에 포함된 프로토콜 스택을 호출하여 의뢰하는 것이다. 프로토콜 스택이란 간단하게 “os 내부에 내장된 네트워크 제어용 tcp/ip 소프트웨어” 라고 생각하면 될 것 같다.

이제 정말 프로토콜 스택에 메세지 송신을 의뢰한다

ip주소를 얻었으면 이제 웹 서버에 메세지를 송신하도록 os내부의 프로토콜 스택에 의뢰한다. 그러나 사실 의뢰한다는 것은 결국 또 socket 라이브러리를 사용하는 것이다. 위에서 프로토콜 스택은 tcp/ip 소프트웨어라고 설명했는데, tcp는 연결형 이라는 말을 많이 들어보았다. 여기서 그 원리가 나온다.

즉, socket 라이브러리를 이용해 의뢰를 하게되면 데이터를 송수신 하는 컴퓨터 사이에 데어터의 통로 같은 것이 생긴다. 클라이언트와 서버에 데이터 전용의 긴 통로가 생기는 것이다. 이 통로를 통해 데이터를 주고 받을 수 있으며 어느 쪽에서 데이터를 보내든 상관은 없다. 그러나 수업시간에 tcp의 단점으로 배웠던게 하나 있는데, 바로 초기 회선(통로) 설정 비용이다. 즉 데이터를 송수신 하기 전에 매번 이 통로를 설정해야 하는 단점이 있다.

결과적으로 클라이언트에도, 서버에도 통로의 입구가 존재하게 된다. 그리고 이 입구를 socket이라고 부른다. 소켓을 만들고 통신하는 과정은 크게 보면 4단계가 있다.

  1. 서버와 클라이언트 모두 소켓을 만든다.
  2. 서버측의 소켓에 클라이언트의 소켓이 다가가서 통로를 연결한다.(접속)
  3. 데이터를 송수신 한다.
  4. 송수신이 끝나면 통로를 분리하고 소켓을 없앤다.

이와 같은 과정이 일반적인데 http는 조금 비효율적인 부분이 있다. 그 이유는, http 특성상 html 문서, 이미지 파일 등의 데이터를 하나하나 별도의 것으로 취급하기 때문에 여러개의 이미지를 요청할 경우 매번 각각의 새로운 통신을 해야 한다는 점이다. (물론 이를 해결하기 위한 방법은 존재한다)

NEXT

다음 포스트에는 프로토콜 스택이 정확히 무엇이고 어떻게 데이터를 전송 하는지에 대해, TCP와 IP가 무슨 역할을 하는지 알아보겠다.

Comments