API 개발 중 클라이언트에서 보내는 파라미터는 웹서버로 url 인코딩이 되어 들어오고, 웹서버에서는 백엔드 서버 쪽으로 평문을 암호화하여 보내고 있었다.
인코딩 문제로 인해 제대로 통신이 되고 있지 않은 것을 깨닫고 인코딩 개념에 대해 공부하고자 한다.
인코딩이란?
인코딩은 정보의 형태나 형식을 표준화, 보안, 처리 속도 향상, 저장 공간 절약 등을 위해 다른 형태나 형식으로 변환하는 처리 혹은 그 처리 방식을 말한다.
URL Encoding & Decoding
URL 인코딩이란 URL에서 url로 사용할 수 없는 문자 혹은 url로 사용할 수 있지만 의미가 왜곡될 수 있는 문자들을 '% XX'의 형태로 변환하는 것을 말한다. 그리고 URL 디코딩이란 변환된 url을 다시 원래 형태로 되돌리는 것을 말한다.
URL Encoding/Decoding이 왜 필요한 걸까?
1. 인터넷을 통해 전송할 수 있는 문자는 오직 ASCII 문자이기 때문이다.
한글은 ASCII 문자가 아니므로 인터넷을 통해 전송할 수 있는 형태로 변환이 필요하다. 이때 변환하는 규칙은 UTF-8을 따른다. 이밖에도 공백 문자, 특수문자 등의 문자는 인코딩이 필요하여, 웹 브라우저가 서버로 보내기 전에 URL을 인코딩한다.
2. ASCII 문자라 하더라도 예약된 의미를 갖고 있는 문자의 경우, 그 문자 자체의 의미를 전달하고 싶은 경우에 이스케이프 처리가 필요하기 때문이다.
대표적으로 '/', '&', '=' 등이 있다. '/'은 URL의 각 레벨을 구분해주는 역할을 하고, '&'는 쿼리 파라미터들을 구분해주는 역할을 하며, '='은 쿼리 파라미터 값을 지정해주는 역할을 한다.
이러한 문자들은 ASCII 문자이지만 url 내에서 예약된 의미를 가지므로, 문자 그 자체의 의미로서 전달하고 싶다면 이스케이프 처리가 필요하다.
샘플 URL | |
URL Encode 전 | http://www.naver.com/search?name=홍길동 |
URL Encode 후 | http%3a%2f%2fwww.naver.com%2fsearch%3fname%3d%ed%99%8d%ea%b8%b8%eb%8f%99 |
URL Decode 후 | http://www.naver.com/search?name=홍길동 |
URL Encoding & Decoding 온라인 툴
https://meyerweb.com/eric/tools/dencoder/
Base64 Encoding & Decoding
Base64 인코딩은 Binary data를 text로 바꾸는 처리 방식이다.
Base64는 말 그대로 하면 64진법이다. 각각의 Base64 문자 하나는 6비트를 나타내는데 64개의 문자를 0부터 63까지 숫자로 변환하여 전체 데이터를 하나의 String으로 바꾸는 인코딩 방식을 말한다.
Binary Data를 ASCII 영역의 문자로만 이루어진 문자열로 바꾸는 인코딩 방법이다. ASCII 중에서도 제어 문자와 일부 특수문자를 제외한 안전한 64개의 출력 문자만 사용하여 바꾼다.
(URL Encode는 특수문자가 포함된 문자열로 바꾸는 인코딩 방법)
샘플 URL | |
Base64 Encode 전 | {"name":"홍길동", "level": 3, "age": 27} |
Base64 Encode 후 | eyJuYW1lIjoi7ZmN6ri464+ZIiwgImxldmVsIjogMywgImFnZSI6IDI3fQ== |
Base64 Decode 후 | {"name":"홍길동", "level": 3, "age": 27} |
'Devlog > Web' 카테고리의 다른 글
Flask Framework 이해하기 (0) | 2022.07.22 |
---|---|
브라우저의 렌더링 과정 (0) | 2022.06.10 |
Node.js 란? (0) | 2022.04.06 |
CORS(Cross-Origin Resource Sharing) (0) | 2021.07.05 |
웹페이지 HTTP 헤더를 커스텀하게 변경할 수 있는 ModHeader (0) | 2021.04.06 |