안녕하세요, 이번 글은 저희가 CommonResult라는 공통포멧을 만들어서 Response로 반환하여 사용하는데, CommonResult의 필드에는 int(상태코드), String(메시지), T(데이터) 이렇게 사용을 하기로 팀원이 제안을 하였습니다. 그래서 Response로 CommonResult를 하는데 문제점이 json을 반환하기때문에 테스트코드에서는 jsonPath을 통해서 값을 확인하는데 바로 한글이 깨지는 문제가 생겼습니다. 이러한 한글깨짐 문제를 해결하는 방법은 2가지였습니다.
@Before
public void setup() {
this.mockMvc = MockMvcBuilders.webAppContextSetup(wac)
.addFilters(new CharacterEncodingFilter("UTF-8", true)) // 필터 추가
.alwaysDo(print())
.build();
}
모든 테스트 코드에서 메서드시작전에 mockmvc에 설정을 해주는 방법이 첫번쨰입니다.
2번째
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@AutoConfigureMockMvc
@Import(EnableMockMvc.Config.class)
public @interface EnableMockMvc {
class Config {
@Bean
public CharacterEncodingFilter characterEncodingFilter() {
return new CharacterEncodingFilter("UTF-8", true);
}
}
}
직접 어노테이션을 만들어서 어노테이션을 클래스에 붙여준다면 해결이 되는 것입니다.
그런데 테스트코드에서도 분명 두개가 모두 같은점을 해결하지만 성능에서 차이점이있다고 생각하여 테스트했습니다
각각의 메서드는 3번씩 돌려줬습니다.
실험결과
각각의 메서드로 돌릴경우 회원가입실패 id null 시간차이(m) : 822, 1086, 1571, 1049
어노테이션 : 각각의 메서드 돌릴경우 : 442, 454, 409
아이디 null : 실패 아이디 널 시간차이(m) : 9, 시간차이(m) : 4, 실패 아이디 널 시간차이(m) : 6
성공 회원가입 시간차이 : 77, 85
어노테이션
아이디 null : 실패 아이디 널 시간차이(m) : 4, 4, 5
성공 회원가입 시간차이(m) : 84, 76, 77
실험결과에서는 나머지 부분에서는 차이가 없지만 알수있는정보는 단일 테스트로 돌릴경우 beforeEach가 작동되면서 시간이 많이걸리게되는것같습니다. 그래서 저는 어노테이션 방법을 선택했습니다. 저렇게 시간차이가 생기는이유는 주입설정을 하는 과정이 더 많아서 그런것같습니다.
그래서저는 어노테이션을 선택했습니다
'Delivery' 카테고리의 다른 글
레디스에 대해 알아보자 (0) | 2022.08.05 |
---|---|
Mybatis batch처리 성능과 트랜잭션 (0) | 2022.08.01 |
Mybatis ${}, #{} 차이 (0) | 2022.07.17 |
피드백 반영 리펙토링 후기 (0) | 2022.07.16 |
코드리팩토링 - (CheckStyle, AccessLevel, Builder, final) (0) | 2022.07.13 |