가능세계
[Network] URI vs URL vs URN 차이점 알아보기 본문
웹페이지 내의 링크를 클릭하면 브라우저는 도메인의 포트로 TCP/IP 연결을 하고, URL이 제공하는 정보에 대해 서버에 HTTP 요청을 보냅니다.
URL에는 어떤 정보가 포함되어 있을까요? 먼저 URI에 대해 알아봅시다.
1. URI
URI(Uniform Resource Identifier)는 인터넷에 있는 리소스를 식별할 수 있는 통일된 방식입니다.
예를 들어 위치나 이름, 또는 둘 다를 기준으로 인터넷에서 자원을 식별하는 데 사용되는 문자열이라고 할 수 있습니다.
- Uniform: 리소스를 식별하는 통일된 방식
- Resource: 자원. 제한 없이 URI로 식별할 수 있는 모든 것
- Identifier: 다른 항목과 구분하는 데 필요한 정보
이렇게 생각해봅시다. URI는 우리가 연락하려는 사람을 식별하기 위해 이름이나 주소, 또는 둘 다를 사용하는 것입니다.
(e.g. 이름: 벨라 고트, 주소: 윌로우 크릭 165번지)
그렇다면 URL과 URN은 무엇일까요?
2. URL vs URN
URL과 URN은 URI의 하위 개념으로, 어떤 표준을 지켜서 리소스를 식별하고자 할 때 사용합니다.
2-1. URL(Uniform Resource Locator)
URL은 리소스의 위치를 나타내는 주소입니다. 실제로 웹에서 리소스를 찾는 데 가장 많이 사용되는 방법입니다.
(e.g. 주소: 윌로우 크릭 165번지)
2-2. URN(Uniform Resource Name)
URL이 리소스의 주소를 지정하는 것이라면, URN은 리소스에 이름을 부여하는 것입니다.
(e.g. 이름: 벨라 고트)
모든 URL과 URN은 URI라고 할 수 있습니다.
URL이 리소스 접근 방법과 위치를 명시하는 반면, URN만으로는 리소스를 찾을 수 있는 방법이 보편화되지 않았습니다. 따라서 실제 리소스를 찾기 위해서는 URN을 URL로 변환하여 사용해야 합니다.
이제 URL에 대해 자세히 살펴봅시다.
3. URL 구조와 문법
클라이언트가 서버에 리소스를 요청하려면 URL을 보유한 서버로 HTTP 메시지를 보냅니다.
URL은 두 가지 필수 요소로 구성됩니다. 바로, 연결하는 데 사용되는 프로토콜과 연결할 도메인 또는 IP주소입니다. 이외의 것들은 선택사항입니다.
URL은 서버에 자원을 요청하기 위해 입력하는 영문 주소로, URL 구조는 다음과 같습니다.
scheme://[userinfo@]host[:port][/path][?query][#fragment]
3-1. scheme
https
scheme 부분은 사용할 특정 프로토콜을 나타냅니다.
여기서 프로토콜
(Protocol)은 어떤 방식으로 자원에 접근할 것인가 하는 클라이언트와 서버 간의 약속과 규칙을 의미합니다.
예를 들어 인터넷에서 파일을 공유하려면 FTP 프로토콜을 사용할 수 있습니다. 이외에도 HTTP, HTTPS 등이 있습니다.
3-2. userinfo
userinfo란 사용자 정보를 포함해서 인증할 때 사용하며, 잘 사용되는 편은 아닙니다.
3-3. host
www.google.com
호스트는 사용자에게 표시할 콘텐츠를 제공하는 컴퓨터입니다. host 부분에는 웹 서버의 도메인 이름이나 IP 주소를 직접 사용할 수 있습니다.
참고로 도메인은 대소문자를 구분하지 않습니다. (e.g. www.example.com, 192.100.0.1)
3-4. port
:443
- 0 ~ 65535: 할당 가능
- 0 ~ 1023: 잘 알려진 포트이기 때문에 사용하지 않기
- FTP - 20, 21
- TELNET - 23
- HTTP - 80
- HTTPS - 443
port는 하나의 IP 내에서 여러 개의 프로세스를 구분해 특정 서버로 접속할 때 사용됩니다.
port는 일종의 연결 지점으로 생각할 수 있습니다. 예를 들어, 두 사람이 만나는 상황을 가정해 봅시다. 두 사람 사이에는 두 개의 평행한 벽이 있고, 각 벽에는 다른 벽과 동일한 수의 문이 있습니다. 두 사람이 만나려면 각자의 벽에서 같은 문을 열어야 합니다. 이 상황은 port와 유사한 원리입니다.
port 번호를 지정함으로써 우리는 요청이 어디에서 오고, 어디로 수신되어야 하는지를 서버에게 알려줄 수 있습니다.
모든 프로토콜에는 기본 port 번호가 있습니다. 따라서 port 번호를 지정하지 않으면, 실제로는 기본값을 사용하는 것과 동일합니다. HTTP의 기본 포트는 80, 보안을 추가한 HTTPS의 기본 포트는 443입니다.
3-5. path
/search
path는 리소스의 경로를 말합니다. 디렉토리나 파일 경로(/products/top/tshirt)처럼 계층적 구조로 되어 있습니다.
3-6. query
?q=hello&hl=ko
쿼리 파라미터(Query Parameters/Query String)는 클라이언트에서 웹 서버에 추가적인 정보를 전달합니다.
"key=value" 형식이며, 일반적으로 "?"로 시작하고 "&"로 여러 개의 쿼리를 덧붙일 수 있습니다.
(e.g. ?keyA=valueA&keyB=valueB)
3-7. fragment
#getting-started-introducing-spring-boot
fragment는 페이지의 일부를 요청하는 방법으로 사용됩니다.
주로 HTML 내부의 북마크 등으로 사용됩니다. 서버에 전송하는 정보는 아닙니다.
참고
'Blog > Network' 카테고리의 다른 글
[Network] HTTP 메시지(HTTP Message) 구조 파헤치기 (0) | 2023.09.10 |
---|---|
[Network] HTTP란 무엇인가요? 무상태와 비연결성 정리하기 (0) | 2023.09.10 |
[Network] UDP란? TCP vs UDP 차이점 살펴보기 (0) | 2023.09.10 |
[Network] TCP 3-Way Handshake와 4-Way Handshake 이해하기 (0) | 2023.09.10 |
[Network] TCP 개념과 TCP/IP 4계층 정리하기 (0) | 2023.09.10 |