[One-Day Tech Talk] URI VS URL VS URN

황제연·2025년 2월 21일
0

CS학습

목록 보기
11/193
post-thumbnail

서론

저번 RESTful한 API를 만드는 과정에서 URI와 URL을 혼동해서 쓰는 것을 발견했습니다
URI, URL, URN의 개념을 명확히 이해하고 혼동되는 일이 없도록 하기 위해 정리했습니다

URI vs URL vs URN

URI는 URL과 URN을 포함하고 있는 개념입니다

약자를 확인하면 다음과 같습니다

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

URI

URI는 인터넷에 있는 자원을 나타내는 유일한 주소입니다
URI는 인터넷에서 요구되는 기본조건으로 인터넷 프로토콜이 항상 붙어다닙니다

앞서 말했듯이 URI는 URL과 URN을 포함하는 상위개념입니다.

URI 표현방법

URI 참조 문법은 RFC 2396에 의해 처음 정의되었습니다.
이후 RFC 3986으로 완성되어 현재와 같은 형태를 지니게 되었습니다

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

일반 URI는 위와같은 형태를 지닙니다

각 구조에 대한 자세한 내용은 이후에 정리하겠습니다

URI 예시

https://velog.io/@hwangjeyeon/posts?category=cs&page=1#network

위와 같은 형태의 문자열을 URI라고 합니다.

URL

URL은 네트워크상에서 자원이 어디있는지 알려주기 위한 규약입니다
즉, 컴퓨터 네트워크와 검색에서 위치를 지정하는 웹 리소스에 대한 참조입니다
더 쉽게 말하면 웹 페이지를 찾기 위한 주소를 말합니다

보통 웹 사이트 주소로 알고 있지만 URL은 웹 사이트 주소뿐만 아니라 컴퓨터 네트워크 상의 자원을 모두 나타낼 수 있습니다

다만 그 주소에 접속하기 위해 해당 URL에 맞는 프로토콜을 알아야하고 그와 동일한 프로토콜로 접속해야 합니다
다시 말해 URL의 프로토콜은 반드시 Http가 아니라는 것입니다
HTTP가 아닌 FTP나 텔넷을 프로토콜로 사용한다면 그에 맞는 프로토콜을 사용해서 접속해야합니다

URL의 문법

URL의 문법은 URI의 문법과 유사합니다

scheme://<user>:<password>@<host>:<port>/<url-path>

RFC 1738에 정의되어 있으며, scheme에 따라 표현 방법이 다를 수 있습니다

일반적으로 사용하는 Http URL의 scheme는 다음과 같습니다

http://<host>:<port>/<path>?<searchpart>

URL의 예시

https://velog.io/@hwangjeyeon/posts
https://velog.io/@hwangjeyeon/posts?category=cs

위 두가지 예시가 URL의 대표적인 예시라고 할 수 있습니다

URL과 URI 비교

얼핏 문법만 보면 URI와 차이점을 찾을 수 없습니다
먼저 범위로 둘을 구분할 수 있습니다.
URI는 fragment까지 포함하지만 URL은 Query까지만 포함합니다

두번째는 목적으로 구분할 수 있습니다
URI는 자원을 식별하기 위한 목적이고, URL은 자원의 위치를 알기 위한 목적입니다
만약 자원의 위치를 알기위한 목적만이라면 URL이고, 주소에 식별자까지 포함하면 URI입니다

아래는 URL입니다

https://velog.io/@hwangjeyeon/posts

velog.io/@hwangjeyeon 에서 posts라는 경로를 나타냅니다.
posts는 리소스의 실제 위치이므로 이 주소는 URL입니다.

하지만 URL은 URI에 포함되는 개념이기 때문에, URL은 곧 URI라고 할 수 있습니다

아래는 URL을 포함한 URI입니다

https://velog.io/@hwangjeyeon/posts/1

기존 URL 경로에 /1이라는 식별자가 포함되었습니다
따라서 URL을 포함한 URI입니다

정리

위 예시로 정리하면 모든 URL은 URI가 될 수 있습니다
하지만 모든 URI는 URL일 수는 없습니다.
왜냐하면 URI에는 URN이라는 개념도 포함되기 떄문입니다.

URN

URN은 자원의 위치나 존재 여부를 지정하지 않고 단지 리소스를 참조하는 표준 형식의 URI입니다
즉, URN은 URI의 이름을 의미합니다
URN은 영속적이고 독립적인 자원을 위한 위치 지시자로 사용하기 위해
RFC 2141문서에 정의되었습니다

URN의 문법

URN의 문법은 베커스-나우르 표기법 형태로 표현합니다

<URN> = "urn:" <NID> ":" <NSS>

실제 사용할 때는

"urn:" <NID> ":" <NSS>

와 같이 표현됩니다

NID는 NAMESPACE-IDENDIFIER으로 식별하려는 리소스 카테고리를 나타내며
NSS는 NAMESPACE_SPECIFIC-STRING으로 리소스의 특정 식별자입니다

URN 예시

urn:isbn:12345678901234

URN은 위와같은 형태로 표현됩니다
위 예시는 ISBN 시스템을 통해 출판물을 식별하는 표현입니다

URN은 공공 표준 기관에서 발급하는 식별자로 일반유저는 잘 사용하지 않는 표현입니다

URN의 형식과 관련해서는 Auth0 컨텍스트와 SAML 엔티티에 대해 알아야 합니다
해당 내용은 이후 정리하겠습니다

URL, URN도 아닌 URI가 있을까?

URI는 URL와 URN을 포함하는 상위 개념입니다
그렇다면 URL도 아니고 URN도 아닌 URI는 있을까요?

![[URI,URN,URL.png]]
위 집합의 그림을 봤을 때, 마치 URL과 URN의 합집합이면서 공집합도 URI에 포함되는 것처럼 보입니다
하지만 더 정확히 하면 URI는 URL과 URN의 합집합이 전부입니다.

URI = URL ∪ URN

따라서 URL과 URN이 아닌 URI는 없습니다

정리

URI는 인터넷에 있는 자원을 나타내는 유일한 주소입니다

URL은 네트워크상에서 자원이 위치를 알려주기 위한 주소입니다

URN은 자원의 고유한 이름을 나타내기 위한 주소입니다

URI는 URL과 URN을 포함하는 개념입니다
모든 URL은 URI가 될 수 있지만 모든 URI는 URN이 될 수 없습니다

URI와 URL을 구분하는 방법은 크게 두가지가 있는데 범위와 목적입니다
fragment까지 포함되는 것은 URI, query까지만 포함되면 URL입니다
자원의 위치를 찾는 것이 목적이라면 URL, 자원의 식별까지 원한다면 URL을 포함한 URI입니다

모든 URL과 URN이 아닌 URI는 없습니다

참고:

profile
Software Developer

0개의 댓글