programming study/B-Spring

@Async

gu9gu 2023. 4. 12. 05:05

How does @Async work? @Async를 지금까지 잘 못 쓰고 있었습니다(@Async 사용할 때 주의해야 할 것, 사용법) (tistory.com)

[Spring] @Async 비동기 멀티스레드 사용법 (tistory.com)

Spring 에서 async 처리 (@Async) (tistory.com)

스프링에서 @Async로 비동기처리하기 :: 스프링부트는 사랑입니다 (tistory.com)

 

 

비동기란?

비동기란 다른 쓰레드에서 병렬로 동작시키면서 응답을 기다리지 않고 처리할 수 있는 기술이며, 요청이 몰리거나 오래걸리는 작업을 처리할 때 사용하여 어플리케이션의 성능 향상을 위해 사용된다

 

@Acync 어노테이션 사용 시 주의 사항

@Async어노테이션의 사용법에 관한 주의사항이 있습니다.

@Async 어노테이션은 접근제어자로 public이 설정된 메소드에만 사용 가능합니다.

그리고 @Async 어노테이션은 설정한 메소드는 다른 클래스에서 호출해야지만 동작합니다.

그리고 @Async 어노테이션을 사용하게 되면 새로운 스레드를 생성해서 동작하는 것이기 때문에 

반환 타입이 void인 경우 AsyncUncaughtExceptionHandler 인터페이스를 구현해서 별도로 예외처리를 해줘야 합니다.

반환 타입이 future인 경우는 future.get()에서 예외발생..?

 

 

@Acync 어노테이션을 사용하기 위해 필요한 설정

1.  @SpringBootApplication 어노테이션이 설정된 클래스에 @EnableAsync 을 설정해주면 @Async 어노테이션을 사용할 수 있습니다. 하지만 해당방법은 defualt값으로 적용돼서 SimpleAsyncTaskExecutor를 사용하게 되고 스레드 풀에 의한게 아닌 스레드를 만들어내는 역할만 해서 스레드를 제대로 관리해주지 못합니다.

 

2. @Confuguriation 어노테이션과 @Bean 어노테이션을 이용하여 별도로 Executor 빈을 만들고 그 해당 클래스에 @EnableAsync를 설정하면 @Async 어노테이션을 사용할 수 있습니다.

Executor빈에는 쓰레드 풀에 대한 설정을 해줄 수 있어서 한번에 동작시킬 수 있는 쓰레드 수를 설정하여 쓰레드 관리를 잘 할 수 있습니다.

[Spring] @Async 비동기 멀티스레드 사용법 (tistory.com)