웹과 인터넷에서 리소스를 식별하거나 접근할 때 사용하는 개념이 URI이다. URI는 URL과 URN을 포함하며, 각 개념의 차이를 명확히 이해하는 것이 중요하다.
URI(Uniform Resource Identifier)
URI는 인터넷 상의 리소스를 식별하기 위한 규약이다.
URI는 두 가지 방식으로 리소스를 나타낼 수 있다.
- URL(Resource Locator): 리소스의 위치를 나타낸다.
- URN(Resource Name): 리소스의 이름을 나타낸다.
즉, URI는 URL과 URN을 모두 포함하는 상위 개념이다.
URL과 URN
URL(Resource Locator)
URL은 특정 리소스가 어디에 위치해 있는지를 나타내는 방식이다.
예시
foo://example.com:8042/over/there?name=ferret#nose
RL 구성 요소
- scheme
- authority
- path
- query
- fragment
이 구조를 통해 브라우저는 리소스가 어디에 위치하는지 판단한다.
URN(Resource Name)
URN은 리소스가 어디에 있는지와 관계없이 이름만으로 식별하는 방식이다.
예시
urn:example:animal:ferret:nose
URL 상세 설명
scheme
URL의 가장 앞부분에 있으며 보통 사용하는 프로토콜을 의미한다.
- http: 기본적으로 80번 포트 사용
- https: 기본적으로 443번 포트 사용
이 기본 포트는 생략이 가능하다.
query
query는 key=value 형태로 데이터를 전달하기 위한 부분이다.
- ? 로 시작한다.
- & 로 여러 값을 구분한다.
- query parameter, query string 등 다양한 이름으로 불린다.
웹 브라우저의 요청 흐름
웹 브라우저가 URL을 입력받고 서버에 요청을 보내기까지의 흐름은 다음과 같다.
- 웹 브라우저가 HTTP 요청 메시지를 생성한다.
- 생성한 HTTP 메시지를 SOCKET 라이브러리를 통해 전달한다.
- A: TCP/IP 연결을 생성한다.
- B: 데이터를 전달한다.
- 최종적으로 TCP/IP 패킷이 생성되고, 그 안에 HTTP 메시지가 포함된다.
이 과정을 통해 브라우저는 원하는 리소스를 서버로부터 전달받는다.