개발자 도구7 분 읽기|MJ민재

URL 인코딩이란? URL 인코더/디코더 사용법 가이드 2026

URL 인코딩(퍼센트 인코딩)의 개념, encodeURI vs encodeURIComponent 차이, URL 파싱, 흔한 인코딩 실수와 해결법까지.

URL에 한글 넣었더니 %EC%95%88... 이런 괴상한 문자열로 바뀐 경험 있죠? 이게 URL 인코딩이에요. URL에는 영어, 숫자, 몇 개의 특수문자만 허용되거든요. 한글이나 공백 같은 '안전하지 않은' 문자는 %XX 형태로 변환해야 브라우저가 이해해요. API 개발할 때 이거 모르면 한글 파라미터 때문에 반나절 삽질하게 됩니다.

URL 인코딩이란?

URL 인코딩은 URL에서 허용되지 않는 문자를 퍼센트 인코딩 형식으로 변환합니다. 퍼센트 기호(%)와 해당 문자의 ASCII/UTF-8 바이트 값을 나타내는 두 자리 16진수로 구성됩니다. 예를 들어, 공백은 %20이 되고, 한글 '가'는 %EA%B0%80(3바이트 UTF-8)이 됩니다.

  • 공백 → %20 (폼 데이터에서는 +)
  • & → %26 (앰퍼샌드, 쿼리 구분자)
  • = → %3D (등호, key=value 쌍에 사용)
  • / → %2F (슬래시, URL 경로 구분자)
  • ? → %3F (물음표, 쿼리 스트링 구분자)
  • # → %23 (해시, 프래그먼트 식별자)
  • 비ASCII 문자(한글, 중국어 등) → UTF-8 바이트당 여러 %XX 시퀀스

지금 이 도구를 사용해 보세요:

URL 인코더/디코더 사용하기

왜 URL 인코딩이 필요한가?

RFC 3986은 URI에서 허용되는 문자를 정의합니다. 영문자(A-Z, a-z), 숫자(0-9), 그리고 소수의 특수문자(-, _, ., ~)만 허용됩니다. 공백, 한글 등 비영문 문자, 그리고 예약 문자를 다른 용도로 사용할 때는 반드시 퍼센트 인코딩해야 합니다.

  • 브라우저 호환성: 인코딩되지 않은 문자를 브라우저마다 다르게 처리할 수 있음
  • 서버 처리: 웹 서버는 ?, &, = 같은 예약 문자를 기준으로 URL을 파싱
  • 데이터 무결성: 인코딩 없이 특수문자를 쿼리 값에 넣으면 URL 구조가 깨질 수 있음
  • 국제화: 한글, 일본어, 아랍어 등 비ASCII 문자는 안정적인 전송을 위해 인코딩 필수

encodeURI vs encodeURIComponent 차이

JavaScript는 URL 인코딩을 위한 두 가지 내장 함수를 제공합니다. 잘못된 함수를 선택하는 것이 개발자가 가장 흔히 하는 실수입니다:

// encodeURI — 전체 URL을 인코딩할 때
// 인코딩하지 않는 문자: A-Z a-z 0-9 ; , / ? : @ & = + $ - _ . ! ~ * ' ( ) #
encodeURI('https://example.com/path?q=안녕 세계&lang=ko')
// → 'https://example.com/path?q=%EC%95%88%EB%85%95%20%EC%84%B8%EA%B3%84&lang=ko'

// encodeURIComponent — 쿼리 값을 인코딩할 때
// 인코딩하지 않는 문자: A-Z a-z 0-9 - _ . ! ~ * ' ( )
encodeURIComponent('안녕 세계&lang=ko')
// → '%EC%95%88%EB%85%95%20%EC%84%B8%EA%B3%84%26lang%3Dko'
핵심 규칙: 전체 URL을 인코딩하고 싶으면 encodeURI()를 사용하세요. 쿼리 파라미터 값을 인코딩하고 싶으면 encodeURIComponent()를 사용하세요.

URL 파싱: URL 구조 분석

URL 구조를 이해하면 무엇을 어디서 인코딩해야 하는지 알 수 있습니다. URL은 여러 구성 요소로 이루어져 있습니다:

https://example.com:8080/path/to/page?name=%ED%99%8D%EA%B8%B8%EB%8F%99&city=Seoul#section1
|____| |_____________||__||____________||________________________________________||________|
프로토콜   호스트       포트    경로                    검색(쿼리)                    해시
  • 프로토콜(스킴): http, https, ftp — 인코딩 불필요
  • 호스트: 도메인명 또는 IP — 인코딩이 거의 불필요 (국제 도메인은 punycode 처리)
  • 포트: 숫자 — 인코딩 불필요
  • 경로: 경로 세그먼트 — 특수문자가 포함되면 개별 세그먼트를 인코딩
  • 쿼리 스트링: &로 구분된 key=value 쌍 — 키와 값 모두 encodeURIComponent로 인코딩
  • 프래그먼트(해시): # 뒤의 부분 — 특수문자가 포함되면 인코딩

흔한 URL 인코딩 실수

  • 이중 인코딩: 이미 인코딩된 문자열을 다시 인코딩 (예: %20이 %2520이 됨). 인코딩 전에 입력이 이미 인코딩되었는지 확인하세요.
  • 쿼리 값에 encodeURI 사용: &와 =를 인코딩하지 않아 쿼리 스트링 구조가 깨집니다.
  • 인코딩 생략: 사용자 입력을 인코딩 없이 URL에 넣으면 링크가 깨지거나 보안 문제(XSS, 인젝션)가 발생합니다.
  • 전체 URL에 encodeURIComponent 사용: //, /, ? 등이 인코딩되어 URL 자체가 깨집니다.
  • 공백 인코딩 혼동: 폼은 공백에 +를 사용하고(application/x-www-form-urlencoded), URL은 %20을 사용합니다. 어떤 컨텍스트인지 확인하세요.

지금 이 도구를 사용해 보세요:

URL 인코딩하기

자주 묻는 질문

공백에 %20과 +의 차이는?

URL 경로에서 공백은 %20으로 인코딩해야 합니다. HTML 폼 데이터(application/x-www-form-urlencoded)에서는 +로 인코딩됩니다. 둘 다 공백을 나타내지만 사용되는 맥락이 다릅니다. 확실하지 않다면 어디서나 작동하는 %20을 사용하세요.

URL의 모든 문자를 인코딩해야 하나요?

아닙니다. 비예약 문자(A-Z, a-z, 0-9, -, _, ., ~)는 인코딩이 불필요합니다. 예약 문자(/, ?, #, &, = 등)는 예약된 용도 외에 사용할 때만 인코딩이 필요합니다.

URL 인코딩은 유니코드/한글을 어떻게 처리하나요?

문자를 먼저 UTF-8 바이트 시퀀스로 변환한 후, 각 바이트를 퍼센트 인코딩합니다. 예를 들어 '한'은 UTF-8로 3바이트(0xED, 0x95, 0x9C)이므로 %ED%95%9C이 됩니다.

URL 인코딩과 HTML 인코딩은 같은 것인가요?

아닙니다. URL 인코딩은 퍼센트 기호를 사용하고(%20, %26), HTML 인코딩은 앰퍼샌드 시퀀스를 사용합니다(&, <). URL 인코딩은 URL에서 문자를 안전하게 만들고, HTML 인코딩은 HTML 문서에서 문자를 안전하게 만듭니다.

URL 인코딩이 보안 문제를 일으킬 수 있나요?

네. URL에 사용자 입력을 제대로 인코딩하지 않으면 오픈 리다이렉트 취약점, XSS 공격, HTTP 헤더 인젝션이 발생할 수 있습니다. URL에 사용자 데이터를 포함하기 전에 항상 인코딩하세요.

이 글에서 다룬 도구 바로 사용하기

MJ

민재

개발자 겸 테크 라이터. 개발 도구와 파일 변환 기술을 깊이 있게 다룹니다.

이 글이 도움이 되셨나요? 새 가이드 알림 받기

스팸 없이, 새 소식만 보내드립니다. 언제든 취소 가능. · 구독 시 개인정보처리방침에 동의합니다.

이런 글도 좋아하실 수 있어요

84+

제공 도구

97+

블로그 글

English & 한국어

지원 언어

이 페이지를 즐겨찾기하세요! 매주 새로운 무료 도구가 추가됩니다.