Network URI(Uniform Resource Identifier) 정의 및 하위요소의 특징

1. URI(Uniform Resource Identifier)

URI에 대한 개념을 살펴보기에 앞서서 국제 인터넷 표준화 기구(IETF)에 표준스펙으로 기재되어있는 URI,URL,URN의 개념에 대해서 알아보겠습니다.

국제 인터넷 표준화 기구 IETF 1.1.3 URI 표준 스펙

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
1.1.3.  URI, URL, and URN

`A URI can be further classified as a locator, a name, or both.` The
`term "Uniform Resource Locator" (URL) refers to the subset of URIs
that, in addition to identifying a resource, provide a means of
locating the resource by describing its primary access mechanism
(e.g., its network "location").` The term "Uniform Resource Name"
(URN) has been used historically to refer to both URIs under the
"urn" scheme [RFC2141], which are required to remain globally unique
and persistent even when the resource ceases to exist or becomes
unavailable, and to any other URI with the properties of a name.

An individual scheme does not have to be classified as being just one
of "name" or "locator". Instances of URIs from any given scheme may
have the characteristics of names or locators or both, often
depending on the persistence and care in the assignment of
identifiers by the naming authority, rather than on any quality of
the scheme. Future specifications and related documentation should
use the general term "URI" rather than the more restrictive terms
"URL" and "URN" [RFC3305].

국제 인터넷 표준화 기구 IETF 1.1.3 URI 표준 스펙 요약

  1. 국제 인터넷 표준화 기구(IETF)에 표준스펙으로 기재된 내용을 간략히 살펴보면 uri는 로케이터(locator), 이름(name)또는 둘다 추가로 분류 될 수 있습니다.

  2. URL 이라는 용어는 리소스를 식별하는 것 이외에도 기본 Access 매커니즘을 설명하여 리소스를 찾는 수단을 제공하는 URI의 하위집합을 나타낸다고 표기되어있습니다.

2. URI(Uniform Resource Identifier)의 구성

URI는 큰 상위 집합으로 내부에 URL(Resource Locator)와 URN(Resource Name)을 포함하고 있습니다.

URL(Resource Locator)

kgh://google.com:8080/member?userName=kgh#hello 라는 URL이 있다고 가정하겠습니다.

URL 하위요소 의미
kgh scheme
google.com:8080 authority
member path
userName=kgh query
hello fragment

URN(Unifrom Resource Name)

URN 하위요소 의미
urn:google.com:user:kgh:hello scheme

3. URI(Uniform Resource Identifier) 의미

  1. Uniform

리소스를 식별하는 통일된 방식

  1. Resource

자원, URI로 식별할 수 있는 모든것

  1. Identifier

다른 항목과 구분하는데 필요한 정보

4. URL(Uniform Resource Locator)과 URN(Uniform Resource Name) 의미

URL은 Locator를 뜻하며 리소스가 있는 위치를 지정하고 URN은 Name을 뜻하여 리소스에 이름을 부여합니다.
즉, 위치는 변할 수 있지만, 이름은 변할 수 없습니다. 마치 우리가 도서관에서 하나의 책을 찾기 위해 isbn URN을 부여 받아 실제 리소스를 찾는다고 가정하면 urn:isbn:URN의 형식으로 나타낼 수 있습니다. 이때는 URN이름만으로는 실제 리소스를 찾는방법이 보편화 된것이 아닙니다.

5. URL 분석

Request URL:

https://www.google.com/search?newwindow=1&hl=ko&sxsrf=ALeKk02qBVrTCmX_lr_o1zJg1bIToVFKAw%3A1610600469098&source=hp&ei=FdD_X7K7A4T6wAOW9aiYDA&q=hello&oq=hello&gs_lcp=CgZwc3ktYWIQAzIECCMQJzIECCMQJzIICAAQsQMQgwEyBAgAEEMyAggAMgIIADICCAAyBAgAEEMyAggAMgQIABBDOgcIIxDqAhAnOgUIABCxAzoHCAAQsQMQQ1D49TNY-f0zYNj_M2gBcAB4AIABfIgB2QSSAQMwLjWYAQCgAQGqAQdnd3Mtd2l6sAEK&sclient=psy-ab&ved=0ahUKEwjymdWm0pruAhUEPXAKHZY6CsMQ4dUDCAc&uact=5

다음과 같은 구글에서 hello라고 친 결과에 따른 검색 URL이 있다고 가정하고 설명을 진행하겠습니다.

5.1. URL 문법

scheme://[userinfo@]host[:port][/path][?query][#fragment]
https://www.google.com:443/search?newwindow=1&hl=ko&sxsrf=ALeKk02qBVrTCmX_lr_o1zJg1bIToVFKAw%3A1610600469098&source=hp&ei=FdD_X7K7A4T6wAOW9aiYDA&q=hello&oq=hello&gs_lcp=CgZwc3ktYWIQAzIECCMQJzIECCMQJzIICAAQsQMQgwEyBAgAEEMyAggAMgIIADICCAAyBAgAEEMyAggAMgQIABBDOgcIIxDqAhAnOgUIABCxAzoHCAAQsQMQQ1D49TNY-f0zYNj_M2gBcAB4AIABfIgB2QSSAQMwLjWYAQCgAQGqAQdnd3Mtd2l6sAEK&sclient=psy-ab&ved=0ahUKEwjymdWm0pruAhUEPXAKHZY6CsMQ4dUDCAc&uact=5

URL의 기본형식은 위와 같이 구성되어있고, 이것을 URL을 표현하면 다음과 같습니다.

  • 프로토콜(https)
  • 호스트명(www.google.com)
  • 포트 번호(443) - https는 443포트를 갖습니다.
  • 패스(/search)
  • 쿼리 파라미터(newwindow=1&hl=ko&sxsrf=ALeKk02qBVrTCmX_lr_o1zJg1bIToVFKAw%3A1610600469098&source=hp&ei=FdD_X7K7A4T6wAOW9aiYDA&q=hello&oq=hello&gs_lcp=CgZwc3ktYWIQAzIECCMQJzIECCMQJzIICAAQsQMQgwEyBAgAEEMyAggAMgIIADICCAAyBAgAEEMyAggAMgQIABBDOgcIIxDqAhAnOgUIABCxAzoHCAAQsQMQQ1D49TNY-f0zYNj_M2gBcAB4AIABfIgB2QSSAQMwLjWYAQCgAQGqAQdnd3Mtd2l6sAEK&sclient=psy-ab&ved=0ahUKEwjymdWm0pruAhUEPXAKHZY6CsMQ4dUDCAc&uact=5)

5.2. URL Scheme

scheme://[userinfo@]host[:port][/path][?query][#fragment]

URL scheme

  • 주로 프로토콜로 사용되며 프로토콜은 어떤 방식으로 자원에 접근할 것인가를 약속하는 규칙입니다. 예를 들면 80: http 포트, 443:https, 20,21: ftp포트를 사용합니다.
  • 포트같은 경우는 주로 생략이 가능하며 google URL을 자세히 보시면 실제적으로는 포트 보이지 않는것을 확인 할 수 있습니다.
  • https같은 경우는 http에 보안이 추가된 프로토콜을 의미합니다.
  • https의 정의는 HTTPS(HyperText Transfer Protocol over Secure Socket Layer, HTTP over TLS, HTTP over SSL, HTTP Secure)는 월드 와이드 웹 통신 프로토콜인 HTTP의 보안이 강화된 버전으로 규정되어있습니다.

5.3. URL userinfo

scheme://[userinfo@]host[:port][/path][?query][#fragment]

  • URL에 보통 사용자 정보를 포함해서 인증을 진행합니다. 하지만, 거의 잘 사용하지 않는것으로 알려져있습니다.

5.4. URL host

scheme://[userinfo@]host[:port][/path][?query][#fragment]

  • URL호스트는 호스트명을 의미하며 도메인명이나 IP주소를 직접 핸들링을 할 수 있습니다.

5.5. URL port

scheme://[userinfo@]host[:port][/path][?query][#fragment]

  • 포트번호를 담고있으며 특히 웹브라우저 상에서 접속시 포트정보를 담고있습니다. 일반적으로 URL에는 생략이 되어있으므로 대표적인 포트로는 http:80, https는 443포트를 가지고 있습니다.

5.6. URL path

scheme://[userinfo@]host[:port][/path][?query][#fragment]

  • 리소스 경로(path)와 계층적인 구조를 가지고 있습니다.
    하나의 예를 들어보면 /user/image.jpg, /users, /user/1, user/item/12 와 같은 경로를 가지는것을 확인할 수 있습니다.

5.7. URL query

scheme://[userinfo@]host[:port][/path][?query][#fragment]

  • URL query의 구조는 Map형식의 <Key, Value>로 구성되어있으며 ?로 시작되고 &로 추가가 가능합니다.
    예시: www.127.0.0.1:8080/path/name=kgh&id=1
    name과 id는 Key가 되고 나머지 kgh와 1은 Value로 나타낼 수 있습니다.

  • 보통 query parameter, query string으로 지칭하고 웹서버에 제공하는 파라미터나 문자형태로 제공됩니다.

5.8. URL fragment

scheme://[userinfo@]host[:port][/path][?query][#fragment]

  • fragment라고 불리어 오는 URL의 하위요소이며 html 내부 북마크 등에 사용됩니다. 하지만 이정보들은 서버에 전송되지는 않습니다.