본문 바로가기

URL 인코더/디코더 - 한글 URL 인코딩 변환 완벽 가이드

URL 퍼센트 인코딩의 원리부터 한글 URL 변환, 개발 실무 활용까지 URL 인코딩/디코딩의 모든 것을 총정리합니다.


URL 인코딩이란?

URL(Uniform Resource Locator)에는 ASCII 문자 중에서도 영문 알파벳, 숫자, 그리고 일부 특수문자(-._~)만 직접 사용할 수 있습니다. 한글, 공백, 특수문자 등 URL에 직접 포함할 수 없는 문자를 안전한 형태로 변환하는 것이 URL 인코딩(퍼센트 인코딩)입니다.

URL 인코더/디코더를 사용하면 한글이 포함된 URL을 안전한 형태로 변환하거나, 인코딩된 URL을 사람이 읽을 수 있는 원래 형태로 복원할 수 있습니다.

왜 URL 인코딩이 필요한가?

1994년에 정의된 URL 표준(RFC 1738)은 ASCII 문자만 허용합니다. 한글 "큰손탐지기"를 URL에 넣으면 %ED%81%B0%EC%86%90%ED%83%90%EC%A7%80%EA%B8%B0로 변환되어야 웹 서버가 올바르게 처리할 수 있습니다. 인코딩 없이 한글을 그대로 사용하면 브라우저나 서버에 따라 URL이 깨지거나 의도와 다른 페이지로 연결될 수 있습니다.

퍼센트 인코딩 원리

인코딩 규칙

URL에 사용할 수 없는 문자는 해당 문자의 UTF-8 바이트 값을 퍼센트(%) 기호와 함께 16진수로 표현합니다. 예를 들어 공백은 %20, 한글 "가"는 UTF-8로 3바이트(EA B0 80)이므로 %EA%B0%80이 됩니다.

예약 문자와 비예약 문자

구분문자인코딩 필요
비예약 문자A-Z, a-z, 0-9, - _ . ~불필요 (그대로 사용)
예약 문자: / ? # [ ] @ ! $ & ' ( ) * + , ; =용도 외 사용 시 필요
기타 문자한글, 일본어, 중국어, 공백 등항상 필요

encodeURI vs encodeURIComponent

JavaScript에서는 두 가지 인코딩 함수가 있습니다. encodeURI()는 전체 URL을 인코딩하되 예약 문자(:, /, ? 등)는 보존합니다. encodeURIComponent()는 예약 문자까지 모두 인코딩하여, 쿼리 파라미터 값에 사용할 때 적합합니다.

한글 URL 인코딩 가이드

한글 인코딩 예시

원문인코딩 결과바이트 수
%EA%B0%803바이트
한글%ED%95%9C%EA%B8%806바이트
인터넷방송%EC%9D%B8%ED%84%B0%EB%84%B7%EB%B0%A9%EC%86%A115바이트
공백 테스트%EA%B3%B5%EB%B0%B1%20%ED%85%8C%EC%8A%A4%ED%8A%B8공백=%20

한글 URL이 깨지는 이유

한글 URL이 깨지는 주된 원인은 인코딩 방식의 불일치입니다. UTF-8로 인코딩해야 하는 것을 EUC-KR로 처리하거나, 이중 인코딩(이미 인코딩된 문자열을 다시 인코딩)이 발생하면 URL이 깨집니다. 한글 URL 인코딩 도구는 항상 UTF-8 기준으로 처리하여 이런 문제를 방지합니다.

한글 도메인(IDN)

한글 도메인(예: 한글.kr)은 Punycode라는 별도의 인코딩 방식으로 처리됩니다. "한글.kr"은 내부적으로 "xn--bj0bj06e.kr"로 변환됩니다. 이는 URL 퍼센트 인코딩과는 다른 개념이므로 혼동하지 않아야 합니다.

URL 인코더 사용법

인코딩 (한글 → 퍼센트 코드)

인코딩할 텍스트를 입력 영역에 붙여넣고 "인코딩" 버튼을 클릭합니다. 전체 URL을 넣을 수도 있고, 특정 파라미터 값만 넣을 수도 있습니다. 결과를 클립보드에 복사하여 바로 사용합니다.

디코딩 (퍼센트 코드 → 한글)

인코딩된 문자열을 입력하고 "디코딩" 버튼을 클릭하면 원래의 한글 텍스트로 복원됩니다. 이메일이나 메시지에서 깨져 보이는 URL을 해독할 때 유용합니다.

활용 팁

SNS에 한글이 포함된 URL을 공유할 때, 일부 플랫폼에서 URL이 잘리는 경우가 있습니다. 이때 전체 URL을 인코딩하면 공백이나 특수문자 없이 안전하게 공유할 수 있습니다.

개발자를 위한 인코딩 가이드

프로그래밍 언어별 함수

언어인코딩 함수디코딩 함수
JavaScriptencodeURIComponent()decodeURIComponent()
Pythonurllib.parse.quote()urllib.parse.unquote()
JavaURLEncoder.encode()URLDecoder.decode()
PHPurlencode() / rawurlencode()urldecode() / rawurldecode()
C#Uri.EscapeDataString()Uri.UnescapeDataString()

API 개발 시 주의사항

REST API에서 쿼리 파라미터에 한글이 포함되면 반드시 인코딩해야 합니다. GET 요청의 URL에 한글이 그대로 포함되면 서버에서 파싱 오류가 발생할 수 있습니다. Content-Type 헤더의 charset도 UTF-8로 통일하세요.

SEO와 URL 인코딩

검색 엔진은 인코딩된 URL과 디코딩된 URL을 같은 페이지로 인식합니다. 하지만 사이트맵이나 내부 링크에서는 일관된 형식을 사용하는 것이 좋습니다. 구글은 UTF-8 인코딩된 한글 URL도 검색 결과에 한글로 표시합니다.

자주 발생하는 인코딩 오류

이중 인코딩 문제

이미 인코딩된 %ED%81%B0을 다시 인코딩하면 %25ED%2581%25B0이 됩니다(%가 %25로 변환). 이렇게 되면 서버에서 올바르게 디코딩할 수 없습니다. 인코딩은 반드시 한 번만 수행하세요.

인코딩 방식 불일치

클라이언트는 UTF-8로 인코딩했는데 서버가 EUC-KR로 디코딩하면 한글이 깨집니다. 현대 웹에서는 UTF-8이 표준이므로, 모든 시스템에서 UTF-8을 사용하도록 통일하세요.

플러스(+)와 %20 혼동

HTML 폼에서 공백은 +로, URL에서는 %20으로 인코딩됩니다. application/x-www-form-urlencoded에서는 +, 그 외에서는 %20을 사용합니다. URL 변환 도구에서 두 방식의 차이를 확인하세요.

자주 묻는 질문

Q. 브라우저 주소창에 한글이 그대로 보이는데 인코딩이 필요한가요?

브라우저는 사용자 편의를 위해 인코딩된 URL을 한글로 표시하지만, 내부적으로는 인코딩된 형태로 처리합니다. 프로그래밍이나 API 호출 시에는 명시적으로 인코딩해야 합니다.

Q. URL 인코딩과 HTML 엔티티는 같은 건가요?

다릅니다. URL 인코딩은 %XX 형식(예: %20), HTML 엔티티는 &name; 또는 &#number; 형식(예: &)입니다. URL에는 URL 인코딩을, HTML 콘텐츠에는 HTML 엔티티를 사용합니다.

Q. 한글 파일명이 포함된 다운로드 URL이 깨져요.

Content-Disposition 헤더에서 파일명을 UTF-8로 인코딩해야 합니다. filename*=UTF-8''%EC%98%88%EC%8B%9C.pdf 형식을 사용하면 대부분의 브라우저에서 한글 파일명이 올바르게 표시됩니다.

Q. URL 최대 길이는 얼마인가요?

표준에 명시된 제한은 없지만, 실무적으로 IE는 2,083자, Chrome은 약 32KB까지 지원합니다. 한글은 인코딩 시 글자당 9바이트(3바이트 × %XX 3자)를 차지하므로, 긴 한글 URL은 길이 제한에 걸릴 수 있습니다.

3일 무료체험큰손탐지기, 지금 바로 시작하세요

설치 없이 웹에서 바로 사용 가능 · PC & 모바일 지원

무료체험 시작
카카오톡 상담