포스트

URI, URL, URN

URI가 상위 개념이고 URL(위치)과 URN(이름)이 그 하위 분류라는 관계, 그리고 scheme·authority·path·query·fragment로 이루어진 URI 구성과 URN이 의미 있는 경우를 정리한다.

URI, URL, URN

세 단어가 자주 섞여 쓰여서 헷갈리지만, 정확히는 URI가 상위 개념이고 URL과 URN은 그 아래의 두 갈래다.

관계

1
2
3
        URI (Uniform Resource Identifier)
        ┌──────────────┴──────────────┐
URL (어디서 찾는지)            URN (이름이 무엇인지)
  • URI: 자원을 가리키는 식별자 일반 명칭
  • URL: 자원의 위치를 가리키는 URI 하위 분류 (대부분 URL이다)
  • URN: 자원의 이름을 가리키는 URI 하위 분류 (위치 무관)

URI의 일반 구성

1
2
3
scheme://authority/path?query#fragment
  │       │        │     │      │
  http    example.com /a   ?q=1   #section
부분설명
scheme프로토콜 (http, https, ftp, mailto, urn)
authority호스트(+포트, +사용자정보)
path리소스 경로
query?key=value 형태 파라미터
fragment#로 시작, 클라이언트 측 위치(앵커)

URL은 위 형식 중 scheme + authority + path 같은 “위치 정보”를 채운 것이고, URN은 같은 URI 자리에 이름을 넣은 것이다.

URL 예시

1
2
https://example.com/users/42?tab=profile#summary
mailto:test@example.com

위치 또는 접근 방법이 들어 있다.

URN 예시

1
2
3
urn:isbn:0451450523
urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6
urn:oid:2.16.840.1.113883.4.642.1.1067

포맷은 urn:{namespace}:{namespace-specific-string}. 도서의 ISBN, 의료 표준 코드, UUID 등 “위치는 모르지만 이름은 영구적인” 식별자에 쓴다.

언제 URN이 의미 있나

리소스가 옮겨다닐 수 있는데 식별은 안정적이어야 할 때. 예를 들어 FHIR(의료 데이터 교환 표준)은 환자/관측 자원 식별자로 URN을 쓴다 — 어느 서버에 있는지와 무관하게 같은 자원임을 보장하려고.

이 글은 HL7 FHIR에서 자원 식별자로 URN이 쓰이는 걸 보고 정리한 것.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.