V VibeCoding 365
사전 목록 backend

VIBECODING 365 / DICTIONARY

URL

Uniform Resource Locator

DEFINITION

URL은 리소스를 가리키는 보편 식별자를 구조로 담은 것이다. WHATWG URL Standard의 초록은 URL, 도메인, IP 주소, application/x-www-form-urlencoded 형식과 그 API를 정의한다고 적는다. 일상에서 웹 주소라고 부르는 문자열이 바로 이 표준이 파싱하는 입력이다. MDN은 URI가 웹상의 리소스를 식별하는 데 쓰이며, HTTP 요청의 대상이 되면 문서·사진·바이너리 등의 위치를 나타낸다고 한다. 그중 가장 흔한 형태가 URL이다.

용어를 URL로 모은 이유

표준의 목표는 RFC 3986과 RFC 3987을 실제 구현과 맞추고, 그 과정에서 해당 RFC를 대체하는 것이다. 공백이나 이른바 불법 코드 포인트, 쿼리 인코딩, 동등성, 정준화는 RFC와 브라우저가 완전히 공유하지 않는다고 적는다. URL 파싱은 HTML 파싱만큼 단단해져야 한다는 것이 편집자 목표다. URI와 IRI라는 말은 혼란만 주고, 실무에서는 같은 알고리즘을 쓰므로 구분이 도움이 되지 않는다고 못 박는다.

문자열이 아니라 레코드

파서가 만들어 내는 것은 URL 레코드라는 구조체다. 스킴은 URL의 종류를 가리키는 ASCII 문자열이고, 파싱 뒤 처리를 어디에 넘길지 정하는 데 쓴다. 사용자 이름과 비밀번호, 호스트, 포트, 경로, 쿼리, 프래그먼트가 각각 칸이다. 포트는 없거나 16비트 부호 없는 정수다. 특수 스킴은 ftp, file, http, https, ws, wss이며 기본 포트가 표로 정해져 있다. http는 80, https는 443, file은 없다. 특수 URL의 경로는 항상 목록이라 불투명 경로가 아니다. 표준 표의 한 예로 https://localhost:8000/search?q=text#hello 는 스킴 https, 호스트 localhost, 포트 8000, 경로 search, 쿼리 q=text, 프래그먼트 hello로 쪼개진다. urn 스킴처럼 호스트가 없고 경로가 한 덩어리인 경우도 있다.

상대 주소에는 기준이 필요하다

상대 URL 문자열을 파싱하려면 비어 있지 않은 기준 URL이 필요하다고 표준이 적는다. 브라우저의 URL 생성자는 상대 문자열과 기준을 받고, 해석에 실패하면 예외를 던진다. 정적 parse는 실패 시 null을 돌려 생성자 예외를 피할 수 있다. MDN 예는 기준이 http://www.example.com/animals/dogs 일 때 상대 문자열 cats가 경로 /animals/cats 가 된다고 보여 준다. dogs는 파일 이름 구간이라 디렉터리 animals를 기준으로 붙는다. MDN은 링크의 href에 두면 메일 클라이언트를 열거나 문자를 보내거나 스크립트를 실행하는 식으로, 리소스 가져오기 밖의 동작도 일으킬 수 있다고 한다.

같은 파서를 쓰려는 이유

표준은 HTML 요소 없이 URL을 다루도록 URL 객체를 두었고, 워커 환경에서도 쓰라고 한다. 파서와 직렬화, API를 묶으면 멱등이어야 한다. 파싱 후 직렬화가 실패가 아니면 그 결과를 다시 파싱·직렬화해도 바뀌지 않아야 한다. Node.js 문서도 브라우저와 같은 WHATWG URL API를 두고, 예전 url.parse는 호스트 위장 같은 문제에 약하니 신뢰할 수 없는 입력에는 쓰지 말라고 한다.

ENGLISH

Uniform Resource Locator

EXAMPLE

https://localhost:8000/search?q=text#hello → 스킴 https, 호스트 localhost, 포트 8000, 경로 search, 쿼리 q=text, 프래그먼트 hello