노트 정리/모든 개발자를 위한 HTTP 웹

[HTTP 웹] 2. URI와 웹 브라우저 요청 흐름

DuL2 2022. 10. 25. 23:13

URI란?

 URI란 Uniform Resource Identifier의 준말로 리소스를 식별하는 통합된 방법을 의미한다.

 

 개발을 하다보면 URI이외에도 URL, URN 등 비슷한 의미로 쓰이는 다양한 단어들을 만나게 된다. 실제로 본인도 매번 검색을 했었다. 어떤 차이가 있는가?

 

ietf에 이 스펙이 정리가 되어있다.

 

URI는 로케이터(Locator), 이름(Name) 또는 둘 다추가로 분류될 수 있다.

- Uniform Resource Identifier (URI) 문서 표준 스펙

 

즉, URI는 로케이터와 이름으로 분리되며 도식화 해보면 다음과 같을 것이다.

 

 

URL은 Resource의 위치를 정의한 반면, URN은 이름으로 정의해놓고 통신할 때 이름으로서 찾는 것을 말한다. 표준스펙의 example을 보면 다음과 같은데 이름으로 무언가를 찾는다는 것은 사실상 불가능하다. 왜냐하면 어떤 서비스에 접근하여 이름으로 찾으려면 찾은 결과에 대한 매핑 정보를 받아봐야할 것이다. 그런데 이 과정이 쉽지 않으므로 사실상 사용할 수 없다. 그렇기 때문에 URL을 기억해두면 좋을 것 같다.

정리해보자면 다음과 같다.

URI

  • Uniform: 리소스를 식별하는 통일된 방식
  • Resource: 자원, URI로 식별할 수 있는 모든 것(제한 없음)
  • Identifier: 다른 항목과 구분하는데 필요한 정보
    • URL - Uniform Resource Locator: 리소스가 있는 위치를 지정
    • URN - Uniform Resource Name: 리소스에 이름을 부여

URL, URN

리소스에 이름을 부여하는 방식은 리소스 자체에 이름이 변하지 않는다는 장점이 있지만, URN 이름만으로 실제 리소스를 찾는 방법이 보편화되어 있지 않아 리소스를 찾기가 힘들다. 사실상 웹에서 URI는 URL과 같은 의미로 통할 수 있다.

 

URL 분석해보기

구글에 무엇인가를 검색해보면 다음과 같은 URL로 넘어가면서 검색이 될 것이다.

https://www.google.com/search?q=이동욱&oq=이동욱

이동욱...

URL 문법

<스킴>://<사용자이름>:<비밀번호>@<호스트>:<포트>/<경로>;<파라미터>?<질의>#<프래그먼트>

scheme : //[userinfo@]host[:port][/path][?query][#fragment]

 

스킴
scheme
사용자이름:비밀번호
userinfo@
호스트
host
포트
:port
경로
/path
질의
?query
프래그먼트
#fragment
프로토콜
https, http, ftp
URL에 사용자 인증 정보를 넣는 경우
- DB 접속 경우?
호스트명
도메인명 or IP 주소
일반적으로 
80, 443과 같은 
http, https 
port는 생략 가능
리소스 경로
계층적 구조
q=이동욱
key=value
형태로 작성됨
?로 시작
&으로 추가가능
html 내부 북마크 등에 사용
서버 전송하는 정보 아님

 

이렇게 우리가 웹 브라우저 주소창에 입력하는 URL의 형태에 대해서 알아보았다. 이번에는 우리가 URL을 입력하여 요청을 할 때 웹브라우저에서는 어떻게 진행이 되는지 알아보자.

 

웹 브라우저의 요청 흐름

 다시 위에서 보았던 `이동욱`을 검색해보자.

https://www.google.com/search?q=이동욱&oq=이동욱

위의 검색을 입력하고 웹브라우저는 검색 화면을 띄우기 위해 어떻게 작동될까?

  1. 먼저 웹 브라우저는 DNS 서버에 `google.com` 이라는 도메인을 먼저 찾아볼 것이다.(https이므로 port 생략)
  2. 다음 브라우저는 다음과 같은 HTTP 요청 메세지를 생성하게 된다.
    • 요청 메세지
    • `GET /search?q=이동욱&oq=이동욱 HTTP/1.1
    • Host: www.google.com`
  3. Socket 라이브러리를 통해 TCP 3 way Handshake를 통해 google과 통신하고 전송 여부 확인을 한다.
  4. 이 후 OS에서는 데이터에 TCP/IP 패킷이 씌워지게 된다.
  5. 만들어진 패킷은 인터넷 망으로 이동하여 구글로 이동하게 된다.

위와 같은 방식으로 통신이 되게 되고 응답이 오게 되면 우리는 다음과 같이 생긴 응답메세지를 받게 된다.

브라우저는 위의 응답메세지를 HTML 렌더링을 통해 그림을 그리고 다음과 같은 검색 화면을 볼 수 있는 것이다.

 

이동욱...