-
URI란? (URI VS URL VS URN)CS/네트워크 2021. 12. 19. 03:49728x90
URI란?
Uniform Resource Identifier의 약자로 "자원을 식별하는 통합된 방법"을 뜻합니다.
인터넷에 있는 자원을 나타내는 유일한 주소이며, 사람으로 치면 주민등록증 같은 의미를 가집니다.
자원이란 URI로 식별할 수 있는 모든 것입니다.
URI를 사용하는 이유
웹 서버가 자원을 식별할 수 있도록 합니다.
URI의 구조
scheme://[userinfo@]host[:port]][/path][?query][#fragment]
scheme와 host를 제외하고는 모두 선택사항입니다.
scheme
어떤 프로토콜을 사용하는지에 대한 정보입니다.
http, https, ftp 등이 자주 사용됩니다.
프로토콜이란?
어떤 방식으로 자원에 접근할 것인가 하는 약속 규칙
userinfo
URL에 사용자정보를 포함해서 인증해야 할 때 사용하는데 거의 사용하지 않습니다.
만약 사용자 정보가 있다면 @로 끝납니다.
host
도메인명 또는 IP주소를 직접 사용합니다.
우리가 보통 생각하는 naver.com // google.com입니다.
port
http는 80 포트, https는 43 포트를 사용하며 일반적으로 생략합니다.
path
리소스에 대한 경로로 계층적 구조를 가지고 있습니다.
home에 있는 file1.jpg 이미지를 가져오는 리소스 경로 예시입니다.
/home/file1.jpg
회원정보들을 가져오는 리소스 경로 예시입니다.
/members
100이라는 id를 가진 회원정보를 가져오는 리소스 경로 예시입니다.
/members/100
query
key = value의 형태로 데이터가 들어갑니다
?로 시작하며 &로 추가할 수 있습니다.
웹서버에 parameter(매개변수)를 전달하고 숫자도 문자로 넘어가기 때문에 query parameter, query string으로 불립니다.
fragment
html 내부 북마크 등에 사용되며 서버로 전송되는 정보는 아닙니다.
그러면 실제로 URI가 어떻게 사용되는지 예시를 통해 살펴보겠습니다
URI 구조
scheme://[userinfo@]host[:port]][/path][?query][#fragment]
https://www.google.com/search?q=hello&hl=ko
위의 URI를 사용하게 된다면 구글에 hello에 대한 검색 결과가 나오게 되는데 URI 구조를 보면서 살펴보겠습니다.
https:// 부분은 scheme:// 부분입니다. 여기서는 http에 보안성이 더해진 https 프로토콜을 사용한다는 의미입니다.
[userinfo@] 부분은 사용하지 않았습니다.
www.google.com부분은 host 부분입니다. 구글의 도메인명이 사용되었습니다.
port 부분은 https 프로토콜을 사용하기 때문에 port 번호는 443번이지만 생략되었습니다.
path 부분은 /search을 사용하여 검색정보를 가져오는 리소스 경로입니다.
query 부분은? q=hello&hl=ko를 사용하여 구글에서 q에 해당하는 검색 결과를 제공하며 언어는 한국어를 사용한다는 의미입니다.
fragment 부분은 사용하지 않았습니다.
이 URL을 통하여 웹브라우저와 구글 서버가 동작하는법을 알아보겠습니다
웹 브라우저 IP : 100.100.100.1
구글 서버 IP : 200.200.200.2
URL = https://www.google.com/search?q=hello&hl=ko
라고 가정해보겠습니다
웹 브라우저는 URL의 www.google.com (host 부분)을 통해 DNS서버를 활용해 IP가 200.200.200.2라는것을 알아냅니다.
또한 포트번호는 https이므로 443이 생략되어 있습니다.
웹 브라우저는 HTTP 요청 메시지를 생성합니다.
HTTP 요청메시지 아래그림과 같습니다(몇가지가 더 있지만 간략하게 표현)
GET(데이터를 요청) /search?q=hello&hl=ko(path, query) HTTP/1.1(http의 버전)
host : www.google.com (host에 대한정보)
이 요청메시지를 전송하기 위해서는 SOCKET 라이브러리를 통해 OS로 전달하여 TCP/IP 패킷을 생성하고 네트워크 인터페이스를 통해 인터넷으로 전달되고 수많은 인터넷 노드를 통해 구글서버로 전달됩니다.
구글 서버는 요청 패킷을 해석하여 한국어로 hello라는 검색결과를 찾아서 HTTP 응답 메시지를 생성합니다.
HTTP 응답메시지 아래그림과 같습니다(몇가지가 더 있지만 간략하게 표현)
HTTP/1.1 200 OK ( 1.1버전의 HTTP가 잘 도착되었음을 알림)
Content-Type : text/html; charset=UTF-8 (Text의 html형식이고 UFT-8로 인코딩 되었음을 알림)
Content-Length: 3423 ( 실제 HTML의 길이)
<html><body>...</body></html> (HTML 정보)
웹 브라우저는 응답 패킷을 받게되고 HTML 정보를 통해 렌더링하여 우리가 볼 수 있게 됩니다.
그러면 이제 URL과 URN에 대하여 알아보겠습니다
URL이란?
Uniform Resource Locator의 약자로 현재 우리가 홈페이지 주소를 불렀을 때 사용하는 형식으로, 위에서 설명한 구조 모두 URL입니다.
정확한 경로를 구체적으로 서술해야 접근이 가능한 특징을 가지고 있습니다.
URN이란?
Uniform Resource Name의 약자로 리소스의 경로와 상관없이 이름으로 리소스를 식별합니다.
URL 주소가 바뀔 경우에는 접근할 수 없지만 URN을 사용한다면 리소스 위치를 찾을 수 있습니다.
URL과 URN에 대하여 간단하게 알아보았는데 사실 두 개념은 URI의 하위 개념입니다.
따라서 URI가 가장 큰 개념으로 "자원을 식별하기 위해서" URL과 URN을 선택하거나 모두 사용하는 것입니다.
출처
https://ko.wikipedia.org/wiki/%ED%86%B5%ED%95%A9_%EC%9E%90%EC%9B%90_%EC%8B%9D%EB%B3%84%EC%9E%90
https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard
https://www.howdy-mj.me/network/what-is-uri/
https://victorydntmd.tistory.com/287
'CS > 네트워크' 카테고리의 다른 글
REST API란? RESTful API란? (0) 2021.12.27 HTTP API란? (0) 2021.12.24 HTTP 기본 (0) 2021.12.22 인터넷 네트워크 (0) 2021.12.17 CORS란? (0) 2021.12.08