URI란?
URI란 Uniform Resource Identifier의 약자이다. 즉 아래와 같이 해석될 수 있다.
URI는 리소스를 구분할 수 있는 식별자이다.
URI를 통해 우리가 접근해야 하는 리소스가 어디 있는지 알 수 있으며, URI는 인터넷, 모바일 기기 등 다양한 곳에서 사용된다.
보통 우리는 인터넷에서 리소스에 접근하기 위해, 다음과 같은 URI를 사용한다.
https://kotlinworld.com/94
위 URI는 통신 방식인 https, 도메인 kotlinworld.com, 리소스 디렉토리 94번 총 3가지로 이루어져 있다.
위 형식의 URI를 처리할 수 있는 웹 브라우져 프로그램에 URI를 전송하면, kotlinworld.com 도메인이 가리키는 IP Address의 94번째 글에 접근할 수 있게 된다.
다양한 형태의 URI
우리는 위의 주소 형식의 URI에 익숙해져 있다. 하지만 위의 방식만 URI의 형식이 아니다. 안드로이드 기기, IOS 기기 등 다양한 모바일 기기에서도 각자의 URI를 형식이 지정되어 있으며, 이를 이용해 OS 내부의 리소스에 접근할 수 있다.
예를 들어 안드로이드 내부의 전화 리소스에 접근한다고 해보자. 그러면 다음과 같은 Intent를 이용해 전화 리소스에 접근할 수 있는 URI를 만들어낼 수 있다.
val uri = Uri.parse("tel:010xxxxxxx")
즉, URI의 역할은 리소스(전화, 지도, 이미지, 텍스트)에 접근할 수 있는 유일한(Uniform) 식별자(Identifier)을 뜻한다. URI를 수신하는 기기는 해당 URI에 맞게 데이터를 반환한다.
URI와 URL, URN의 관계
우리는 방금 아래와 같은 링크를 URI라고 배웠지만, 보통은 이를 URL이라 부른다.
https://kotlinworld.com/94
그 이유는 우리가 리소스를 식별할 때는 경로(Location)을 기반으로 식별하는 것이 일반적이기 때문이다. URI란 무엇인지 URL과 어떤 관계를 가지고 있는지 아래에서 알아보도록 하자.
URL과 URN을 포함하는 URI
URI은 리소스를 식별할 수 있는 방식으로 리소스(Resource)를 식별(Identify) 할 수 있는 방식은 URL과 URN 두 가지가 있다.
URL은 리소스를 리소스의 경로(Location)을 기반으로 식별하는 하는 것이고, URN은 리소스를 리스소의 이름(Name)을 기반으로 식별 하는 것이다. 따라서 URL과 URN모두 URI의 조건을 갖추었으므로 URL은 URI이며, URN도 URI이다.
URL과 URN는 URI의 종류이다.
하지만, URN은 실제로 사용되는 경우가 거의 없어 대부분 URI는 URL과 같다고 봐도 무방하다.
그렇다면 URL이 어떻게 이루어져 있는지 살펴보도록 하자.
URL
URL은 Uniform Resource Locator의 약자로, 리소스가 있는 유일한 경로(Location)에 대한 식별자를 뜻한다. URL 식별자는 일반적으로 4가지 요소로 이루어져 있는데, Scheme이라 불리는 Protocol, HostName, Port, 추가 정보(Path or Query)이다.
*일반적으로 4가지 요소이지만, 더욱 많은 요소가 들어갈 수 있다.
Protocol(Scheme)
Protocol 부에서는 어플리케이션 계층의 통신 규약을 명시한다. 대표적으로 FTP, HTTP, HTTPS 등의 방식이 있다.
Host Name
Host Name은 보통 도메인 이름이나 IP Address가 된다. 차후에 다루겠지만, 하나의 IP Address에서 여러 Host Name에 대한 처리를 하는 경우도 있으므로 도메인 이름을 Host Name이라고 이해하는 것이 좋다. 물론 IP Address가 Host Name이 될 수도 있다.
Port
Port는 메세지를 받아야 하는 프로세스가 있는 위치이다. Port에 대해서는 kotlinworld.com/95 글을 참조한다.
추가 정보(Path or Query)
추가정보는 리소스가 있는 Path나, 리소스를 반환하는 질의(Query)를 날리는데 사용된다. 추가 정보를 통해 유일한 식별자가 완성된다. 글을 반환 받아야 하는데 아무런 추가 정보가 없다면, 어떠한 추가 정보를 반환 받아야 하는지 알 수 없을 것이다.
URN
URN(Uniform Resource Name)은 리소스를 이름(Name)으로 식별하는 것이다. 실제로 URN은 사용 하는 예시는 책을 분류하기 위해 만든 ISBN 정도만 우리에게 익숙하다. 거의 사용될 일이 없으니 리소스를 이름으로 식별한 다는 것만 기억하자.
정리
- URI는 리소스에 대한 식별자 모두를 포괄하는 의미이다.
- URL, URN은 리소스에 대한 식별자이다. 즉, URL, URN 모두 URI이다.
- URL은 식별자를 경로(Location) 형태로 쓰는 것을 뜻한다.
- URN은 식별자를 이름(Name) 형태로 쓰는 것을 뜻한다.