✏️ URI, URL, URN?

박상민·2023년 8월 15일
0

HTTP WEB 기본 지식

목록 보기
2/13

⭐️ URI URL, URN?


"URI는 로케이터(locator), 이름(name) 또는 둘다 추가로 분류될 수 있다"

리소스를 식별한다는 가장 큰 개념인 URI가 있고 그 안에 URL와 URN이 있다.

리소스를 식별한다는 것은 주민번호를 식별하는 것과 비슷하다고 이해하면 된다. 자원이 어디있는지 식별하는 것이다.

그 방법에 URL과 URN이 있는 것이다.
URL (Uniform Resource Locator) : 리소스의 위치로 식별
URN (Uniform Resource Name): 리소스의 이름으로 식별

URN은 잘 사용하지 않으며, 대부분 URL만 사용한다.
이에 관해서는 뒤에서 자세히 이야기 하겠다.

URL과 URN의 생김새

📌 URI (Uniform Resource Identifier) - 통합 자원 식별자

URI (Uniform Resource Identifier)

  • 단어 뜻
    • Uniform: 리소스 식별하는 통일된 방식
    • Resource: 자원, URI로 식별할 수 있는 모든 것(제한 없음)
    • Identifier: 다른 항목과 구분하는데 필요한 정보

  • URI는 인터넷의 자원을 식별할 수 있는 문자열을 의미한다.

  • URI라는 개념은 어떤 형식이 있다기 보다는 특정 자원을 식별하는 문자열을 의미한다. 그래서 URL이 아니고 URN도 아니면 그냥 URI가 되는 것이다.

  • URI의 하위 개념으로 URL과 URN이 있다.
    URL: Uniform Resource Locator
    URN: Uniform Resource Name

리소스?
리소스란 URI로 식별할 수 있는 모든 자원을 뜻한다.

📌 URL, URN

URL, URN

  • 단어 뜻
    • URL - Locator: 리소스가 있는 위치를 지정
    • URN - Name: 리소스에 이름을 부여

• 위치는 변할 수 있지만, 이름은 변하지 않는다.
• urn:isbn:8960777331 (어떤 책의 isbn URN)
• URN 이름만으로 실제 리소스를 찾을 수 있는 방법이 보편화 되지 않음
• 앞으로 URI를 URL과 같은 의미로 이야기하겠다.

📌 URL 전체 문법

URL 전체 문법

  • scheme://[userinfo@]host[:port][/path][?query][#fragment]
  • https://www.google.com:443/search?q=hello&hl=ko

• 프로토콜(https)
• 호스트명(www.google.com)
• 포트 번호(443)
• 패스(/search)
• 쿼리 파라미터(q=hello&hl=ko)

✔︎ URL - Scheme

URL - Scheme

  • scheme://[userinfo@]host[:port][/path][?query][#fragment]
  • https://www.google.com:443/search?q=hello&hl=ko
    • 주로 프로토콜 사용

• 프로토콜: 어떤 방식으로 자원에 접근할 것인가 하는 약속 규칙
• 예) http, https, ftp 등등
• http는 80 포트, https는 443 포트를 주로 사용, 포트는 생략 가능

https는 http에 보안을 추가한 것 (HTTP Secure)

✔︎ URL - Userinfo

URL - userinfo

  • scheme://[userinfo@]host[:port][/path][?query][#fragment]
  • https://www.google.com:443/search?q=hello&hl=ko

• URL에 사용자정보를 포함해서 인증
• 거의 사용하지 않음

✔︎ URL - Host

URL - host

  • scheme://[userinfo@]host[:port][/path][?query][#fragment]
  • https://www.google.com:443/search?q=hello&hl=ko

• 호스트명
• 도메인명 또는 IP 주소를 직접 사용가능

✔︎ URL - PORT

URL - PORT

  • scheme://[userinfo@]host[:port][/path][?query][#fragment]
  • https://www.google.com:443/search?q=hello&hl=ko

• 포트(PORT)
• 접속 포트
• 일반적으로 생략, 생략시 http는 80, https는 443

✔︎ URL - Path

URL - path

  • scheme://[userinfo@]host[:port][/path][?query][#fragment]
  • https://www.google.com:443/search?q=hello&hl=ko

• 리소스 경로(path), 계층적 구조
• 예)
• /home/file1.jpg
• /members
• /members/100, /items/iphone12

✔︎ URL - Query

URL - query

  • scheme://[userinfo@]host[:port][/path][?query][#fragment]
  • https://www.google.com:443/search?q=hello&hl=ko

• key=value 형태
• ?로 시작, &로 추가 가능 ?keyA=valueA&keyB=valueB
• query parameter, query string 등으로 불림, 웹서버에 제공하는 파라미터, 문자 형태

✔︎ URL - Fragment

URL - fragment

  • scheme://[userinfo@]host[:port][/path][?query][#fragment]
  • https://docs.spring.io/spring-boot/docs/current/reference/html/getting-started.html#getting-started-introducing-spring-boot

• fragment
• html 내부 북마크 등에 사용
• 서버에 전송하는 정보 아님

⭐️ 웹 브라우저 요청 흐름


https://www.google.com.search?q=hello&hl=ko 이라는 웹 브라우저 요청을 보낸다면 웹 브라우저가 DNS를 조회해서 IP주소 200.200.200.2를 찾는다 이때 HTTPS PORT 443은 생략된다.

이때 IP 주소는 임의로 설정한 것이다.

이렇게 하면 HTTP 요청 메세지가 생성된다.


HTTP 요청 메시지는 위 사진처럼 생겼다. 아직은 뭔지 모르겠지만 GET은 데이터를 달라는 의미인 것 같고 패스부터 쿼리 정보가 들어가있다. 그리고 뒤에 http 버전 정보가 들어가 있고 호스트 정보 또한 포함하고 있다.

HTTP 요청 메세지를 간략화한 것이다.

이제 웹 브라우저 요청 흐름에 대해서 알아보겠다.

1. 웹 브라우저가 http 메시지 생성
2. 소켓 라이브러리를 통해 TCP/IP로 SYN, ACK를 주고 받는 과정을 통해서 구글 서버와 연결한다.
3. 데이터를 TCP/IP계층으로 전달
4. IP PORT 정보를 가진 TCP/IP 패킷을 씌움
5. 인터넷으로 흘러감

이때 TCP/IP 패킷이 눈에 띈다.


패킷

이전 인터넷 네트워크 글에서 TCP/IP 패킷에 대해서 설명했다. 그때 전송 데이터라는 것이 있었는데 그 전송 데이터가 바로 HTTP 메시지이다.

이 정보가 인터넷 망으로 넘어가서 수많은 노드들을 거쳐 구글 서버인 IP: 200.200.200.2로 넘어간다.
구글 서버가 요청 패킷을 받고 이제는 필요없는 TCP/IP 패킷을 벗겨서 버리고 HTTP 메시지를 해석한다.
그리고 요청 HTTP 메시지에 맞는 HTTP 응답 메시지를 생성한다.


HTTP 응답 메시지

이렇게 생성된 응답 메시지에 다시 한 번 TCP/IP 패킷을 씌우고 웹 브라우저에게 전달한다.

이때 Content-Type은 응답 데이터의 유형을 나타내고 Content-Length는 이름 그대로 응답 데이터의 길이를 나타낸다.


웹 브라우저가 도착한 응답 패킷의 TCP/IP 패킷을 까서 HTTP 메시지를 확인하고 웹 브라우저 HTTP 렌더링을 한다. 그러면 다음 링크와 같은 화면을 보여줄 것이다.


출처
모든 개발자를 위한 HTTP 웹 기본 강의
해당 게시물의 모든 사진 자료는 위 강의의 자료를 사용하였습니다.

profile
스프링 백엔드를 공부중인 대학생입니다!

0개의 댓글