속닥속닥 테스트 성능 개선기, 어떻게 했는지 알아보기(TODO)

조현근·2022년 11월 1일
0

속닥속닥 프로젝트를 진행하면서, 팀원들이 테스트 성능 개선을 진행했습니다. 어떤 방법으로 테스트 성능을 개선했는지 팀원이 작성한 블로그를 보고 팔로우해보겠습니다.

팀이 작성한 테스트 성능 개선 포스트

https://sokdak-sokdak.tistory.com/24

테스트 속도를 개선해야 하는 이유

속닥속닥 프로젝트에는 약 450개의 테스트코드가 있습니다. 기능개발을 하면서 전체 테스트를 종종 돌리게 되는데, 테스트가 완료될때까지 개발 공백이 생기게 됩니다. 프로젝트 막바지에 기능 2개를 개발했었는데, 중간중간 전체 테스트를 돌리면서 한참 기다렸던 기억이 있습니다. 중간중간 1분 씩 기다리는 것이 생각보다 개발 흐름을 방해하기 때문에 테스트 속도를 개선하는 것이 개발 효율을 높혀주는데 큰 도움이 될 거라 생각합니다.

개선 사항

팀에서 크게 2가지 방법으로 테스트 속도를 개선했습니다.
첫 번째는 Context Caching을 사용했고,
두 번째는 인수테스트에서 불필요한 로그인 API 호출을 제거했습니다.
하나하나 어떻게 성능이 개선되었는지 알아보겠습니다.

Context Caching

우선 Context Caching이 무엇인지 알아보겠습니다.

밑 줄친 부분을 해석해보면 다음과 같습니다.
Spring TestContext Framework는 ApplicationContext 인스턴스들과 WebApplicationContext 인스턴스들을 일관된 로딩 뿐만 아니라 이 context를 캐싱하는 것을 제공한다.
테스트가 application context를 망가뜨리고 reloading을 요구하는 경우(bean definition이 바뀌거나 application object의 상태가 바뀜) TestContext framework는 다음 테스트를 실행하기 전에configuration을 reload하고 application context를 rebuild하도록 설정될 수 있습니다.
즉 스프링 테스트에선 ApplicationContext를 캐싱해 테스트 속도를 증가 시켜주는데, ApplicationContext에 포함된 bean의 종류나 상태가 바뀌는 경우 새롭게 ApplicationContext를 loading 합니다. ApplicationContext가 로딩되는 시간이 오래걸리니 캐싱해 재사용하면 테스트 속도를 향상시킬 수 있습니다.

그럼 Context Caching은 어떤 상황에 일어날까요?

밑 줄친 부분을 해석해보았습니다.
ApplicationContext(혹은 WebApplicationContext)를 testContext 프레임워크가 한번 띄우면 캐싱되고 같은 test suite내의 same unique context configuration가 선언된 테스트에서 재사용된다.

https://docs.spring.io/spring-framework/docs/current/reference/html/testing.html#testing-ctx-management
https://docs.spring.io/spring-framework/docs/current/reference/html/testing.html#testcontext-ctx-management-caching

profile
안녕하세요!

0개의 댓글