URI(Uniform Resource Identifier)는 US-ASCII 문자 집합의 한정된 부분집합만을 수용하도록 제약되어 있습니다. 한글 등의 다국어 문자, 이모지, 특수 문장 부호를 웹 상에서 안전하게 전달하기 위해 필수적인 기술이 퍼센트 인코딩(URL 인코딩)입니다.
1. URL에 퍼센트 인코딩이 필요한 이유
RFC 3986 표준에 규정된 퍼센트 인코딩은 허용되지 않는 문자를 퍼센트 기호(%)와 해당 문자의 16진수 UTF-8 바이트 값 2자리로 치환합니다(예: 공백 = %20).
2. 예약 문자 vs 비예약 문자 분류
- 비예약 문자 (인코딩 불필요):
A-Z,a-z,0-9,-,_,.,~. - 예약 문자 (구조적 구분 기호):
:,/,?,#,[,],@,!,$,&,',(,),*,+,,,;,=.
3. encodeURI 와 encodeURIComponent 의 차이점
전체 URL 문자열에서 프로토콜(https://) 및 경로 슬래시(/)를 유지해야 할 때는 encodeURI를 사용합니다. 반면 &나 = 등이 포함될 수 있는 개별 쿼리 파라미터 값을 안전하게 격리할 때는 encodeURIComponent를 써야 합니다.
4. 공백 문자 처리: %20 vs 더하기 기호(+)
RFC 3986 표준은 URI 내 모든 공백을 %20으로 표기하도록 지정합니다. 공백을 +로 치환하는 방식은 구형 HTML 폼 규격(application/x-www-form-urlencoded)에서 기인한 것으로 오직 쿼리 문자열에서만 관례적으로 허용됩니다.