우선 URI는 로케이터(Locator), 이름(Name) 또는 둘 다 추가로 분류될 수 있다.
그림을 보고 설명을 해보면, URI라는 가장 큰 개념이 있고 그 안에 크게 평소에 많이 들어봤을 URL(리소스의 위치)과 URN(리소스의 이름)이 있다.
URL과 URN은 다음과 같이 생겼다.
URL은 보다시피 우리가 흔히 인터넷에서 사용하는 형식이고, URN은 단순히 이름을 부여해 놓은 것이다. 그래서 URN은 거의 사용하지 않는다.
그럼 돌아와서 URI의 뜻에 대해 살펴보면
그래서 URL은 리소스가 있는 위치를 지정하는 것이고, URN은 리소스에 이름을 부여하는 것이다. 리소스의 위치는 변할 수 있지만, 이름은 변하지 않는다. URN 이름만으로 실제 리소스를 찾을 수 있는 방법은 보편화되어있지 않다.
그럼 실제 URL을 보고 어떻게 이루어져 있는지 분석해보자.
URL 형식은 이렇다.
scheme://[userinfo@]host[:port][/path][?query][#fragment]
위의 URL을 전송하는 상황을 살펴보자.
DNS를 조회해 IP 주소를 받고, Port 번호가 생략되어있으므로 443번일 것이다(https). 이 정보를 바탕으로 http 요청 메시지를 생성한다.
웹 브라우저가 먼저 HTTP 메시지를 생성한다. 그리고 Socket 라이브러리를 통해 TCP/IP로 이를 전달하고 TCP/IP 패킷을 만들어 전송한다. 최종적으로는 이와 같은 패킷을 전송하는 것이다.
인프런 김영한님의 강의 - 모든 개발자를 위한 HTTP 웹 기본 지식