검색 결과 주소를 복사했더니 %EA%B2%80%EC%83%89 같은 알 수 없는 문자가 잔뜩 붙어 있던 경험이 있을 것입니다. 이것이 퍼센트 인코딩입니다. 왜 이런 변환이 필요하고 어떻게 작동하는지 이해하면, 주소가 깨지거나 값이 잘못 전달되는 문제를 피할 수 있습니다.
왜 인코딩이 필요한가
URL에는 쓸 수 있는 문자가 정해져 있습니다. 영문자, 숫자, 그리고 일부 기호(-, _, ., ~ 등)만 그대로 쓸 수 있습니다. 문제는 주소에 한글이나 공백, 그리고 ?, &, = 같은 특수문자를 넣어야 할 때입니다.
이런 특수문자 중 일부는 URL에서 이미 특별한 역할을 맡고 있습니다. ?는 쿼리의 시작, &는 매개변수 구분, =는 키와 값의 연결을 뜻합니다. 그래서 이런 기호를 데이터로 넣으려면 구조를 나타내는 기호와 구분해 줘야 합니다. 또 공백이나 한글처럼 URL이 허용하지 않는 문자도 안전한 형태로 바꿔야 합니다. 이 변환이 퍼센트 인코딩입니다.
어떻게 작동하나
퍼센트 인코딩은 문자를 그 문자의 바이트 값으로 바꾸고, 앞에 퍼센트 기호(%)를 붙입니다. 예를 들어 공백은 %20으로 바뀝니다. 한글은 UTF-8 기준으로 여러 바이트를 차지하므로, 한 글자가 %EA%B2%80처럼 여러 개의 퍼센트 코드로 표현됩니다.
이렇게 변환하면 어떤 문자든 URL에 안전하게 담을 수 있고, 받는 쪽은 반대로 디코딩해서 원래 문자를 복원합니다. URL 인코더·디코더는 문자열을 이 방식으로 인코딩하거나, 인코딩된 값을 원문으로 디코딩해 확인할 수 있습니다.
전체 URL을 통째로 인코딩하면 안 되는 이유
여기서 중요한 함정이 있습니다. 인코딩은 주소 전체가 아니라 값 하나에 적용해야 합니다.
전체 URL을 통째로 인코딩하면, 구조를 나타내는 :(프로토콜)와 /(경로 구분)까지 %3A, %2F로 바뀌어 주소가 깨집니다. 예를 들어 검색어 '업무 도구'를 쿼리에 넣고 싶다면, 이 검색어 부분만 인코딩해서 ?q=%EC%97%85%EB%AC%B4%20%EB%8F%84%EA%B5%AC처럼 만들어야 합니다. 주소의 나머지 골격은 그대로 두어야 합니다.
그래서 이 도구는 전체 주소가 아니라 쿼리 값이나 경로 조각 하나를 다룰 때 적합합니다. 구성 요소 단위로 인코딩하는 방식(encodeURIComponent)을 사용하기 때문에, 값 하나를 넣어 변환하는 것을 권장합니다.
자주 하는 실수
이중 인코딩. 이미 인코딩된 값을 다시 인코딩하면 %가 또 변환되어(%가 %25로) 원문으로 되돌릴 수 없게 꼬입니다. 넣는 값이 원문인지 이미 인코딩된 값인지 확인하세요.
공백과 + 기호. 웹 폼 데이터에서는 공백을 +로 바꾸는 별도 규칙이 쓰이기도 합니다. 이는 퍼센트 인코딩(%20)과 다른 방식이므로, 어떤 규칙이 적용되는 환경인지 알아야 합니다.
한글이 깨지는 문제. 인코딩과 디코딩의 문자 기준(UTF-8 등)이 맞지 않으면 한글이 깨집니다. 최신 환경은 대부분 UTF-8을 쓰므로 이 도구도 UTF-8 기준으로 처리합니다.
자주 묻는 질문
Q. %20은 무슨 뜻인가요? 공백 문자의 퍼센트 인코딩 표현입니다. 주소에서 공백은 그대로 쓸 수 없어 %20으로 바뀝니다.
Q. 전체 URL을 넣어도 되나요? 가능하지만 이 도구는 입력 전체를 구성 요소 방식으로 변환하므로 콜론·슬래시까지 인코딩됩니다. 값 하나만 넣는 것을 권장합니다.
Q. 이미 인코딩된 값을 또 넣으면요? 이중으로 변환되어 꼬입니다. 원문인지 확인하고 사용하세요.
Q. 한글도 되나요? 네. UTF-8 기준의 퍼센트 인코딩으로 안전하게 변환·복원됩니다.
인코딩·디코딩의 문자 기준이 다른 환경에서는 결과가 깨질 수 있으니 사용하는 시스템의 기준을 확인하세요.