Published 2023. 5. 11. 01:02

들어가며

  • 이번 포스트에서는 URI(Uniform Resource Identifier)에 대해 알아본다.
  • 더불어 URL, URN에 대해서도 알아본다.

 

 

URI, URL, URN

  • URI는 자원을 구분(Identify)하기 위해서 만든 개념으로, URL, URN이 모두 URI에 포함되는 개념이다. 즉 URL과 URN은 URI의 부분집합으로 생각할 수 있다.
  • URI의 각 두문자의 의미는 다음과 같다.
    • U : Uniform으로 리소스를 식별하는데 통일된 방식을 지칭한다.
    • R : Resource로 리소스 자체를 말하며 리소스란 식별할 수 있는 모든 것을 지칭하며 제한은 없다.
    • I : Identifier로 리소스를 다른 리소스와 구분할 수 있는 정보를 의미한다.
  • URL은 위의 두문자에서 I가 L로 바뀐 것으로, 자원이 존재하는 위치(Locator)를 지정한다.
  • URN은 N으로 바뀐 것으로 리소스의 이름(Name)을 부여한다.
  • 우리는 URI나 URL에 대한 말은 많이 들었지만, URN은 잘 듣지 못했는데 이는 URN을 잘 사용하지 않기 때문이다. URN을 사용하지 않는 이유는 다음과 같다.
    • 먼저 리소스가 변경되어야 할 경우에 대해 URN은 경직되어 있다. 생각해보면 리소스의 위치는 변경될 수 있으나 이름은 변경되기가 힘들다는 것을 알 수 있을 것이다.
    • 그리고 URN을 사용하여 실제 리소스를 찾을 수 있는 보편화된 방법이 딱히 존재하지 않는다.
  • 위의 이유로 URI는 일반적으로는 URL을 지칭한다. 해당 포스트와 이후의 포스트도 URI를 URL과 동치시켜 이야기하도록 하겠다.

 

 

URL의 구조

  • URL은 다음과 같은 구조로 이루어진다.
    • 프로토콜
    • 호스트명
    • 포트 번호
    • 쿼리 파라미터
  • 다음과 같은 링크를 생각해보자.
https://www.google.com:443/search?q=hello&hl=ko

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

각 부분의 구성정보

  • scheme에 해당되는 부분은 사용되는 프로토콜을 넣으며 일반적으로 http, https로 지정한다.
  • userinfo의 경우 URL에 사용자의 정보를 포함하여 인증하는데 사용되며 거의 사용되지 않는 파트이다.
  • host는 호스트명으로 도메인명(Domain Name) 또는 IP주소를 사용한다.
    • 위의 링크의 경우에는 google.com이 도메인명으로 생각할 수 있다.
  • port는 통신하는 포트번호로 http의 경우 40번, https는 443번을 통상적으로 사용한다. 이러한 프로토콜을 사용할 경우에 브라우저가 포트번호를 생략해도 자동으로 넣어주기 때문에 보통 생략하여 사용한다.
  • path는 리소스의 위치로 계층적 구조를 가진다.
    • 만약 home디렉토리 내부에 위치하는 file.txt의 경우 다음과 같은 path가 된다.
      • /home/file.txt
  • query의 경우 key=value의 형태를 가진다. 항상 ?로 시작되며 웹 서버로 넘기는 파라미터를 의미한다. 복수의 파라미터를 넘겨야 할 경우에 &를 사용하여 넘길 수 있다.
    • 만약 서버에 이름과 나이를 넘겨야 한다면 쿼리는 다음과 같을 것이다.
      • https://www.something.com/regist?name=kim&age=20
  • fragment의 경우 html 내부 북마크 등에 사용되며 서버에 전송하는 정보는 아니다.
    • 해당 포스트의 목차 기능이 html 북마크와 동일한 기능을 하며 fragment를 통해 구현되어있다.

'CS > HTTP' 카테고리의 다른 글

HTTP - HTTP 메서드  (0) 2023.05.17
HTTP - HTTP API 설계와 HTTP메서드  (0) 2023.05.15
HTTP - HTTP 메시지 구조  (0) 2023.05.15
HTTP - HTTP의 뜻과 특성  (0) 2023.05.13
HTTP - 인터넷 통신 기초  (0) 2023.05.09
복사했습니다!