[스프링] 프로파일마다 다른 쓰레드 풀 설정

스프링 애플리케이션을 운영하다 보면 여러 가지 환경에서 사용해야 할 상황이 발생할 수 있습니다. 각각의 환경에 따라 쓰레드 풀의 설정이나 운영 방식을 다르게 할 필요가 있습니다. 이를 프로파일마다 다르게 적용할 수 있다면 애플리케이션의 성능을 향상시킬 수 있을 것입니다. 이번 포스트에서는 스프링을 사용하여 프로파일마다 다른 쓰레드 풀 설정을 적용하는 방법에 대해 알아보겠습니다.

프로퍼티 설정을 이용한 다른 쓰레드 풀 생성

먼저, 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
}

프로파일에 따라 다른 쓰레드 풀 설정을 적용할 수 있게 됐습니다.

이렇게 스프링을 이용하여 프로파일마다 다른 쓰레드 풀 설정을 적용하는 방법에 대해 알아보았습니다. 프로퍼티 설정을 활용하여 각각의 환경에 따라 다른 쓰레드 풀을 적용할 수 있는 이 기능은 스프링 애플리케이션의 성능 및 안정성을 향상시키는 데 유용할 것입니다.

더 자세한 내용은 스프링 공식 문서를 참고하시기 바랍니다.