[스프링] 프로파일마다 다른 쓰레드 풀 설정
스프링 애플리케이션을 운영하다 보면 여러 가지 환경에서 사용해야 할 상황이 발생할 수 있습니다. 각각의 환경에 따라 쓰레드 풀의 설정이나 운영 방식을 다르게 할 필요가 있습니다. 이를 프로파일마다 다르게 적용할 수 있다면 애플리케이션의 성능을 향상시킬 수 있을 것입니다. 이번 포스트에서는 스프링을 사용하여 프로파일마다 다른 쓰레드 풀 설정을 적용하는 방법에 대해 알아보겠습니다.
프로퍼티 설정을 이용한 다른 쓰레드 풀 생성
먼저, application.properties
파일에 각 프로파일에 대한 쓰레드 풀 설정을 작성합니다.
# production profile
spring.profiles.production.corePoolSize=200
spring.profiles.production.maxPoolSize=500
spring.profiles.production.queueCapacity=1000
# development profile
spring.profiles.development.corePoolSize=100
spring.profiles.development.maxPoolSize=300
spring.profiles.development.queueCapacity=500
이제 설정한 값을 스프링 @Configuration 클래스에서 사용하여 쓰레드 풀을 생성합니다.
쓰레드 풀을 생성하는 Configuration 클래스
프로퍼티 값을 쓰레드 풀 설정으로 사용하기 위해 @ConfigurationProperties
어노테이션을 사용하는 Configuration 클래스를 만듭니다.
@Configuration
@EnableConfigurationProperties(ThreadPoolProperties.class)
public class ThreadPoolConfig {
@Autowired
private ThreadPoolProperties threadPoolProperties;
@Bean
public ThreadPoolTaskExecutor taskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(threadPoolProperties.getCorePoolSize());
executor.setMaxPoolSize(threadPoolProperties.getMaxPoolSize());
executor.setQueueCapacity(threadPoolProperties.getQueueCapacity());
executor.initialize();
return executor;
}
}
프로파일에 따른 쓰레드 풀 설정 적용
마지막으로, 각 프로파일에 해당하는 프로퍼티 값을 읽어오기 위해 @ConfigurationProperties
어노테이션을 사용하는 ThreadPoolProperties 클래스를 만듭니다.
@ConfigurationProperties("spring.profiles")
public class ThreadPoolProperties {
private int corePoolSize;
private int maxPoolSize;
private int queueCapacity;
// getter & setter
}
프로파일에 따라 다른 쓰레드 풀 설정을 적용할 수 있게 됐습니다.
이렇게 스프링을 이용하여 프로파일마다 다른 쓰레드 풀 설정을 적용하는 방법에 대해 알아보았습니다. 프로퍼티 설정을 활용하여 각각의 환경에 따라 다른 쓰레드 풀을 적용할 수 있는 이 기능은 스프링 애플리케이션의 성능 및 안정성을 향상시키는 데 유용할 것입니다.
더 자세한 내용은 스프링 공식 문서를 참고하시기 바랍니다.