✏️ URI, URL, URN?

2026. 7. 19. 00:57·Backend/HTTP·Web

이 글은 Velog에서 이전한 글입니다. Velog 원문 보기

⭐️ 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 렌더링을 한다. 그러면 다음 링크와 같은 화면을 보여줄 것이다.

  • https://www.google.com:443/search?q=hello&hl=ko

출처
모든 개발자를 위한 HTTP 웹 기본 강의

해당 게시물의 모든 사진 자료는 위 강의의 자료를 사용하였습니다.

'Backend > HTTP·Web' 카테고리의 다른 글

✏️ HTTP 상태코드  (0) 2026.07.19
✏️ HTTP 메서드 활용  (0) 2026.07.19
✏️ HTTP 메서드  (0) 2026.07.19
✏️ HTTP (HyperText Transfer Protocol)  (0) 2026.07.19
✏️ 인터넷 네트워크  (0) 2026.07.19
'Backend/HTTP·Web' 카테고리의 다른 글
  • ✏️ HTTP 메서드 활용
  • ✏️ HTTP 메서드
  • ✏️ HTTP (HyperText Transfer Protocol)
  • ✏️ 인터넷 네트워크
pp8817
pp8817
공부한 내용, 개발 관련 지식, 트러블 슈팅 등을 기록합니다. 이전 블로그: https://velog.io/@pp8817/posts
  • pp8817
    끄적이는 개발 log
    pp8817
  • 전체
    오늘
    어제
    • 분류 전체보기 (273)
      • Project (71)
        • 척척학사 (29)
        • Book (23)
        • Saynow (3)
        • YAPP 27기 (4)
        • 나의 작은 프로젝트 (10)
        • Landit (2)
      • Backend (88)
        • Spring (13)
        • Spring MVC (13)
        • Spring Security (4)
        • JPA (26)
        • Database (19)
        • HTTP·Web (13)
        • Architecture (0)
      • Language·CS (59)
        • Java·Kotlin (5)
        • CS Interview (17)
        • Backend Interview (5)
        • Concepts (32)
      • Algorithm (25)
        • Algorithm (24)
        • 소마 알고리즘 스터디 (1)
      • Infra (8)
      • Troubleshooting (11)
      • Retrospective (6)
      • Etc (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    척척학사
    interview
    jpa
    나의 작은 프로젝트
    개념 정리!
    Python
    CS Interview
    BOJ
    HTTP WEB 기본 지식
    Spring MVC
    object
    게시판
    java
    Spring
    Project
    Book
    Algorithm
    트러블슈팅
    http
    OS
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
pp8817
✏️ URI, URL, URN?
상단으로

티스토리툴바