관리 메뉴

JIE0025

[로그보기] url param 인코딩과 디코딩 관련 본문

백엔드/이슈, 트러블슈팅

[로그보기] url param 인코딩과 디코딩 관련

Kangjieun11 2023. 3. 24. 00:07
728x90

 

✅  의문 

 
FE가 API 요청 응답 기능테스트를 진행하며 발생하는 로그를 확인했는데,
GET '/api/v1/amenities?state=%EA%B2%BD%EA%B8%B0
이렇게 로그가 찍힌걸 확인되었다. 
 
 
POSTMAN으로 테스트했을 때에도 나는한글로
GET '/api/v1/amenities?state=경기
 

 
이렇게 보냈었기 떄문에  로그에서도 한글로 나올 줄 알았는데, 

전혀 다른 문자열이 들어오고 있어서
잘 들어오고 있는게 맞는지 체크가 필요했다.
 
 
알아보니 해당 문자열은 한글이 인코딩된 값이었다.
 
 

✅ 인코딩 ?

URL 인코딩,  URL 디코딩은 컴퓨터에 여러 언어를 사용하다보니 생긴 문제를 해결하기 위해서 나온 것
인코딩된 값을 통해 컴퓨터가 더 명확히, 편하게 읽는다고 한다. 
 
 
param으로 한글을 보내고 있는데 만약 그게 인코딩 된 값이라고 했을때
스프링부트에선 DTO로 디코딩을 자연스럽게 해주는게 궁금해졌다.
 
 

✅ 궁금증 해결

 

Spring Boot는 HTTP 요청을 처리할 때, 기본적으로 UTF-8 인코딩을 사용한다.

 

만약에 클라이언트에서 요청한 값이 UTF-8로 인코딩되어 있다면,

Spring Boot는 자동으로 해당 값을 디코딩하여 DTO의 필드에 바인딩해준다고 한다.

 

 

 

 

내 요청 메소드와 파람의 경우,

GET '/api/v1/amenities?state=%EA%B2%BD%EA%B8%B0를 받았을 때

 

@RequestParam 어노테이션으로 선언한 state 파라미터를 문자열 타입인 String으로 받으면서

Spring Boot는 해당 값을 UTF-8 디코딩하여 "경기"라는 문자열을 자동으로 DTO에 설정해준다.