DevTool Hub
Guide

URL 인코딩에서 자주 하는 실수

중복 인코딩과 공백 처리 등 실무에서 많이 발생하는 문제를 정리합니다.

작성자: DevTool Hub게시일: 2026-03-01업데이트: 2026-03-01읽는 시간: 약 2

목차

URL 인코딩에서 자주 하는 실수

URL 인코딩은 간단해 보이지만 실수하면 파라미터가 깨지거나 중복 인코딩되는 문제가 생깁니다. 특히 검색어, 리다이렉트 URL, 한글 경로, 서명된 요청을 다룰 때 어디서 인코딩하고 어디서 디코딩하는지 정해져 있지 않으면 디버깅이 길어집니다.

1) 전체 URL 인코딩은 피하기

일반적으로는 쿼리 파라미터 값만 인코딩하는 것이 안전합니다.

예: 검색어만 인코딩

q=hello world

q=hello%20world

2) 이미 인코딩된 값을 다시 인코딩하지 않기

  • %20%2520으로 변하는 문제가 발생합니다.
  • 서버에서 디코딩을 한 번만 수행하는지 확인하세요.
  • 프레임워크 자동 디코딩 여부를 먼저 확인하세요.

3) 공백 처리 방식

  • +는 쿼리 스트링에서 공백으로 해석되기도 합니다.
  • 일반적으로 %20이 더 안전합니다.

4) 실무 팁

  • 인코딩/디코딩 위치를 명확히 정리하세요. (클라이언트 vs 서버)
  • 중복 인코딩이 발생하지 않도록 테스트 케이스를 추가하세요.
  • 외부 API 서명 로직은 인코딩 순서를 문서와 정확히 맞추세요.

5) 바로 써보기

URL Encode/Decode에서 입력 문자열을 인코딩/디코딩해 정상 여부를 확인하세요.

6) encodeURI vs encodeURIComponent

  • encodeURI: 전체 URL에 사용 (쿼리 구분자는 인코딩하지 않음)
  • encodeURIComponent: 파라미터 값에 사용

이 둘을 섞어 쓰는 것이 대표적인 실수입니다. 예를 들어 전체 URL 문자열에 encodeURIComponent를 적용하면 :, /, ?, =까지 모두 바뀌어 URL 구조 자체가 깨집니다. 반대로 파라미터 값에 encodeURI를 쓰면 &=가 남아서 의도하지 않은 분리가 발생할 수 있습니다.

7) 서버 디코딩 위치

  • 프레임워크가 자동으로 디코딩하는 경우가 많습니다.
  • 이미 디코딩된 값을 다시 디코딩하면 깨질 수 있습니다.

8) 자주 보는 사례

검색어에 C++, #, &, 한글이 들어갈 때 문제를 가장 쉽게 재현할 수 있습니다. +는 어떤 환경에서는 공백으로 처리되고, 어떤 환경에서는 그대로 남기도 합니다. 또 리다이렉트 URL을 파라미터로 다시 감싸는 이중 URL 구조에서는 한 단계 바깥과 안쪽의 인코딩 규칙이 달라 혼란이 커집니다.

9) 체크리스트

  • 어디서 인코딩/디코딩하는지 명확한가?
  • 중복 인코딩이 발생하지 않는가?
  • 공백이 의도대로 처리되는가?
  • 전체 URL과 파라미터 값을 서로 다른 함수로 처리했는가?

10) 추가 예시

  • 검색어에 #가 포함되면 반드시 인코딩해야 합니다.
  • 서버에서 +를 공백으로 처리하는지 확인하세요.
  • 리다이렉트 URL을 파라미터로 넘길 때는 안쪽 URL을 별도로 인코딩해야 합니다.
Author

운영 및 검수 정보

이 문서는 DevTool Hub에서 작성하고 유지 보수합니다. 실무에서 자주 발생하는 문제를 기준으로 정리하며, 잘못된 설명이나 오래된 내용은 검토 후 수정합니다.

운영 정책은 Editorial Policy에서 확인할 수 있고, 수정 제보는 Contact로 받을 수 있습니다.

관련 도구

다음 읽을 글

Feedback
내용 개선이나 오류 제보는 Contact로 알려주세요.