평소에 자주 들어보던 용어인 URI, URL이 무슨의미일까?
두 용어에는 어떤 차이가 있을까?
사람들을 식별 할 때 고유한 주민번호로 식별 할 수 있듯이 리소스를 식별 할 수 있는 고유한 Identifier
를 URI라고 한다.
URI는 리소스가 존재하는 위치, 리소스의 이름으로 분류 될 수 있으며 또는 위치와 이름을 함께 사용하여 분류하기도 한다.
URI는 가장 큰 개념! 리소스를 식별
한다.
URI는 리소스 그 자체를 가리키고, URL은 리소스의 위치를 나타낸다.
(나름대로 이해하기 쉽게 나의 말로 바꿔보았다.)
URI에 대해서 좀 더 자세히 알아보자. URI는 Uniform Resource Identifier의 약자이다. 어떤 의미를 갖고 있을까?
URL(Uniform Resource Locator): 리소스가 있는 위치를 지정한다.
URN(Uniform Resource Name): 리소스에 이름을 부여한다.
URI형태
scheme://[userinfo@]host[:port][/path][?query][#fragment]
url은 위의 형태를 갖는다. 하나씩 뜯어보자
scheme
: 주로 프로토콜 사용
프로토콜: 어떤 방식으로 자원에 접근할 것인가를 결정하는 통신 규약
예) http, https, ftp 등등
포트 번호는 url에서 생략이 가능하다.
https는 http에 보안 기능이 추가된것(HTTP Secure)
userinfo@
: URL에 사용자 정보를 인증해야 할 때 사용함, 거의 쓰지 않음
host
: 호스트명, 도메인명 또는 IP주소를 직접 입력가능하다.
port
: 접속 포트, 일반적으로 생략한다. 특정 서버에 따로 접근해야 할 때 입력하기도 한다.
path
: 리소스경로, 계층적인 구조로 되어있다.
예) /home/index.html, /home/img/image.png ...
💡전체 ULI에서
path
부분 까지가URL
이라고 생각된다.
query
: key=value의 형태로 들어간다.
?
로 시작하고, &
를 이용해 query를 추가 할 수 있다. fragment: html 내부 북마크 등에서 사용, 서버로 전송되는 데이터는 아니다.
웹 브라우저가 데이터를 요청하면 http 메시지가 생성된다.
메시지가 생성되는 과정은 어떻게 될까?
웹 브라우저에 URL을 입력한다.
웹 브라우저는 입력된 host의 Domain을 DNS 서버에서 조회한다.
DNS 서버에서 응답 받은 IP와 URL의 Port 정보를 찾아내서 아래와 같은 HTTP 요청 메시지를 생성한다.
GET /search?q=hello&hl=ko HTTP/1.1
Host: www.google.com
웹 브라우저가 HTTP 메시지 생성한다.
웹 브라우저는 Socket 라이브러리를 통해 OS에 HTTP 메시지를 TCP/IP 계층에 전달한다.
TCP/IP 패킷을 생성한다.(IP, Port, HTTP 메시지 정보 포함한다.)
이쪽 IP의 컴퓨터로 가서 여기 Port에 접근하여 HTTP 메시지를 전송하라는 의미
서버로 요청 패킷을 전송한다.
서버는 TCP/IP 패킷을 열고 요청 받은 HTTP 메시지를 해석한다.
아래와 같은 HTTP 응답 메시지를 생성
HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Length: 3423
<html>
<body> ... </body>
</html>
클라이언트가 요청 패킷을 보내는 같은 과정으로 클라이언트로 패킷 전송
클라이언트, 웹 브라우저는 응답 받은 HTTP 메시지를 해석한다.
응답 메시지에 담긴 HTML 문서를 웹 브라우저는 렌더링해준다.
지금 내가 작성 한 글도 이런 과정을 거쳤다.