URL 예약 문자 완벽 정리
URL 인코딩 가이드
URL 명세(RFC 3986)는 문자를 크게 예약 문자(reserved)와 비예약 문자(unreserved)로 나눕니다. 이 구분을 알면 언제 인코딩해야 하고 언제 안 해도 되는지가 명확해집니다.
비예약 문자 (그대로 사용 가능)
알파벳 대소문자, 숫자, 그리고 - _ . ~ 네 가지 기호는 어떤 위치에서도 인코딩 없이 그대로 쓸 수 있습니다. 이 문자들은 인코딩해도 의미가 바뀌지 않으므로 보통 인코딩하지 않습니다.
예약 문자 (구조적 의미가 있음)
예약 문자는 URL의 구조를 나누는 역할을 합니다. 데이터의 일부로 쓰려면 반드시 인코딩해야 합니다.
:/?#[]@— 주소의 큰 구획(스킴·경로·쿼리·프래그먼트 등)을 나눔!$&'()*+,;=— 하위 구획, 특히 쿼리스트링의 키·값 구분
encodeURI 와 encodeURIComponent 의 경계
encodeURI는 위 예약 문자를 보존합니다. 이미 완성된 전체 URL을 인코딩할 때 구조를 깨뜨리지 않기 위해서입니다. 반면 encodeURIComponent는 예약 문자까지 모두 변환합니다. 파라미터 값 하나처럼 URL의 조각을 넣을 때 안전합니다.
값 하나를 넣을 땐 encodeURIComponent, 전체 주소를 다룰 땐 encodeURI — 이 원칙만 기억하면 대부분의 실수를 피할 수 있습니다.