본문 바로가기
Web

URI, URL 그리고 URN 이해하기

by Vintz 2022. 12. 25.
반응형

Photo by Ricardo Gomez Angel - https://unsplash.com/photos/KmKZV8pso-s

웹 프론트엔드 개발자로 일하면서 경험하는 혼란스러운 단어들이 있습니다. URI, URL 그리고 URN에 대한 명확한 개념이 저에게 필요했습니다. 가끔씩 이 용어들을 볼 때마다 '무슨 차이지?', '이런 경우엔 URI라고 해야하나?' 등의 혼란을 겪습니다. 이제 더 이상 혼란을 겪지 않기 위해 정리를 해보는 시간을 가져보려 합니다.

시작하기

먼저 이 개념들의 목적은 명확합니다. 바로 인터넷상의 리소스를 식별하기 위한 수단이라는 점입니다.

  • URI(Uniform Resource Identifier)
  • URL(Uniform Resource Locator)
  • URN(Uniform Resource Name)

결국 모두 리소스의 식별자 역할을 하는 것에는 동일합니다. 하지만 마지막 단어에서 이들의 역할을 어느 정도 생각해볼 수 있으며, 약간의 차이가 존재합니다.

URI(Uniform Resource Identifier)

URI는 짧은 숫자, 문자 및 기호와 같은 문자열을 사용하여 인터넷상의 리소스를 식별해 줍니다. 이것의 명세는 RFC 3986 - Uniform Resource Identifier (URI): Generic Syntax에 의해 정의됩니다.

 

RFC 3986에 따르면 URI는 간단하고 확장이 가능하며, 리소스를 식별하기 위한 수단이라고 나와있습니다.

A Uniform Resource Identifier (URI) provides a simple and extensible means for identifying a resource. - RFC 3986 : Introduction

URI는 URL과 URN을 모두 포함하는 가장 큰 개념입니다. 즉 이름, 위치 또는 둘 다로 리소스를 식별하며 URI의 두 하위 집합이 URL과 URN입니다. 따라서 모든 URL과 URN은 URI가 될 수 있지만, 모든 URI가 URL이 될 수는 없습니다.

A URI can be further classified as a locator, a name, or both. The term "Uniform Resource Locator" (URL) refers to the subset of URIs ... The term "Uniform Resource Name" (URN) has been used historically to refer to both URIs under the "urn" scheme, which are required to remain globally unique and persistent even when the resource ceases to exist or becomes unavailable, and to any other URI with the properties of a name. - RFC 3986 : URI, URL, and URN

위 RFC 3986의 내용처럼 URL은 리소스를 식별할 뿐만 아니라 리소스의 위치를 설명함으로써 리소스를 찾는 수단까지 제공해주는 URI의 하위 집합임을 알 수 있습니다. 그리고 URN은 'urn' 스킴을 사용하거나 다른 어떤 이름의 속성을 가진 URI를 가리킵니다.

URL(Uniform Resource Locator)

URL은 해당 위치를 설명하여 리소스를 가져오는 방법에 대한 정보를 포함합니다. 항상 프로토콜(e.g., http)로 시작하며 일반적으로 네트워크 호스트 네임(e.g., example.com)이 있으며, 가끔 문서 경로(e.g., /foo/mypage.html)와 같은 정보를 포함하기도 합니다. 예를 들면 다음과 같습니다.

  • http://example.com/mypage.html
  • ftp://example.com/download.zip
  • mailto:user@example.com
  • file:///home/user/file.txt
  • tel:111-2222-3333
  • http://example.com/resource?foo=bar#fragment
  • /other/link.html (상대 URL)
    • 전체 URL 구조를 포함하지 않기 때문에 다른 URL의 콘텍스트(동일한 프로토콜, 하위 도메인 및 도메인)에서만 유용합니다.

위와 같이 프로토콜과 위치를 설명하는 정보가 포함됩니다. URI는 그 자체로 주소이거나 위치가 포함된 주소와 같은 반면에 URL은 항상 위치가 표시된 주소와 같습니다. 즉 URI는 식별자, URL은 도달 방법도 알려주는 식별자입니다.

URN(Uniform Resource Name)

일반적으로 'urn' 스킴으로 시작합니다. 영구적이고 고유한 이름으로 리소스를 식별합니다. 리소스를 찾는 방법을 알려주지는 않습니다. 예를 들면 다음과 같습니다.

  • urn:isbn:9788966262335
    • 국제표준도서번호인 ISBN 번호로 책을 식별합니다.
  • urn:uuid:621e78bc430-9c3a-11d9-9669-0800200c9a66 
    • 전 세계적으로 고유한 이름으로 식별합니다.
  • urn:publishing:book
    • 문서를 책 유형으로 식별하는 XML 네임스페이스입니다.

결론

URI 벤 다이어그램(Venn diagram)

이제는 찝찝했던 부분들이 많이 해소되었습니다. 웹 개발에서 경험하는 거의 모든 경우는 URL입니다. 동시에 URI이기도 합니다. RFC 3986 section-1.1.3에서는 향후 문서에 대해 보다 제한적인 용어가 아닌 일반적인 용어 'URI'를 사용하라고 나와있습니다. 마치 URN과 URL이 아닌 URI에 대한 용어 사용을 권장하는 듯합니다. 하지만 개인적으로 URI보다 URL이 더 구체적이기 때문에 URL이라는 용어를 더 많이 사용할 것 같습니다.

 

제일 좋은 방법은 익숙하고 구체적인 URL로 사용하다가 누군가 URI를 사용한다면 바로 바꿔서 사용하는 것입니다. 이처럼 상황에 따라 사용하는 것이 좋아보입니다.

참고

What is the difference between a URI, a URL, and a URN? - Stackoverflow
The Real Difference Between a URL and a URI - Daniel Miessler
RFC 3986
반응형