이 글을 읽을 경우 얻을 수 있는 압도적 혜택
1. 어째서 WebMvcTest에서는 한글 값을 확인할 수 없는 지 알 수 있다.
2. 이제부터 컨트롤러에서 containsString을 통해 한글 값을 테스트 할 수 있다.
3. 커스텀 어노테이션을 만들어서 모든 WebMvcTest에서 사용할 수 있다.
오늘 상품 목록을 작업하기전에 전체 테스트를 돌렸는데 테스트가 하나가 꺠져서 가보니 이런 TODO가 있었다.
컨트롤러에서는 containsString을 통해 결과값을 확인할 때 한글은 아래의 사진 처럼 인코딩이 꺠져서 출력이 되는 문제가 있었다.
이제까지는 그냥 영어로 다 했지만 어쩌다 보니 한글내용을 테스트 해야하는 상황이 발생하여서 이번에는 문제를 해결해 보고자 한다.
먼저 한글은 인코딩이 깨져서 나오는 이유는 무엇일까?
떄는 바야흐로 2019.10.26 스프링 부트 2.2버전과 springFrameWork의 버전을 5.2로 변경하는 역사적인 날에서 부터 시작되었다.
스프링부트 2.2버전의 출시와 함께 스프링에서 MedaiType.APPLICATION_JSON_UTF_8의 사용중단 결정이 내려지고 해당 변경사항이 SpringFreamWork5.2버전 부터 적용이 되었는데 스프링부터 2.2.X버전부터 SpringFreamWork 버전을 5.2로 변경을 했기 때문이다.
이렇게 5.2버전부터 지원을 하지 않는 이유는
JSON규격인 RFC 7159가 폐기되고 RFC 8259로 대체 되었기 떄문이라고 한다...
메이저 브라우저인 크롬에는 이미 RFC 8259 스팩이 적용이 되어 있는 상황이 였고. 그래서 스프링에서도 RFC 8259 스펙을 적용하기로 했고
RFC 8259 스펙 적용은 SpringFrameWork 5.2버전에서 이루어 졌고
스프링부트 2.2버전 부터는 SpringFrameWork 5.2버전을 사용을 한다.
그러니까 예전 5.1버전 에서는 컨텐츠 타입을 MediaType.APPLICATION_JSON UTF_8로 잡아 주었는데 5.2부터는
APPLICATION_JSON으로만 타입을 바꾸어서 한글 인코딩이 깨지는 현상이 발생
해결법
컨트롤러 테스트를 할 떄 사용되는 MVC환경에 addFilters를 통해 UTF-8로 인코딩을 직접 해주면 된다.
하지만 이렇게 하면 조금 귀찮다 각각의 컨트롤러 테스트에서 모두 BeforeEach를 통해 UTF-8로 인코딩을 해주어야 하기 떄문에
방법 2
Custom Annotation 만들기
어노테이션은 New Class를 누르면 나오는 창에서 어노테이션을 선택하면 된다.
커스텀 어노테이션은 처음 사용해 보았는데
Retention이라는 어노테이션은 해당 어노테이션을 런타임에서 사용할 수 있게 해주는 용도로 사용을 한다.
JVM이 자바 바이트코드가 담긴 class 파일에서 런타임환경을 구성하고 런타임을 종료할 때까지 메모리에 살아 있기 때문이다.
이렇게 커스텀 어노테이션을 만들면?
WebMvcTest에서 사용을 할 수 있고 정상적으로 작동도 하는 것을 확인 할 수있다.
'프로젝트' 카테고리의 다른 글
TIL-221124- React 다음 우편주소 찾기 API사용법 (0) | 2022.11.24 |
---|---|
TIL-221123- 기능 구현 후 회개하기 (0) | 2022.11.23 |
TIL-221121 - 페이지네이션을 직접 구현할 필요가 있나? (0) | 2022.11.21 |
TIL-221120- 스프린트의 마무리는 인수테스트로.. (0) | 2022.11.20 |
TIL- 221119- 기능을 위한 기능이 아닌지 의심해보기 (0) | 2022.11.19 |