URI는 자원을 식별하는 통일된 방법으로, 다음 그림과 같이 분류할 수 있다.
URL
은 Resource Locator로 자원의 위치를 나타내고, URN
은 Resource Name으로 자원의 이름을 나타낸다.
더 구체적으로 알아보자.
URL
은 실제로 우리가 웹 브라우저에서 사용하는 형태로 자원에 어떻게 접근할 것인지를 나타내고, URN
은 자원에 어떻게 접근할지 나타내는 것이 아니라 경로와 자원 자체를 특정하는 것을 목표로 한다. 그래서 URL
을 주로 사용하며, URI와 URL
은 보통 같은 의미로 사용된다.
URL의 문법을 살펴보자.
/members/100
이라고 하면 100번째 회원의 정보를 나타내는 식으로 표현할 수 있다. ?
로 시작하며, &
로 추가할 수 있다.위와 같은 주소로 웹 브라우저 접속을 요청할 경우, 다음과 같은 과정을 거친다.
웹은 www.google.com 이라는 host와 프로토콜 별로 지정된 포트에 대해 DNS 조회 요청을 보낸다. DNS 서버는 그에 맞는 IP 주소를 반환한다.
HTTP 요청 메세지는 위와 같은 형태로 작성된다.
웹 브라우저가 작성한 HTTP 요청 메세지를 웹 브라우저의 소켓 라이브러리를 통해 TCP/IP 계층에 전달하기 위해, IP 주소와 포트 정보를 통해 3-way handshake 과정을 진행하여 클라이언트와 서버 간의 연결을 확립하게 된다.
이후 TCP/IP 계층에 메세지를 전달하면 IP 포트 정보를 붙여 패킷을 완성한다.
완성한 패킷이 서버에 도착하면, 서버는 패킷 내부에 있는 HTTP 메시지를 해석해서 요청대로 작동한다.
서버는 위와 같은 HTTP 응답 메시지를 반환한다. 응답 메세지에는 서버 상태에 대한 정보와 전송 데이터에 대한 정보 등을 포함한다.
그리고 서버도 클라이언트와 동일한 방식으로 IP 포트 정보를 붙여 패킷을 완성해 클라이언트에 전달한다.
서버가 보낸 패킷 내 HTML 메세지에는 html 데이터가 들어있다. 패킷이 클라이언트에서 수신되면, 패킷 내 html 데이터를 통해 웹 브라우저 렌더링이 정상적으로 완료된다.