URI

서린·2024년 3월 7일

혼자개발

목록 보기
63/82

웹을 지탱하는 기술 - 멘토르

URI의 중요성

URI(Uniform Resource Identifier): 유니폼 리소스 식별자 = 리소스를 통일적으로 식별하는 ID
통일적이라는 의미는 모두가 같은 규칙을 따르고 있다는 의미
식별자란 어떤것을 그 밖의 다른것들과 구별하여 가리키기 위한 이름/ID를 말한다
URI를 사용하면 웹상에 존재하는 모든 리소스를 한결같은 방식으로 보여줄 수 있다 = 모든 리소스에 간단하게 접속할 수 있다

URI의 구문

URI의 스펙은 RFC 3986

간단한 uri 예
http://blog.example.com/entries/1

이 URI를 구성하는 파트

  • URI Scheme: http
  • 호스트명: blog.examples.com
  • 패스: /entries/1

URI는 URI스키마로 시작된다
그 URI가 이용하는 프로토콜을 나타내는 것이 일반적이다
예시에서는 리소스에 HTTP로 접근할 수 있다는 것을 나타낸다
스키마와 그 뒤 내용은 ://로 구분된다

호스트명은 DNS(Domain Name System)에서 이름을 해석할 수 있는 도메인명이나 IP주소로 인터넷에서 반드시 일의성을 가지게 된다
호스트명 뒤에는 계층화를 나타내는 경로가 이어진다 경로는 호스트 안에서 오로지 하나의 리소스를 가리킨다

인터넷 상에서는 유일한 호스트명의 구조와 호스트 내에서 유일한 계층적인 경로를 결합해서 어떤 리소스의 URI가 다른 리소스와 절대로 중복되지 않도록 되어있다

좀 더 복잡한 예시
http://yohei:pass@blog.example.com:8000/search?q=test&debug=true#n10
  • URI Scheme: http
  • 사용자 정보: yohei:pass
  • 호스트명: blog.example.com
  • 포트번호: 8080
  • 패스: /search
  • 쿼리 파라미터: q=test&debug=true
  • URI 프래그먼트: #n10

사용자 정보는 이 리소스에 접근할 때 이용할 사용자 이름과 패스워드로 구성된다

구분문자인 @ 다음에는 호스트 정보인 호스트명과 포트번호로 구성된다
포트번호는 이 호스트에 엑세스할 때 프로토콜이 사용할 TCP의 포트번호를 나타낸다
포트번호를 생략할 경우 각 프로토콜의 디폴트 값이 사용된다(HTTP의 디폴트 값은 80번)

패스 뒤에는 구분문자? 쿼리문에서는 이름=값 형식으로 된 쿼리가 이어진다
q=test&debug=true가 각각 쿼리이다 하나 이상의 쿼리의 집합을 쿼리파라미터, 쿼리 문자열 이라고 한다 쿼리 파라미터는 클라이언트에서 동적으로 URI를 생성할 때 사용한다

URI 프래그먼트는 #앞에 문자열로 표현한 URI가 가리키는 리소스 내부에서 더 세세한 부분을 특정할 때 이용한다 예를들어 이 리소스가 HTML 문서인 경우 id 속성 값이 'n10'인 요소를 나타내게 된다

절대 URI와 상대 URI

URI의 패스는 UNIX의 파일 시스템과 같은 계층구조를 가지고 있다
/를 루트로 하고 디렉터리 명을 /로 구분하고 필요하면 마지막에 파일명을 연결하는 기법

OS의 파일 시스템에서는 루트에서부터 전체 경로를 기술한 것을 '절대경로(Absolute Path)'라고 한다

파일 시스템의 경우 매번 절대 경로를 기술하면 너무 길어지기 때문에 '상대경로(Relative Path)'로 나타내는 것이 일반적이다

URI도 절대 URI와 상대 URI가 있는데, 상대 URI는 URI 스키마와 호스트명을 생략하고 경로만으로 표현한다

절대 URI: http://example.com/foo/bar
상대 URI: /foo/bar

상대URI의 기준이 되는 URI가 어디인지 알 수 없기 때문에 클라이언트가 바르게 해석할 수 없다
그래서 기점이 되는 Base URI를 지정해야한다
상대URI를 절대URI로 변환하기 위해서는 Base URI가 필요하다

URI, URL, URN

URI(Uniform Resource Identifier): 리소스를 식별하는 것
URL(Uniform Resource Locator): 리소스의 위치를 나타내는 것
URN(Uniform Resource Name): 리소스의 이름을 나타내는 것

URI는 URL과 URN을 총칭하는 이름이다
URL은 도메인을 갱신하지 않았거나 서버가 어떤 장해로 인해 번경되면 액세스 할 수 없게 되는 문제가 있는데, 이 문제에 대응하기 위해 도메인명과 독립적으로 리소스에 ID를 할당하기 위한 스펙을 가진 URN이 생겼다

URN을 사용하면 리소스에 도메인명과 독립된 이름을 붙일 수 있다 = 도메인명에 의존하지 않는다
URN은 서버명과 프로토콜이 들어있지 않기 때문에 리소스를 가져올 수 없어서 웹에서 보급되어있지 않다

0개의 댓글