서버 로그에서 URL 하나를 가져왔더니 이렇게 생겼습니다: https://example.com/search?q=hello%20world&redirect=https%3A%2F%2Fother.com%2Fpath. 쿼리 파라미터를 읽어야 하지만, 퍼센트 인코딩 때문에 한눈에 알아보기가 거의 불가능합니다. 그래서 브라우저 도구에 붙여넣고, 디코딩하고, 결과를 읽은 다음 무언가를 테스트하기 위해 수정된 버전을 다시 인코딩합니다. 사소한 작업 하나에 웹사이트를 두 번이나 왕복하는 셈입니다.
URL 인코딩은 개발자가 끊임없이 다루면서도 잘 신경 쓰지 않는 대상입니다 — 깨진 리다이렉트, 잘못된 쿼리 문자열, 또는 이중으로 인코딩된 파라미터가 5분짜리 작업을 한 시간짜리 디버깅 세션으로 바꿔놓기 전까지는 말입니다.
URL 인코딩이 실제 문제를 일으킬 때
이중 인코딩은 대표적인 함정입니다. URL이 애플리케이션에서 한 번 인코딩되고 미들웨어 계층에서 또 한 번 인코딩되면 %20이 %2520으로 바뀝니다. 이를 진단하려면 URL을 단계별로 디코딩하면서 추가 인코딩이 정확히 어디서 끼어들었는지 확인해야 합니다. Terminal에서 python3 -c "import urllib.parse; print(urllib.parse.unquote('...'))"로 이 작업을 할 수는 있지만, 긴 URL의 경우 느리고 실수하기 쉽습니다.
인코딩 실수는 OAuth 흐름, 웹훅 URL, 그리고 리다이렉트 URI가 정확히 일치해야 하는 API 콜백도 망가뜨립니다. 빠르게 인코딩과 디코딩을 할 수 있으면 앱이 보내는 값과 서버가 기대하는 값을 비교할 수 있습니다.
URL을 즉시 인코딩·디코딩하기
Bellows는 41가지 개발자 도구 중 하나로 URL 인코더와 디코더를 제공합니다. 인코딩된 URL을 붙여넣으면 읽기 쉬운 버전을 볼 수 있습니다. 평문 URL을 입력하면 올바르게 인코딩된 결과를 얻습니다. 클릭 한 번으로 인코딩과 디코딩을 전환할 수 있으며, 결과는 실시간으로 갱신됩니다.
리다이렉트 디버깅
OAuth와 SSO 흐름은 리다이렉트 URI를 URL로 인코딩된 쿼리 파라미터로 전달합니다. 리다이렉트가 실패하면 첫 단계는 URL을 디코딩해서 목표 값이 등록된 콜백과 일치하는지 확인하는 것입니다. 로컬 도구가 있으면 IDE를 벗어나거나 민감할 수 있는 콜백 URL을 공개 웹사이트에 붙여넣지 않고도 이 작업을 할 수 있습니다.
쿼리 문자열 다루기
URL 파라미터를 통해 복잡한 필터나 검색어를 받는 API는 &, =, +, 공백 같은 특수 문자를 신중하게 인코딩해야 하는 경우가 많습니다. 전용 인코더를 사용하면 해당 맥락에서 어떤 문자를 이스케이프해야 하는지 추측하지 않고도 올바른 결과를 얻을 수 있습니다.