유틸리티

URL에 특수문자나 공백이 있으면 왜 오류가 날까?

웹 주소에 한글이나 특수문자, 공백이 포함되면 링크가 깨지거나 오류가 납니다. 왜 이런 문제가 생기고, 어떻게 해결해야 할까요?

URL의 구조

URL은 프로토콜(https), 도메인(example.com), 경로(/page), 쿼리(?key=value)로 구성됩니다. 이 표준은 영문 알파벳, 숫자, 일부 특수문자만 허용합니다. 공백, 한글, &, = 같은 문자는 문제를 일으킬 수 있습니다.

문제가 생기는 경우

  • 공백: "hello world"가 경로에 있으면 두 단어로 분리됨
  • &: 쿼리 파라미터 구분자로 인식됨
  • =: 키-값 구분자로 인식됨
  • 한글: ASCII 범위를 벗어남

URL 인코딩이란?

문제가 되는 문자를 %XX 형태로 변환하는 것입니다. 공백은 %20, &는 %26, 한글은 UTF-8 코드로 변환됩니다. 예: "안녕" → "%EC%95%88%EB%85%95"

언제 인코딩이 필요한가?

상황인코딩 필요
쿼리 파라미터 값O
경로에 한글 포함O
일반 영문 URLX
이미 인코딩된 URLX (이중 인코딩 주의)

온라인 인코딩

URL 인코딩 도구에 문제가 되는 부분을 붙여넣으면 바로 인코딩된 결과를 얻을 수 있습니다. 복사해서 URL에 사용하면 됩니다.

디코딩도 가능

%EC%95%88%EB%85%95 같은 인코딩된 문자열이 뭔지 알고 싶다면 디코딩하면 됩니다. 퍼센트 인코딩 변환기에서 디코딩 버튼을 누르면 원본 텍스트를 확인할 수 있습니다.

개발에서의 처리

JavaScript: encodeURIComponent() / decodeURIComponent()

Python: urllib.parse.quote() / urllib.parse.unquote()

프레임워크가 대부분 자동 처리하지만, 수동으로 URL을 조합할 때는 주의가 필요합니다.

흔한 실수

전체 URL을 인코딩하면 안 됩니다. "https://"까지 인코딩되면 링크가 작동하지 않습니다. URL 인코더는 필요한 부분만 선택적으로 처리하세요.