URI와 URL은 어떤 차이점이 있을까?
컴퓨터를 사용하는 사람이라면 URL 이란 용어를 자주 들어보셨을 겁니다. 그런데 코딩을 하다보면 URL이 아닌 URI 를 더 많이 접하게 될텐데 이 URL 과 URI 는 무슨 차이가 있을까요? 또 URN 은 무엇일까요?
URI (Uniform Resource Identifier)
URI는 우리말로 '통합 자원 식별자' 라고 합니다. 웹 기술에서 사용되는 리소스를 식별하는 고유한 문자 시퀀스입니다.
URI는 리소스의 위치(URL) 또는 이름(URN)으로 리소스를 식별합니다.
Uniform : 리소스를 식별하는 통일된 방식
Resource : 자원, URI로 식별할 수 있는 모든 것
Identifier : 다른 항목과 구분하는데 필요한 정보
URI구분은
https://en.wikipedia.org/wiki/Uniform_Resource_Identifier#Syntax
이렇게 볼 수 있습니다. 즉 URI는 전체 라고 봐도 무방합니다.
URL (Uniform Resource Locator)
URL은 네트워크상에서 리소스의 위치를 나타내기 위한 규약 입니다.
URL은 일반적으로 웹 사이트 주소로만 알고있지만, 웹 사이트 주소뿐만 아니라 컴퓨터 네트워크 상의 자원을 모두 나타내는 표기법입니다. 따라서 해당 주소로 접속하려면 URL에 맞는 프로토콜(http, ftp, smb 등)을 알아야하고 그와 동일한 프로토콜로 접속해야 합니다.
URN (Uniform Resource Name)
URN은 우리말로 '통합 자원 이름' 라고 하고 urn:<NID>:<NSS> 형식으로 사용할 수 있습니다.
예를 들어, 국제 표준 도서 번호(ISBN) 시스템에서 ISBN 0-486-27557-4 의 식별번호의 URN은 urn:isbn:0-486-27557-4 라고 할 수 있습니다.. 여기서 isbn은 네임스페이스 식별자<NID>이고 0-486-27557-4은 네임스페이스 문자열<NSS> 입니다.
URI / URL/ URN 의 구분
사실 URI, URL, URN에 대해서 찾아보고 공부하면서 개념이 잘 잡히지 않았습니다. 왜냐하면 사람마다 정의하고 있는 내용이 조금씩 상이했기 때문입니다.
stackoverflow 인용된 이미지
다른 블로거의 이미지
그래서 저는 위키피디아, stackoverflow, w3c 등의 페이지들을 찾아다니며 조금더 정확한 해답을 얻고싶었습니다.
그러던 중 w3c에서 글 하나를 보게되었습니다.
URI, URL, URN의 구분에 대해서 W3C에서는 차이에 대한 혼란이 있다는것을 확인했고 해당 내용의 문서를 발행했다는 글이었습니다.
URIs, URLs, and URNs: Clarifications and Recommendations 1.0
This paper addresses and attempts to clarify two issues pertaining to URIs, and presents recommendations. Section 1 addresses how URI space is partitioned and the relationship between URIs, URLs, and URNs. Section 2 describes how URI schemes and URN namesp
www.w3.org
이 문제를 클래식한 관점과 현대적인 관점으로 나뉘면서 혼란이 생긴건데 요약해보자면
클래식한 관점에서는 식별자(URI)는 두 개(리소스의 위치(URL) 와 해당 이름(URN) )또는 그 이상의 클래스 중 하나로 분류될것이라고 가정했는데,
시간이 지나면서 현대적인 관점으로는 URI 유형의 집합 중 하나로 캐스팅할 필요가 없다는 견해가 생겼습니다.
URL은 URI의 공식적인 분할이 아닌 리소스가 가질 수 있는 기본 액세스 메커니즘(위치)의 표현을 통해 식별하는 URI의 유형으로 본다는건데요 (번역이 틀렸다면 죄송합니다..)
결국 URL과 URN에 대한 공식 하위구분을 인정하기보다는 URI라는 용어의 우선 순위를 인정한다는건데요.
따라서 URI를 URL, URN 등으로 다양한 유형으로 엄격하게 분할하는 것은 유용하지 않다고합니다.
즉, 시간이 지나면서 용어 구분에 대한 의미가 사라졌고 URI의 용어를 우선적으로 사용하는게 올다고 생각됩니다.
URL Standard
Hosts are percent-decoded before being processed when the URL is special, which would result in the following host portion becoming "exa#mple.org" and thus triggering this error. "https://exa%23mple.org"
url.spec.whatwg.org
아니 그래서 URI,URL, URN은 어떻게 구별해야 하냐구요
리소스를 문자로 식별하면 URN
리소스를 문자로 찾으면 URL
이 두개는 URI 범주안에 있다.
라고 이해하면 될것같습니다
urn:isbn:0-486-27557-4 이 문자는 URI이지만 구체적으로 텍스트 이름을 지정 하기 때문에 URN 입니다.
file://hostname/myname/example.pdf 이 문자는 URI이지만 구체적으로 텍스트를 찾기 때문에 URL 입니다.
https://example.com/index.html 이 문자는 텍스트를 찾기 때문에 URI 이면서 URL 입니다.
https://example.com/index.html?id=100 이 문자도 쿼리파라미터를 포함해서 텍스트를 찾기 때문에 URI 이면서 URL 입니다.
공부하면서 같이 글을 작성하려니까 많이 빼먹은부분이 있는것 같습니다. 부족하거나 틀린부분이 있다면 언제든지 지적해주세요!
참고
https://www.w3.org/TR/uri-clarification/
https://en.wikipedia.org/wiki/Uniform_Resource_Identifier#cite_note-FOOTNOTEWhitehead199838-43
https://url.spec.whatwg.org/#url-apis-elsewhere
https://stackoverflow.com/questions/176264/what-is-the-difference-between-a-uri-a-url-and-a-urn%EF%BB%BF
https://www.rfc-editor.org/rfc/rfc8141.html#section-1.1