Spring
테스트 성능 및 정합성 개선하기(with ContextCaching, TestContainer)
테스트 성능 및 정합성 개선하기(with ContextCaching, TestContainer)개요 및 문제점안녕하세요 이번에는 사내에서 담당하고있는 프로젝트의 테스트 성능과 정합성을 개선한 사례에 대해 공유드리려 합니다.프로젝트에는 현재 약 1700+ 정도의 테스트 케이스 가 존재하는데요.(현재 기준)실제 정산과 관련된 도메인을 담당하다 보니 보다 꼼꼼한 시나리오 테스트가 필요하고 사이드 이펙트를 방지하기 위해 개발하며 테스트 케이스를 자주 실행하고는 합니다.이때, 테스트 케이스가 증가함에 따라 테스트 코드에 여러 문제점들이 존재했습니다.그래서 테스트 코드를 개선하기로 마음먹게 되는데요.테스트 코드에는 크게 아래와 같은 문제점이 있었습니다.일관성 없는 테스트 결과테스트 성능 이슈문제에 대해 조금 더 살..
[Tomcat] Tomcat Thread Pool 설정 정리 및 테스트
예제 및 테스트 코드는 github 에서 확인 가능합니다.Apache Tomcat 설정에 대해 알아보자안녕하세요 이번에는 스프링에서 쓰이는 Apache Tomcat 의 설정 옵션들그리고 Thread 설정에 따라 어떻게 동작하는지에 대해 한번 알아보려합니다.Tomcat 의 설정 옵션application.ymlserver: tomcat: max-connections: 8192 accept-count: 100 threads: max: 200 min-spare: 10다음은 스프링 부트에서 톰캣을 설정에 대한 옵션입니다.각 옵션별로 하나씩 알아보겠습니다.threads.max생성할수있는 최대 thread 의 갯수이며 실제 Active User 수를 뜻합니다.즉, 순간 처리가능한 ..
[Spring] @Async 사용 방법 및 TaskExecutor, ThreadPool
예제 및 테스트 코드는 github 에서 확인 가능합니다.[Spring] @Async 비동기 처리 및 스레드 풀 설정 안녕하세요 이번에는 스프링에서 비동기처리를 할 수 있는 @Async 에 대해 알아보겠습니다.해당 어노태이션을 통해 실행된 비동기 함수는 별도의 스레드로 실행이 되게 됩니다.그렇기에 비동기 함수를 호출한 main 스레드에서는 해당 함수를 기다릴 필요가 없게됩니다.그리고 비동기 함수를 실행하는 별도의 스레드는 스레드 풀을 통해 설정할 수 있습니다.@Asyncpublic void asyncMethod() { // ...} @Async 의 리턴 타입@Async 의 리턴 타입은 Void, Future, ListenableFuture, CompletableFuture 가 있습니다.(현재 Lis..
[Spring] Spring Event 를 이용한 비동기 이벤트 처리
예제 및 테스트 코드는 github 에서 확인 가능합니다.[Spring] Spring Event 를 이용한 비동기 이벤트 처리Spring Event 는 스프링에서 제공하는 이벤트 기반 프로그래밍을 지원하기 위한 기능입니다.이벤트는 이벤트를 발행하는 주체(publisher) 와 이벤트를 처리하는 주체(listener) 로 나누어 집니다. 이벤트를 이용하면 코드에 대한 의존성을 분리할 수 있고 특정 작업 이후에이벤트를 통해 추가적인 작업을 의존성 없이 진행할 수 있다는 장점이 있습니다. 예를 들면, 회원가입 이후 가입 완료에 대한 메일을 발송하는 경우 메일서버에 장애가 발생해도 회원가입은 정상적으로 이루어져야 합니다.이때, 회원가입과 메일발송에 대한 의존성을 분리하는데 이벤트를 사용할 수 있습니다. Appl..
[Spring] ContextCaching 으로 Test 성능 개선하기 (@MockBean, @SpyBean)
예제 및 테스트 코드는 github 에서 확인 가능합니다. Spring Test 에서 ApplicationContext 캐싱하기안녕하세요 Spring 환경에서 테스트시에 테스트 코드가 늘어남에 따라 테스트 수행시간이 오래걸리는 경우를 한번쯤 겪어보셨을텐데요.일반적으로는 테스트시 @SpringBootTest 를 이용하게 되면 스프링의 ApplicationContext 에 있는 모든 Bean 을 띄우게 됩니다. 이 과정에서의 소요시간이 상당합니다. 만약 테스트마다 ApplicationContext 를 새로 띄우게 되면 그만큼 시간이 더 오래 소요될텐데요. 스프링에서는 이런 문제가 없기 위해 Context Caching 이라는 개념이 존재합니다.테스트시 ApplicationContext 를 캐싱해서 재사용하는..