카테고리 없음

스프링 프레임워크 스레드 풀

jw-backend 2024. 7. 24. 01:10
반응형

스프링 프레임워크에서도 스레드 풀을 사용할 수 있습니다. 스프링에서는 비동기 처리를 위해 @Async 어노테이션과 TaskExecutor 인터페이스를 제공하여 스레드 풀을 쉽게 활용할 수 있도록 지원합니다. 다음은 스프링에서 스레드 풀을 사용하는 방법에 대한 설명입니다.

1. @Async 어노테이션

  • 비동기 메서드: @Async 어노테이션을 사용하여 비동기적으로 실행할 메서드를 정의할 수 있습니다. 이 메서드는 별도의 스레드에서 실행되며, 호출한 스레드는 즉시 다음 작업으로 진행할 수 있습니다.

java

import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;

@Service
public class MyService {

    @Async
    public void asyncMethod() {
        System.out.println("비동기 작업 시작");
        try {
            Thread.sleep(2000); // 2초 대기
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("비동기 작업 완료");
    }
}

2. TaskExecutor

  • TaskExecutor 인터페이스: 스프링에서는 TaskExecutor 인터페이스를 사용하여 스레드 풀을 구성하고 작업을 제출할 수 있습니다. ThreadPoolTaskExecutor 클래스를 사용하여 스레드 풀을 설정할 수 있습니다.

java

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;

@Configuration
@EnableAsync
public class AsyncConfig {

    @Bean
    public ThreadPoolTaskExecutor taskExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(5); // 기본 스레드 수
        executor.setMaxPoolSize(10); // 최대 스레드 수
        executor.setQueueCapacity(25); // 대기 큐 용량
        executor.initialize();
        return executor;
    }
}

3. 사용 예시

  • 비동기 메서드를 호출하면 스프링이 자동으로 스레드 풀에서 스레드를 할당하여 작업을 실행합니다.

java

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class MyController {

    @Autowired
    private MyService myService;

    public void executeTasks() {
        myService.asyncMethod(); // 비동기 호출
        System.out.println("메인 스레드에서 다른 작업 수행");
    }
}

요약

  • 스프링 프레임워크에서는 @Async 어노테이션과 TaskExecutor를 통해 스레드 풀을 쉽게 사용할 수 있습니다.
  • 이를 통해 비동기 작업을 효율적으로 처리하고, 애플리케이션의 성능을 향상시킬 수 있습니다.