URL은 웹 사이트를 방문하거나 API를 호출할 때 서버와 클라이언트가 어떤 리소스를 요청할지 정확하게 지정하는 주소 체계입니다.
웹 개발, API 통신, 백엔드 서버 구축, 프론트엔드 요청 처리, 그리고 네트워크 보안까지 인터넷 기반 프로그래밍 전 분야에서 반드시 이해하고 있어야 하는 핵심 개념 중 하나입니다.
이번 글에서는 URL이 어떻게 구성되어 있고 각 구성 요소가 어떤 역할을 하는지를 예시와 함께 쉽고 명확하게 정리해보겠습니다.
URL(Uniform Resource Locator)은 인터넷 상에서 특정 리소스(이미지, HTML 문서, API 등)의 정확한 위치를 식별하고 접근하는 주소 체계입니다.
웹 애플리케이션에서는 다음과 같은 상황에서 URL이 사용됩니다.
URL은 다음과 같은 5가지 구성 요소로 이루어져 있습니다.
| 항목 | 예시 | 설명 |
|---|---|---|
scheme | https:// | 리소스에 접근하는 프로토콜 (http, https, ftp 등) |
authority | www.example.com:80 | 사용자 정보, 호스트명, 포트 번호 포함 |
path | /news/article | 서버 내의 파일 경로나 API 엔드포인트 |
query | ?id=3 | 요청 시 전달할 파라미터 (key=value 형식) |
fragment | #top | 문서 내 특정 위치 (브라우저 클라이언트 전용) |
foo://localhost:8080/over/there?name=ferret#nose
| 구성 요소 | 예시 값 | 설명 |
|---|---|---|
| scheme | foo | 접근 방식(커스텀 프로토콜 포함 가능) |
| authority | localhost:8080 | 호스트 정보 및 포트 번호 |
| path | /over/there | 자원 경로 또는 API 엔드포인트 |
| query | ?name=ferret | 요청 파라미터 |
| fragment | #nose | 문서 내 특정 섹션 이동 (서버 전달 X) |
query는 선택 사항입니다.URL에 따라 생략될 수도 있고 여러 개 붙을 수도 있습니다.
query string 은 클라이언트가 서버에 전달할 추가 데이터를 담습니다.
?key=value&key2=value2GET 요청의 파라미터로 파싱됩니다.[예시]
https://example.com/search?keyword=python&page=2
keyword=python → 검색어page=2 → 2페이지 요청만약 쿼리 정보가 필요 없다면 아래처럼 생략도 가능합니다.
[예시]
https://example.com/search
fragment는 브라우저 전용입니다.서버에는 전혀 전달되지 않으며 단지 화면 위치만 이동합니다.
fragment 식별자는 #으로 시작하며 HTML 문서 내부의 특정 위치(섹션)로 스크롤을 이동시킬 때 사용됩니다.
서버에는 전달되지 않고 오직 브라우저(클라이언트)에서만 동작합니다.
[예시]
https://docs.python.org/3/tutorial/index.html#strings
#strings 섹션으로 스크롤 이동합니다.#strings는 전혀 보이지 않으며 그냥 /index.html만 받습니다.authority 안에는 사용자 인증 정보도 포함될 수 있습니다.
authority에는user:password@host:port형식으로 사용자 인증 정보와 호스트 정보를 함께 포함할 수 있습니다.
[예시]
ftp://user123:secret@ftp.example.com:21/files
| 항목 | 값 |
|---|---|
| 사용자 ID | user123 |
| 비밀번호 | secret |
| 호스트명 | ftp.example.com |
| 포트 번호 | 21 (FTP 기본 포트) |
| 경로 | /files |