[One-Day Tech Talk] URL 인코딩 (퍼센트 인코딩)

황제연·2025년 2월 24일

CS학습

목록 보기
14/194
post-thumbnail

서론

AES256 알고리즘 등으로 암호화된 키를 쿼리스트링으로 전달할 때,
브라우저나 서버가 이를 유효하지 않은 URL로 인식하는 경우가 있습니다.
이는 암호화된 문자열에 URL에서 허용되지 않는 문자가 포함되어있기 때문입니다

이번 글에서는 웹에서 유효한 URL을 구성하는 방법과 URL 인코딩(퍼센트 인코딩)에 대해 정리하겠습니다

유효한 URL 작성법

서버가 URL을 올바르게 해서갛려면, 표준 형식에서 변환하는 URL 인코딩 과정이 필요합니다
RFC 3986 문서에 따르면 URL은 ASCII 인코딩을 표준으로 사용하며, ASCII에 포함되지 않은
문자는 반드시 변환해야 합니다

만약 ASCII 문자 코드에 없는 문자가 포함되어 있는데 URL인코딩을 적용하지 않는다면,
앞서 언급한 것처럼 URL이 유효하지 않다는 오류가 발생할 수 있습니다

URL에서 허용하는 문자

허용하는 URL문자란 ASCII 문자 코드에 포함되어 있으면서 예약되지 않은 특수문자를 의미합니다
대표적으로 다음과 같습니다

  • 영문자 (A-Z, a-c)
  • 숫자 (0-9)
  • 예약되지 않은 특수문자 (- _ . ~)

이외의 예약된 특수문자나 ASCII에 없는 문자는 반드시 URL인코딩을 적용해야 합니다

URL 인코딩 (퍼센트 인코딩)

이때 사용하는 방법이 바로 URL 인코딩, 다른 말로는 퍼센트 인코딩이라고 합니다
퍼센트 인코딩은 특정 문자를 ASCII값의 16진수 표현으로 변환하는 방식입니다
각 문자는 %기호와 함께 16진수 코드로 치환됩니다

예를들어, :은 %3A, /는 %2F로 변환됩니다

URL 인코딩이 필요한 특수문자

다음은 URL에서 반드시 인코딩해야하는 주요 특수 문자 목록입니다

문자인코딩
:%3A
/%2F
?%3F
#%23
[%5B
]%5D
@%40
!%21
$%24
&%26
'%27
(%28
)%29
*%2A
+%2B
,%2C
;%3B
=%3D
%%25
공백%20 또는 +
"%20
<%3C
>%3E
%%25
|%7C

위 특수문자가 옆에 있는 인코딩 문자열로 변경되며,
대상이 아닌 특수문자도 인코딩을 할 수는 있지만 권장되지는 않습니다

공백은 + 또는 %20으로 변환되는데,
+는 쿼리 스트링에서 공백을 의미하지만, 경로에서는 %20을 사용해야합니다

한글 URL 인코딩

한국에서 서비스한다면 입력값으로 URL에 한글이 포함될 수 있습니다
예를들어, 어떤 검색사이트에서 한글로 검색하면 URL이 길어지는 것을 볼 수 있는데,
이는 한글이 URL 인코딩되어 있기 때문입니다.

한글 인코딩 예시

아래와 같은 한글 입력값이 있다고 가정해보겠습니다
"백엔드개발자"

URL 인코딩을 적용하면 아래와 같은 결과가 나옵니다

%EB%B0%B1%EC%97%94%EB%93%9C%EA%B0%9C%EB%B0%9C%EC%9E%90

반대로 URL 디코딩을 적용하면 원본 한글 문자열로 복원됩니다

URL 인코딩이 필요한 이유

URL 인코딩은 전달받은 서버가 URL을 정상적으로 해석하기 위해 반드시 필요합니다
특히 다음과 같은 경우에는 반드시 URL 인코딩을 적용해야 합니다

  • 한글과 같은 ASCII에 없는 문자 처리
  • 예약된 특수문자 해석 방지

ASCII에 없는 경우, URL에 표현될 수 없기 때문에 변환이 필요하며,
URL에서 ?나 # 같이 특정한 의미를 가지는 경우 인코딩하지 않으면 잘못 해석될 수 있기 때문에 반드시 URL인코딩이 필요합니다

정리

  • URL인코딩은 ASCII 인코딩을 표준 방식으로 사용하고 있습니다
  • 영문자나 숫자, 예약되지 않은 일부 특수문자는 URL인코딩 없이 사용 가능합니다
  • 예약된 특수문자 및 한글은 반드시 URL인코딩을 적용해야합니다
  • URL인코딩을 적용해야 서버가 URL을 정확하게 해석할 수 있기 때문에 URL인코딩이 필요합니다

참고

profile
Software Developer

0개의 댓글