Posts
datasource-proxy를 활용해 n+1 쿼리 검증하기
기존 상황 n+1 쿼리를 db 호출 로그를 통해 육안으로 확인하고 있었습니다.
목적 테스트를 통해서 n+1 쿼리를 빠르게 방지할 수 있는 방법을 찾고 싶습니다.
해결 방안 datasource-proxy 라이브러리를 통해 실행한 쿼리문의 개수를 불러와서 예상한 쿼리문의 수와 맞는지 비교합니다.
설정 build.gradle.kts에 다음과 같은 내용을 dependencies에 추가합니다.
implementation("net.ttddyy:datasource-proxy:1.7") 그리고 spring-boot에서 proxybean을 생성하게 위해서 BeanPostProcessor를 하나 만들어서 등록해줍니다. 테스트에서만 사용할 거라 적절한 @Profile도 붙여줍니다.
@Configuration @Profile("test") class DatasourceProxyBeanPostProcessor : BeanPostProcessor { override fun postProcessAfterInitialization(bean: Any, beanName: String): Any?
Posts
kotlin-spring 간단한 통합 테스트 설정 2
이전 포스트에서 testcontainers를 이용한 스프링 통합 테스트를 다뤘습니다. 이 포스트는 해당 포스트에서 작성한 환경 설정에서 더 나아가는 환경 설정을 다뤘습니다.
기존 상황 testcontainers를 통해 docker 가 설치된 곳이라면 어디서든 독립적으로 통합 테스트를 실행할 수 있도록 만들었습니다. 하지만! 여전히 문제가 있었습니다.
이전 포스트와 같은 설정으로 돌릴 경우, spring의 컨테이너가 시작하기 위해서 띄우는 db 컨테이너와 별개로 테스트에서 쓰기 위해 컨테이너를 하나 더 띄웁니다.
목적 docker container를 한번만 띄우고 싶다.
해결 방법 youtube 영상을 보고 테스트에서 띄운 도커 컨테이너의 설정을 spring 설정에 동적으로 할당하는 방법이 있었습니다.
Posts
kotlin-spring 간단한 통합 테스트 설정
해당 post의 개선 사항을 새로운 글에 올렸습니다. 새로운 글을 적고보니 반말로 썼군요. 앞으로는 존댓말로 쓰겠습니다. 이글을 읽고 불편했던 분들이 있었다면 죄송합니다.
기존 상황 로컬 DB를 사용하여 스프링 통합 테스트를 하고 있었다.
개발망에 서버를 올리고, 추가적인 테스트를 하고 있었다.
목적 코너케이스나 데이터 정합성까진 아니더라도 기본적인 api의 동작 여부는 코드가 변경될 때 마다 자동으로 체크하고 싶다.
해결 방법 db의 멱등성 부여 docker container를 테스트마다 생성함. 자동으로 체크 github actions를 통해 풀리퀘나 푸시가 일어날 때 마다 테스트코드 실행 api 동작 여부 체크 testResttemplate으로 실행 spring 서버에 api 요청 구체적인 설정 dependency 설정 build.