한국어
  • uri
  • url
  • urn

URI, URL, URN 개요

이 가이드는 URI, URL 및 URN에 대한 개요를 제공하며, 그 차이점과 사용 사례를 설명합니다.

Darcy Ye
Darcy Ye
Developer

웹 앱을 개발할 때 종종 다른 웹 서비스를 호출해야 합니다. 서로 다른 웹 서비스 간의 통신 및 연결을 구성할 때, 우리는 종종 URI, URL 및 URN의 개념을 접하게 됩니다. 보통 사용자들은 이들을 구분하기 어렵게 느끼며, 혼동하거나 잘못 사용하는 경우가 많습니다. 이 기사에서는 예제를 제공하고 그 차이점을 설명하여, 모든 사람이 기술 블로그나 문서 등을 읽을 때 이 개념들을 더 잘 이해하고 올바르게 해석하며 사용할 수 있도록 도움을 드리겠습니다.

URL이란 무엇인가요?

URL (Uniform Resource Locator) 은 인터넷상에서 리소스의 웹 주소 또는 위치를 제공합니다. 주로 웹 페이지, 파일 또는 서비스의 위치를 지정하는 데 사용됩니다. URL은 웹에서 리소스에 액세스하기 위한 표준화된 형식을 제공합니다. 이는 웹 브라우징, 링크 및 인터넷 통신의 핵심 구성 요소입니다.

URL은 리소스의 주소와 액세스에 사용되는 프로토콜을 함께 정의하는 여러 부분으로 구성됩니다. 아래 URL을 예로 들어 각 부분의 기능을 하나씩 설명해 보겠습니다.

  1. 스킴: 리소스에 액세스하는 데 사용되는 프로토콜 또는 스킴을 지정합니다. 예를 들어 HTTP (Hypertext Transfer Protocol), HTTPS (HTTP Secure), FTP (File Transfer Protocol), 또는 다른 것들 등이 이에 해당합니다.

    URL에서 스킴은 https 입니다.

  2. 호스트: 호스트는 리소스를 호스팅하는 서버의 도메인 이름 또는 IP 주소를 지정합니다.

    URL에서 호스트는 example.logto.io 입니다.

  3. 포트: (선택 사항) 포트는 리소스에 액세스하는 데 사용할 호스트의 특정 포트 번호를 나타냅니다. 포트가 명시되지 않은 경우, 주어진 스킴의 기본 포트로 설정됩니다.

    HTTP의 기본 포트는 80이고, HTTPS의 기본 포트는 443입니다.

    URL에서 포트는 8080 입니다.

  4. 경로: (선택 사항) 경로는 서버에서 리소스가 위치한 특정 위치 또는 디렉토리를 나타내며, 디렉토리와 파일 이름을 포함할 수 있습니다.

    URL에서의 경로는 /blogs/index.html 입니다.

  5. 쿼리 매개변수: (선택 사항) 쿼리 매개변수는 주로 동적 웹 애플리케이션에서 리소스에 전달되는 추가 매개변수입니다. 경로 뒤에 나타나며 ? 기호로 구분됩니다.

    URL에서의 쿼리 매개변수는 params1=value1&param2=value2 이며, 이는 보통 키-값 쌍의 형태로 표시되며 각 쌍은 & 기호로 구분됩니다. 실제 사용 시, 공백과 같은 문자를 피하기 위해 인코딩이 필요한 경우가 많습니다.

  6. 프래그먼트 식별자: (선택 사항) 이를 앵커라고도 하며, 리소스 내 특정 위치를 지정하는 데 사용됩니다.

    URL에서 앵커는 #introduction 입니다.

또한 예를 들어 파일 서비스 사용이나 웹 페이지에서 많은 "문의하기" 버튼은 다음과 같은 URL에 연결됩니다:

  • ftp://documents.logto.io/files/legal/soc_ii.pdf
  • mailto:[email protected]?subject=Enterprise%20quota%20request

URI란 무엇인가요?

URI 는 "Uniform Resource Identifier" 의 약자입니다. 이는 웹 페이지, 파일 또는 서비스와 같은 특정 리소스를 식별하는 문자열입니다. URI는 표준화된 형식을 사용하여 리소스를 고유하게 식별하고 위치를 지정하는 방법을 제공합니다.

URI는 주로 두 가지 구성 요소로 이루어져 있습니다:

  1. 스킴 (Scheme): 리소스에 액세스하는 데 사용되는 프로토콜 또는 스킴을 나타냅니다.
  2. 리소스 식별자 (Resource Identifier): 액세스하거나 참조되는 특정 리소스를 식별합니다. 리소스 식별자의 형식은 사용된 스킴에 따라 다릅니다.

문법적 관점에서, URI는 대체로 RFC 3986 에 명시된 대로 URL과 동일한 형식을 따릅니다.

URI 형식은 URL과 유사하지만, 웹에서 어떤 리소스에 대한 액세스를 보장하지는 않습니다. 이러한 형식을 사용하면 네임스페이스 이름 충돌을 줄일 수 있습니다.

앞서 설명드린 URL은 리소스를 식별할 뿐만 아니라 그 리소스의 위치를 찾는 데 도움을 줍니다. 따라서 실제로 URL은 URI의 올바른 하위 집합입니다.

URN이란 무엇인가요?

URN (Uniform Resource Name) 은 URL, URI보다 덜 사용될 수 있습니다. 이 용어는 리소스를 영구적으로 식별하는 범위를 나타내며, 해당 리소스가 더 이상 존재하지 않더라도 식별할 수 있습니다.

URL과 달리, URN은 리소스의 위치를 정보를 제공하지 않으며, 순수 URI와 마찬가지로 단순히 그것을 식별합니다. 특정하게, URN은 "urn" 스킴을 가진 URI의 한 유형이며 RFC 2141 에 설명된 다음과 같은 구조를 가집니다:

<URN>:<NID>:<NSS>

  1. URN: 보통 urn 입니다.
  2. 네임스페이스 식별자 (Namespace Identifier, NID): 고유한 네임스페이스 또는 URN을 정의하고 관리하는 식별 시스템을 나타냅니다. 고유 식별자의 배경을 제공하며 그 식별자의 고유성을 보장합니다. 네임스페이스의 예로는 ISBN (국제 표준 도서 번호) 등이 있습니다.
  3. 네임스페이스 특정 문자열 (Namespace Specific String, NSS): 지정된 네임스페이스 내에서 고유하게 리소스를 식별하는 문자열입니다. 이 식별자 자체는 리소스의 위치나 액세스 방법에 대한 정보를 제공하지 않습니다.

예를 들어, CSAPP 이라는 매우 유명한 컴퓨터 시스템 소개 책은 ISBN 번호를 URN urn:isbn:9780134092669 로 표현합니다.

URN은 SAML 프로토콜에서 어서션에 해당하는 URN urn:oasis:names:tc:SAML:2.0:assertion 과 같은 다양한 표준 프로토콜에서 자주 사용됩니다.

소프트웨어 엔지니어링에서 특정 목적을 위해 시스템 내에서도 URN을 정의할 수 있습니다. 예를 들어, Logto에서 Organization을 활성화하려면 SDK를 사용할 때 config에 urn:logto:scope:organizations 범위를 추가해야 합니다. 각 Organization도 고유한 URN urn:logto:organization:{orgId} 을 갖습니다.

결론

URI, URL, URN 간의 관계는 다음 벤다이어그램으로 설명할 수 있습니다:

Relations

URI, URL 및 URN 모두 다른 리소스를 식별하는데 사용될 수 있지만, URL만이 리소스의 위치를 정확하게 지정할 수 있습니다.

URI 및 URL은 HTTP, HTTPS, FTP와 같은 다양한 스킴을 지원할 수 있지만, URN은 urn 스킴만 지원하는 것으로 간주할 수 있습니다.

모든 URL 또는 URN은 URI이지만, 모든 URI가 URL 또는 URN인 것은 아닙니다.