URI(Uniform Resource Identifier)
URI(Uniform Resource Identifier)는 웹 애플리케이션과 네트워크에서 리소스를 식별하는 데 사용되는 문자열이다. 웹 브라우징, API 호출, 데이터 전송 등 다양한 웹 애플리케이션과 관련된 작업에서 중요한 역할을 한다.
URI 구성 요소
URI는 여러 구송 요소로 이루어져 있으며, 다음과 같이 구성된다.
== URL ==
userinfo host port
┌──┴───┐ ┌──────┴──────┐ ┌┴┐
https://john.doe@www.example.com:123/forum/questions;param1=value1?tag=networking&order=newest#top
└─┬─┘ └─────────────┬────────────┘└───────┬──────┘└──────┬─────┘└────────────┬────────────┘ └┬┘
scheme authority path parameter query fragment
== URN ==
urn:oasis:names:specification:docbook:dtd:xml:4.1.2
└┬┘ └──────────────────────┬──────────────────────┘
scheme path
scheme
http, https, ftp, file, ...
리소스에 접근하기 위한 프로토콜을 가리킴
userinfo
user:password
서버에 접근할 때 사용자 정보(FTP 같은 몇몇 프로토콜에서 사용)
host
www.google.com
호스트명 또는 IP주소
port
80, 443, 8080
접근 포트(일부 port 생략 가능)
path
/search
리소스 경로
parameter
;param1=value1
리소스에 대한 추가적인 매개변수 또는 정보를 전달하는 데 사용되며, ;
로 시작함
query
?q=hello&hl=ko
key=value 형태, ?
로 시작 &
로 구분, query parameter
fragment
#bookmark
리소스 내의 특정 조각을 가리키는데 사용됨 (서버에 전송하지 않고, 클라이언트에서 리소스를 확인한 뒤 해당 위치로 이동)
URI/URL/URN

각 단어의 의미는 다음과 같다.
Uniform: 리소스 식별하는 통일된 방식
Resource: 자원, URI로 식별할 수 있는 모든 것(제한 없음)
Identifier: 다른 항목과 구분하는데 필요한 정보
Locator: 리소스가 있는 위치를 지정
Name: 리소스에 이름을 부여
결국 세 개념을 다음과 같이 정리할 수 있다.
URI: 리소스를 식별하는 통합 자원 식별자
URL: 위치 기반 자원 식별, 특정 서버의 한 리소스에 대한 구체적인 위치를 서술
URN: 이름 기반 자원 식별, 콘텐츠를 이루는 한 리소스에 대해, 그 리소스의 위치에 영향을 받지 않는 유일무이한 이름
URN은 아직 널리 채택되지 않았으며, 현재는 URL을 사용하는 것이 일반적이다.
URI 인코딩
역사적으로 컴퓨터 애플리케이션이 US-ASCII 문자 집합을 사용해왔고, URI도 마찬가지로 US-ASCII 문자 집합을 사용한다.
7비트로 표현되는 128개까지만 표현 가능(128개의 문자로는 영어와 숫자, 일부 특수문자만 표현)
그외에 한글과 같은 다른 언어나 특수문자는 표현할 수 없음
또한 몇 몇 문자는 이미 특별한 의미로 예약어로 사용되고 있음
예약어들과 특수문자, 그리고 다른 언어를 표현하기 위해 이스케이프 문자를 통한 인코딩을 사용하게 되었다.
예약되지 않은 문자
영숫자, -
, _
, .
, ~
URI에서 특별한 의미를 가지지 않음
예약된 문자
?
, #
, &
, =
, +
, /
, :
, ;
, @
, !
, $
, '
, (
, )
, *
, ,
, [
, ]
,
URI에서 특별한 의미를 가짐
이스케이프 문자
%
예약된 문자를 표현하기 위해 사용
이스케이프는 예약된 문자나 다른 지원하지 않는 글자들을 안전하게 URI에 삽입하기 위해 %
문자와 16진수 아스키 코드 값을 사용한다. (%2B
= =
, %7E
= ~
)
URL의 한계
URL은 인터넷에 있는 리소스를 나타내는 유일한 방법이지만, URL만 가지고는 리소스를 식별하는데 한계가 있다.
만약 리소스가 옮겨지게 된다면 예전 시점에 기존 리소스를 가리키는 URL은 더 이상 유효하지 않게 되어 원래의 리소스를 찾을 수 없게 됨
이를 해결하기 위해 URN을 도입하는 등의 시도가 있었지만, 널리 사용되고 있는 URL을 대체하기 위해서는 많은 시간이 필요하고 많은 비용이 들어가기 때문에 사용하지 않게 되었다.
참고자료
Last updated
Was this helpful?