URI(Uniform Resource Identifier)
URI(Uniform Resource Identifier)는 웹 애플리케이션과 네트워크에서 리소스를 식별하는 데 사용되는 문자열이다. 웹 브라우징, API 호출, 데이터 전송 등 다양한 웹 애플리케이션과 관련된 작업에서 중요한 역할을 한다.
URI 구성 요소
URI는 여러 구송 요소로 이루어져 있으며, 다음과 같이 구성된다.
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?