![thumbnail](/static/e84f78368c3f50e43b9c80b1d57fe398/b1abc/240610_uri-thumbnail.png)
URL은 익숙한데, URI는?
URL은 일상생활에서도 웹 주소를 가리킬 때 많이 쓰이기 때문에 개발자가 아닌 사람에게도 익숙한 용어이다. 개발 공부를 하다 보면 가끔 URI라는 용어도 혼용해서 사용하는 것 같은데, URL과 이름도 비슷한 URI는 도대체 무엇인가?
URL(Uniform Resource Locator)
URL은 인터넷상에서 자원(리소스)의 위치를 나타내는 표준 주소 체계이다. 리소스+프로토콜 형식으로 구성된다.
URL 구조
![URL 구조 URL 구조](/static/d06a437c96f3b70abd6b2fd016fb6bd7/dface/240610_url-structure.png)
URL은 다음과 같이 분류할 수 있다.
구성 | 설명 | e.g. |
---|---|---|
Scheme | 자원에 접근하기 위해 사용되는 프로토콜 | http, https etc… |
Host | 자원이 위치한 서버의 도메인 이름이나 IP 주소 | www.example.com |
Port | - 서버에서 자원에 접근하는 데 사용되는 특정 프로토콜 포트 번호 - 기본 포트는 생략될 수 있음. http의 기본 포트 80, https의 기본 포트 443 | 443 |
Path | - 서버 내에서 자원의 위치를 나타내는 경로 - directory와 file 이름으로 구성됨 | /path/to/resource |
Query String | - 자원에 대한 선택적 추가 매개변수 - ?로 시작하여 &로 구분된 key-value 쌍으로 구성 | ?key1=value1&key2=value2 |
Fragment | - 문서 내 특정 section을 나타냄 - 일반적으로 #로 시작 | #section1 |
URL = 링크(link)?
![URL QnA URL QnA](/static/24e73046803c2c79b0a3c5245516715f/dface/240610_url-qna.png)
일반적으로 URL은 링크와 같은 의미로 사용되곤 하지만, 정확히 동의어는 아니다.
URL
- 웹에서 특정 자원(페이지, 이미지, 동영상 등)을 가리키는 문자열 주소
- 프로토콜(http, https), 도메인 이름(www.example.com), 경로(/path/to/resource), 쿼리 스트링(?query=string) 등으로 구성
- e.g. https://www.example.com/path/to/resource?query=string
링크(Link)
- 웹 페이지에서 사용자가 클릭할 수 있는 요소
- 클릭 시 다른 페이지나 자원으로 이동
- 일반적으로 HTML의
<a>
태그로 작성되며, href 속성에 URL이 포함됨
<a href="https://www.example.com">Example</a>
URI(Uniform Resource Identifier)
URI는 이름 그대로 인터넷상에서 이름이나 고유 자원을 식별하는 일련의 문자열이다. URI는 URN과 URL을 포함한다.
![URI URI](/static/bb27b1d121bfd7d75a4ba3d45e2bf738/dface/240610_uri.png)
-
URN(Uniform Resource Name): 자원(리소스)의 이름. 위치 X e.g. https://www.example.com/index.html
-
URL(Uniform Resource Locator): 자원(리소스)의 위치 e.g. urn:isbn:0123456789
URI가 URL의 상위 집합이므로, 모든 URL은 URI이지만 모든 URI는 URL이 아니다.
예시로 도서관에서 책을 찾아야 한다고 가정해 보자.
![URI 비유 URI 비유](/static/5ad543d1a52ba1761616b2fd1bc1fbb7/dface/240610_uri-compare.png)
-
URN은 책의 위치와 상관없이 특정 책을 식별할 수 있는 정보이다. e.g.
ISBN 123-4-56-789100-0
-
URL은 특정 책이 물리적으로 어디에 위치하는가에 대한 정보이다. e.g.
도서관 A-02 서가 3번째 칸
-
URI 역시 책을 식별할 수 있는 정보로, URN과 URL을 포함하는 상위 범위라고 생각하면 된다. e.g. 도서관의 카탈로그 시스템에서 관리하는 각 고유한 책의 식별 코드.
도서관 식별코드 0123
URN(Uniform Resource Name)
URN은 URL과 달리 특정 자원의 위치에 대한 정보를 제공하지 않고 자원을 식별하기만 한다. 그래서 자원의 위치나 상태가 변하더라도 URN은 변하지 않는다.
주로 도서관 시스템의 ISBN 또는 RFC 문서에 사용된다.
URN 구성
URN은 아래와 같이 구성된다.
urn:<NID>:<NSS>
-
NID(Namespace Identifier): 네임스페이스를 식별하는 이름
-
NSS(Namespace Specific String): 네임스페이스 내에서 자원을 고유하게 식별하는 문자열
e.g.)
urn:isbn:0123456789
urn:ietf:rfc:2648
NID: isbn / ietf NSS: 0123456789 / rfc:2648
정리
URI(Uniform Resource Identifier)
- 자원 식별
- 모든 URL과 URN은 URI의 부분 집합
URN(Uniform Resource Name)
- 자원 이름으로 식별
- 자원의 위치와 관계없이 자원을 영구적으로 식별
- urn:<namespace>:<name>
URL(Uniform Resource Locator)
- 자원 위치 제공
- 리소스+프로토콜 형식
- https://www.example.com/path/to/resource?key=value#section1
References