코드 저장소

공부에는 끝이 없다!

HTTP

HTTP - URI와 웹 브라우저 요청 흐름

VarcharC2K 2024. 1. 8. 23:50

URI( Uniform Resource Identifier )란?

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

아마 개발자라면 URI, URL, URN에 대해서 용어는 한번쯤 들어보았을 것이다.

이것들은 전부 인터넷 자원(Resource)을 식별하는 방법이며 크게는 URL(Resource Locator)와 URN(Resource Name)으로 나뉜다. 그리고 URI란 이 둘을 통합하여 지칭하는 개념이다.

 

좀 더 자세하게 살펴보면 URN은 인터넷 자원의 이름을 뜻하고 URL은 인터넷 자원으로 찾아가는 주소 정보, URI는 인터넷 자원을 식별할 수 있는 모든 문자열을 말한다.

비유로써 잘 정리되어 있는 글이 있으니 궁금한 사람은 한번 참고해 보기 바란다.

 

https://nsinc.tistory.com/192
 

URL vs URI vs URN

인터넷을 사용하면서 많이 만나게 되는 URI, URL, URN의 개념에 대해서 정리해보고자 합니다. URI, URL, URN은 기술적인 구분이 아닌 개념적인 차이라고 볼 수 있으므로 참고 바랍니다. URI vs URL vs URN ?

nsinc.tistory.com

 

 

그럼 URI는 무엇인지 자세하게 하나하나 단어를 뜯어보자

  • Uniform : 리소스를 식벽하는 통일된 방식
  • Resource : 자원, URI 로 식별할 수 있는 모든 것 (제한 없음)
  • Identifier : 다른 항목과 구분하는데 필요한 정보

즉, 인터넷 자원인 Resource를 식별할 수 있는 통일된 방식이라는 의미이다.

자원을 식별하기 위해선 해당 자원이 어디에 위치해 있는지(위치), 또는 해당 자원의 이름은 무엇인지를 통해 식별해내겠다는 것이다.

앞서말한 URL은 리소스의 위치, URN은 리소스의 이름을 부여하는 것이다.

그런데 위치는 변할 수 있지만, 이름은 변하지 않는다.

홍길동이라는 사람이 이사를 가면 위치는 변하지만 그 사람을 지칭하는 홍길동이라는 이름 자체가 변하지는 않는 것처럼 말이다.

 

예를 들어, urn:isbn:123456789라는 인터넷 리소스가 있다고 생각해보자.

하지만 URN은 앞서 말한듯 이름을 지칭하기 때문에 해당 리소스가 어디에 존재하는지는 알 수 없다.

따라서, URN의 이름만으로 실제 리소스를 찾을 수 있는 방법이 보편화 되지 않아 일반적으로는 URL을 많이 사용하며 URI를 말할때 URL을 많이 말하는 것도 이런 이유이다.


URL의 문법

 URL은 우리가 흔히 보는 https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=0&ie=utf8&query=%EC%95%88%EB%85%95과 같은 것을 말한다.

 

문법으로 살펴보면 다음과 같다.

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

 

1. Scheme

Scheme 에서는 주로 프로토콜이 사용되며 프로토콜은 어떤 방식으로 자원에 접근 할 것인가 하는 약속 규칙이다.

(http, https, ftp등이 대표적이다)

http는 80포트를, https는 443 포트를 대표적으로 사용하기 때문에 해당 프로토콜에서는 포트를 생략할 수도 있다.

2. userinfo

Url의 사용자 정보를 포함해서 인증해야하는 경우 사용하며 거의 사용되지 않는다.

3. host

호스트명을 뜻하며 도메인명 혹은 IP 주소를 직접 사용할 수도 있다.

4. Port

포트는 접속할 포트를 의미하며 앞서 설명했듯 일반적으로 생략이 가능하다.

생략한 경우 http는 80, https는 443으로 지정된다.

(따라서 일반적으로는 생략하는 경우가 많다.)

5. path

path는 리소스가 있는 경로를 말한다.

일반적으로 계층적 구조로 되어있다.

아마 URL을 보다 보면 /1/2/3 이런식으로 /가 많이 붙어 있는 것을 보았을 것이다.

이는 path가 계층적 구조를 가지기 때문이다.

6. query

query는 key=value 형태로 들어가며 ?로 시작하고 &로 추가가 가능하다.

query parameter, query String등으로 불리며 웹서버에 제공하는 파라미터를 말한다.

단, URL이 문자열이므로 항상 문자형태로 넘어가게 된다.

7. fragment

html 내부 북마크 등에 사용하며 서버로 전송되는 정보는 아니다.

일반적으로 잘 사용하지 않는다.


웹 브라우저의 요청 흐름

그럼 웹 브라우저에서 요청 흐름이 어떻게 흘러가는지 살펴보자.

우리가 URL을 통하여 query parameter를 전달한다고 생각해보자.

예를 들어 https://google.com/search?q=flower&hl=ko 라는 URL로 검색한다고 해보자.  

 

우선 웹브라우저가 DNS 서버를 조회하여 IP를 받아온다. 우리는 https를 사용하였으므로 port를 적지 않아도 자동으로 443으로 연결된다.

그 후 HTTP 요청 메시지를 보내는데 이 요청메시지는 다음과 같이 이루어져 있다.

GET /search?q=hello&hl=ko HTTP/1.1
Host:www.google.com

 

그후 웹 브라우저가 Socket 라이브러리를 통해 TCP/IP 계층으로 전달한다.

데이터가 전송되면 TCP/IP에서 다시 패킷을 씌우고 HTTP 메시지를 포함하여 서버로 보내게 된다.

서버는 도착한 패킷을 버리고 요청한 메시지를 해석하여 원하는 값을 반환하여 HTTP 응답 메시지를 만든다.

그후 응답 메시지에 패킷을 씌워 다시 브라우저로 보내면 우리가 원하는 값을 서버에서 받을 수 있게 되는 것이다.

 

'HTTP' 카테고리의 다른 글

HTTP - HTTP 메서드의 속성  (0) 2024.01.11
HTTP - HTTP 메서드 (2)  (0) 2024.01.11
HTTP - HTTP 메서드  (0) 2024.01.10
HTTP - HTTP 기본  (1) 2024.01.09
HTTP - 인터넷 네트워크에 대하여  (2) 2024.01.07