1. URI(Uniform Resource Identifier)
URI에 대한 개념을 살펴보기에 앞서서 국제 인터넷 표준화 기구(IETF)에 표준스펙으로 기재되어있는 URI,URL,URN의 개념에 대해서 알아보겠습니다.
국제 인터넷 표준화 기구 IETF 1.1.3 URI 표준 스펙
1 | 1.1.3. URI, URL, and URN |
국제 인터넷 표준화 기구 IETF 1.1.3 URI 표준 스펙 요약
-
국제 인터넷 표준화 기구(IETF)에 표준스펙으로 기재된 내용을 간략히 살펴보면 uri는 로케이터(locator), 이름(name)또는 둘다 추가로 분류 될 수 있습니다.
-
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) 의미
- Uniform
리소스를 식별하는 통일된 방식
- Resource
자원, URI로 식별할 수 있는 모든것
- Identifier
다른 항목과 구분하는데 필요한 정보
4. URL(Uniform Resource Locator)과 URN(Uniform Resource Name) 의미
URL은 Locator를 뜻하며 리소스가 있는 위치를 지정하고 URN은 Name을 뜻하여 리소스에 이름을 부여합니다.
즉, 위치는 변할 수 있지만, 이름은 변할 수 없습니다. 마치 우리가 도서관에서 하나의 책을 찾기 위해 isbn URN을 부여 받아 실제 리소스를 찾는다고 가정하면 urn:isbn:URN의 형식으로 나타낼 수 있습니다. 이때는 URN이름만으로는 실제 리소스를 찾는방법이 보편화 된것이 아닙니다.
5. URL 분석
Request URL:
다음과 같은 구글에서 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 내부 북마크 등에 사용됩니다. 하지만 이정보들은 서버에 전송되지는 않습니다.