Curious TechieDev Toolbox
전체 가이드/웹 표준8 min read

URL 인코딩(퍼센트 인코딩)의 원리와 RFC 3986

RFC 3986 표준 규격, 예약된 구분자, UTF-8 바이트 변환 및 쿼리 문자열 처리 가이드.

핵심 요약 (Key Takeaways)
  • 퍼센트 인코딩은 비ASCII 및 예약된 URI 문자를 %HH 형식의 16진수 바이트 시퀀스로 변환합니다 (RFC 3986).
  • ?, &, = 등의 예약 문자는 쿼리 파라미터 값 내부에서 반드시 이스케이프되어야 합니다.
  • 자바스크립트에서는 파라미터 값에 encodeURIComponent()를, 전체 URI 경로 보존에는 encodeURI()를 사용합니다.
  • 공백 문자는 RFC 3986 표준에 따라 %20으로, 폼 전송 방식에 따라 +로 인코딩됩니다.

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)에서 기인한 것으로 오직 쿼리 문자열에서만 관례적으로 허용됩니다.