URL 인코딩 가이드: URL을 인코딩하는 이유와 방법
URL에서 공백이 왜 %20이 되고 앰퍼샌드가 %26이 되는지 궁금하셨나요? URL 인코딩 (퍼센트 인코딩이라고도 함)은 URL에 안전하지 않은 문자를 웹 서버가 이해할 수 있는 포맷으로 변환합니다.
URL 인코딩이 중요한 이유
URL은 제한된 ASCII 문자 세트만 포함할 수 있습니다. 특수 문자, 공백, 비ASCII 텍스트는 안전하게 전송하기 위해 인코딩이 필요합니다. 인코딩 없이는 URL이 예측할 수 없는 방식으로 깨집니다 — 공백은 URL을 잘라낼 수 있고, 앰퍼샌드는 파라미터 구분자로 오인될 수 있습니다.
URL 인코더/디코더에서 텍스트가 URL 인코딩될 때 어떻게 변환되는지 확인하세요.
어떤 문자에 인코딩이 필요한가?
안전한 문자 (인코딩 불필요)
문자 (A-Z, a-z), 숫자 (0-9), 그리고 다음 기호: -, _, ., ~
예약 문자 (데이터로 사용 시 인코딩)
| 문자 | 인코딩 | URL에서의 용도 |
|---|---|---|
: | %3A | 스킴 구분자 |
/ | %2F | 경로 구분자 |
? | %3F | 쿼리 문자열 시작 |
# | %23 | 프래그먼트 식별자 |
& | %26 | 파라미터 구분자 |
= | %3D | 키-값 구분자 |
+ | %2B | 종종 공백을 나타냄 |
@ | %40 | 사용자 정보 구분자 |
% | %25 | 인코딩 표시자 |
항상 인코딩
공백 (%20), 비ASCII 문자 (UTF-8 바이트 인코딩), 안전한 세트 외의 모든 문자.
실제 URL 인코딩
쿼리 파라미터
가장 일반적인 사용 사례. 검색 URL이나 API 요청을 구성할 때:
https://api.example.com/search?q=hello%20world&lang=en
폼 데이터
method="GET"을 사용하는 HTML 폼은 필드 값을 자동으로 URL 인코딩합니다. 폼 인코딩에서 공백은 +가 됩니다 (퍼센트 인코딩과 약간 다름).
경로 세그먼트
URL 경로의 파일 이름과 리소스 식별자도 인코딩이 필요합니다. my report.pdf라는 파일은 URL에서 my%20report.pdf가 됩니다.
다양한 언어에서의 인코딩
JavaScript:
encodeURIComponent('hello world & more')
// "hello%20world%20%26%20more"
decodeURIComponent('hello%20world')
// "hello world"
Python:
from urllib.parse import quote, unquote
quote('hello world & more')
# 'hello%20world%20%26%20more'
일반적인 실수
- 이중 인코딩 — 이미 인코딩된 URL을 인코딩하면
%20이%2520이 됩니다 encodeURIComponent대신encodeURI사용 —encodeURI는 쿼리 값에서 중요한 예약 문자를 건너뜁니다+기호 인코딩 누락 — URL에서+는 공백을 의미할 수 있습니다. 리터럴 플러스 기호는%2B로 인코딩하세요- 비ASCII 문자 잊기 — 유니코드 문자는 먼저 UTF-8 인코딩 후 퍼센트 인코딩이 필요합니다
자주 묻는 질문
encodeURI와 encodeURIComponent의 차이점은?
encodeURI는 전체 URL을 인코딩하여 :, /, ?, # 같은 문자를 건너뜁니다. encodeURIComponent는 비예약 문자를 제외한 모든 것을 인코딩합니다 — 개별 쿼리 파라미터 값에 사용하세요.
공백이 때로 +가 되고 때로 %20이 되는 이유는?
폼 인코딩 (application/x-www-form-urlencoded)은 공백에 +를 사용합니다. 표준 퍼센트 인코딩은 %20을 사용합니다. 둘 다 다른 컨텍스트에서 유효합니다.
관련 리소스
- Base64 인코딩 설명 — 또 다른 필수 인코딩 체계
- JSON API 디자인 패턴 — 인코딩을 올바르게 처리하는 API 구축
- URL 인코더/디코더 — URL을 즉시 인코딩하고 디코딩
- Base64 인코더 — Base64 포맷으로 데이터 인코딩