@Async

youngkyu MIn·2023년 10월 2일

@Async는 Spring Framework에서 제공하는 어노테이션으로, 메서드를 비동기로 실행하도록 지시한다.

이 어노테이션을 메서드에 적용하면, 호출이 일어날 때 메서드가 별도의 스레드에서 실행되게 된다. 즉, 메서드 호출이 즉시 반환되고, 실제 작업은 호출자 스레드와는 독립적으로 백그라운드에서 진행된다.

이를 통해 원래의 작업 흐름은 블로킹(blocking)되지 않고, 계속해서 다음 작업을 진행할 수 있다.


주의 사항 및 고려점:

1 비동기 메서드의 반환 타입:

  • void: 반환값이 없는 경우.
  • Future 또는 CompletableFuture: 비동기 작업의 결과를 나중에 받기 위해 사용한다.

@Async

1 Exception Handling:

  • @Async 메서드에서 발생한 예외는 호출자에게 전파되지 않는다.
  • 별도의 AsyncUncaughtExceptionHandler를 등록하여 예외를 처리할 수 있다.

2 Proxy 기반의 AOP:

  • @Async는 프록시 기반의 AOP를 사용한다.
  • 같은 클래스 내에서 다른 메서드를 호출할 때 @Async는 동작하지 않을 수 있다. 이는 프록시가 내부 호출에는 반응하지 않기 때문이다.

3 설정:

  • @EnableAsync 어노테이션을 설정 클래스에 추가하여 @Async 활성화를 해야 한다.

ThreadPool

1 스레드 풀 설정:

  • @Async를 사용하면 기본적으로 SimpleAsyncTaskExecutor를 사용한다. 하지만, 스레드 풀을 직접 정의하여 사용하는 것이 좋다.
  • ThreadPoolTaskExecutor를 빈으로 등록하여 커스텀 스레드 풀을 사용할 수 있다.
profile
한 줄 소개

0개의 댓글