지인이 결제모듈을 붙이는 과정에서 EUC-KR로 응답요청을 받아서 아무리 인코딩 설정을 해도 한글이 깨져서 나온다며 구글링해도 해결되지 않아 도움을 요청했다. 어떻게 처리해야할까?
기본적으로 Spring Boot 에서는 Encoding Filter 가 UTF-8로 기본 설정이 된다.
그렇기 때문에 Controller 에서 요청 파라미터를 받았을때 이미 한글이 깨진형태로 나오기때문에 복구할 수가 없는것으로 보인다.
필자의 해결책은 이렇다.
특정 URL만 UTF-8이 아닌 EUC-KR로 바꿔 사용해야 하기때문에 특정 URL에만 동작하는 필터를 하나더 추가한다.
이렇게 추가하게 되면 필터에 등록되어 매핑된 URL이 들어올때 거치게 된다.
필터 체인 막바지 부분에 EUC-KR 인코딩으로 설정되어 파라미터가 잘 인코딩 되어 나오는것을 알 수 있다
혹시나 그래도 글씨가 깨진다면 인코딩되기전에 Request paramter에 접근하게 되면서 인코딩형태가 바뀐것인지 확인한다. (필자의 경우 디버깅을 하면서 보느라 의도치 않게 툴에서 미리 값에 접근하여 인코딩이 깨지는줄 모르고 삽질을 했다..)
항상 해결될 수 있는 해결책은 아니라고 생각한다. 항상 상황은 다르게 주어질 수 있다.
그래서 동작원리를 알아보도록 하자.
캐릭터셋을 지정하지 않는경우 기본적으로 사용되는 캐릭터셋 기본값은 "ISO-8859-1"이다.
EncodingFilter을 타기전에는 인코딩이 기본값으로 설정되어있을 것이다.
위 코드는 파라미터가 생성되는 로직의 한 부분이다.
이처럼 파라미터가 생성(접근)될때 url디코딩에 대한 부분이 보이고 캐릭터 셋에 맞춰서 파라미터에 추가하는것이 확인된다.
이와 같이 파라미터 생성 시점에따라 케릭터셋이 결정되어 생성 될 수 있는 것이다.
(결론적으로 저 파라미터가 생성(접근) 되기전에 캐릭터셋이 적절하게 세팅되어야 한다.)
그래서 파라미터 생성 되는것을 참고하여 경우에따라 필터 순서를 앞서 해야할수도있고 다른방법으로 해결해야할 수 있다.
아무리 구글링하여도 해결이 잘 되지 않는다면 이와 같은 설명을 참고하여 적절하게 사용되면 될것으로 보인다.
참고
'Spring' 카테고리의 다른 글
Spring Boot - 등록된 Bean 객체 사용하기 (0) | 2019.12.17 |
---|---|
2) Spring Boot Validation - Custom Annotation (0) | 2019.12.02 |
Spring Data MongoDB Document (Proxy)객체 저장 후 로드 시 에러 발생 (0) | 2019.08.14 |
1) Spring Boot Validation - Annotation 메세지 & Exception 에러 발생시 동작 설명 (0) | 2019.06.14 |
Spring Boot Jwt인증시 static 리소스 CSRF토큰 재발급 문제 (0) | 2019.06.11 |
댓글