🔹 @Async 실행 원리

Spring의 @Async스레드 풀(Thread Pool)과 프록시(Proxy) 기반으로 동작합니다.

즉, 스프링 AOP(Aspect-Oriented Programming) 방식으로 비동기 처리를 수행합니다.

✔️ 실행 과정

  1. Spring이 프록시 객체(Proxy)를 생성하여 @Async 메서드를 감싸고 관리
  2. 프록시 객체가 별도의 스레드 풀(Executor)에서 해당 메서드를 실행
  3. 비동기적으로 실행되므로 호출한 메서드의 실행을 기다리지 않음

유의사항

@Async 는 스프링 AOP를 사용하기 때문에 기본적으로 AOP 사용시 주의할 점을 똑같이 주의 해줘야 합니다.

  1. method 접근지정자 private 사용 불가

  2. self-invocation(자가 호출) 불가, 즉 inner method는 사용 불가

  3. thread pool 설정을 하지 않는다면 common pool 을 사용하게 되는데 사용하지 않도록 별도에 thread pool에 thread를 사용하도록 설정해야한다.(why? Common Pool은 다른 라이브러리에서도 사용할 가능성이 있음 즉! 충돌 가능성이 있다)

쓰레드 풀 관리