유틸리티

URL 인코딩이란? 한글 주소 깨짐 원인과 해결법

블로그 글 링크를 카카오톡으로 보냈더니 한글 부분이 %ED%95%9C%EA%B8%80 같은 문자열로 바뀌어 있다. 깨진 것처럼 보이지만 실제로는 정상이다. 이게 URL 인코딩이고, 브라우저가 한글을 URL에서 쓸 수 있는 형식으로 변환한 결과다.

URL에 한글이 그대로 못 들어가는 이유

URL 표준(RFC 3986)은 영문 알파벳, 숫자, 일부 특수문자만 허용한다. 한글, 공백, &, = 같은 문자는 URL에 직접 들어갈 수 없어서 퍼센트 인코딩(%XX)으로 변환된다.

  • "서울" → %EC%84%9C%EC%9A%B8 (UTF-8 기준)
  • 공백 → %20
  • & → %26
  • = → %3D

브라우저 주소창에서는 한글이 그대로 보이지만, 실제 HTTP 요청에서는 인코딩된 형태로 전송된다. 복사해서 붙여넣을 때 인코딩된 버전이 나오는 건 이 때문이다.

인코딩 vs 디코딩

작업방향예시
인코딩한글 → %코드검색어=서울 → 검색어=%EC%84%9C%EC%9A%B8
디코딩%코드 → 한글%EC%84%9C%EC%9A%B8 → 서울

실무에서 인코딩이 필요한 경우

API 파라미터 전달
검색어에 공백이나 특수문자가 포함되면 인코딩 없이 보내면 서버가 파라미터를 잘못 파싱한다.
리다이렉트 URL 생성
redirect_url 파라미터 안에 또 다른 URL이 들어가면, 내부 URL의 &와 = 때문에 구조가 꼬인다. encodeURIComponent로 감싸야 안전하다.
마케팅 UTM 파라미터
utm_campaign에 한글 캠페인명을 넣을 때 인코딩하지 않으면 트래킹이 제대로 안 되는 경우가 있다.
TIP encodeURI는 URL 전체 구조를 유지하면서 한글만 변환하고, encodeURIComponent는 /, ?, = 같은 구조 문자까지 전부 변환한다. 파라미터 값만 인코딩할 때는 encodeURIComponent를 써야 한다.

코드를 직접 작성하지 않더라도 URL 인코딩 변환기에 텍스트를 넣으면 인코딩·디코딩 결과를 바로 확인할 수 있다. 깨져 보이는 URL을 디코딩해서 원래 주소를 확인하거나, API에 보낼 파라미터를 인코딩해서 복사하는 용도로 쓸 수 있다.