URI vs URN vs URL

July 1, 2023 ˑ 5min read

thumbnail

개요

인터넷 상 리소스에 접근하려면 URI, URL, URN와 같은 식별자가 필요합니다. 비슷한 이름이지만 이들간에는 어떠한 차이가 있을텐데요. 그래서 개념을 명확하게 알고 넘어가면 좋겠다는 생각이 들었습니다. 이번 글에서는 각 식별자가 어떻게 생겨나게 되었는지, 어떤 차이가 있는지 찾아본 내용을 정리해보았습니다.

URI의 탄생

1990년대 초 WWW(World Wide Web)을 제안한 팀 버너스 리는 웹이 점차 발전하게 되면서 더 많은 정보, 리소스에 접근할 필요가 생기게 되었으며 이를 위한 식별 체계에 대한 필요성을 제기했습니다. 이후 RFC 1630 - Universal Resource Identifiers in WWW를 통해 URI(Uniform Resource Identifier) 라는 체계를 처음 제안하게 되었습니다.

맨 처음 등장한 URI는 다음과 같은 형태였는데요.

http://info.cern.ch/hypertext/WWW/TheProject.html

음.. URL과 같은 형태로 보이는데 어떤 차이가 있는걸까요? 사실 URI는 URL와 동일한 형태로 탄생했습니다. 이후에 URN이 등장하기 전까지는 말이죠.

URN(Unified Resource Name)의 필요성

URI의 등장 이후 위치 정보가 아니더라도 특정 리소스를 고유하게 식별할 수 있어야 한다는 필요성이 제기되었습니다. 리소스의 위치가 변하더라도 변하지 않는 이름으로 대상을 식별하고자 했던 것이죠. 예를들면, 도서관에서 책이 있는 책장의 위치가 아니라 책의 이름을 통해 책을 식별할 수도 있는 것 처럼요.

이렇게 탄생한 URN(Unified Resource Name)은 아래와 같은 구조로 생겼습니다.

URN:<namespace identifier>:<namespace-specific string>

모든 URN은 urn:으로 시작합니다. 바로 뒤에는 Namespace Identifier(NID) 가 따라오는데요. isbn, uuid, doi와 같이 네임스페이스를 특정하는 값이 사용될 수 있습니다. 그 뒤에는 네임스페이스 별로 리소스를 식별할 수 있는 고유한 문자열이 따라옵니다. 이 문자열은 네임스페이스 마다 다른 형태를 갖습니다.

실제 사용되는 URN의 예시를 보면 아래와 같아요.

URN설명
urn:isbn:0451450523ISBN 번호(도서 고유 식별자)
urn:uuid:123e4567-e89b-12d3-a456-426614174000UUID(범용 고유 식별자)
urn:doi:10.1000/182DOI(디지털 객체 식별자, 연구 논문 등)
urn:ietf:rfc:3986IETF RFC 문서 (RFC 3986)

URN은 도서(ISBN), 논문(DOI), 표준화 문서(RFC) 등 고유한 식별이 필요한 경우 주로 사용됩니다.

URI의 재정립

URN의 등장 이후 1998년 RFC 2396 - Uniform Resource Identifiers (URI): Generic Syntax을 통해 URI를 URL, URN의 상위 개념으로 구분하자는 제안이 나오게 되었습니다. 이를 통해 우리가 익숙하게 사용하는 URL(Uniform Resource Locator)은 위치를 포함하는 식별자로써 URI의 부분 집합으로 정리되었습니다.

uri-url-urn-venn-diagram

그 이후 약 10년이 지난 2005년 1월 RFC 3986 - Uniform Resource Identifier (URI): Generic Syntax을 통해 URI의 문법을 이전보다 명확하게 정의하게 되면서 현대 URI의 공식 표준으로 자리잡게 되었습니다.

  • Scheme리소스에 접근하는 방법 (e.g. http, https, ftp 등)
  • Host, Domain리소스가 위치한 서버 (e.g. www.astrsk.dev)
  • Path서버 내에서의 리소스의 위치 (e.g. /thumbnail.png)
  • Query String (optional) — 추가적인 정보 전달을 위해 사용 (e.g. ?width=600&height=400)
  • Fragment (optional) — 문서 내 특정 위치를 가리키기 위해 사용 (e.g. #title)

정리해보자면, URI는 처음 등장했던 시점에는 URL과 같은 형태로 사용되었고 URN의 등장 이후 URI는 URL, URN을 포함하는 상위 집합을 의미하게 되었습니다.

이번 글에서는 각 식별자의 등장 시점에 따라 정리해보면서 어떤 차이점이 있는지 알아보았습니다. URI와 URL은 개인적으로 어떤 차이가 있는지 명확하지 않았는데 이번 기회에 확실하게 정리가 된 것 같아 뿌듯하네요!

Related Articles

Github

Linkedin

Instagram