728x90
Spring Async
비동기 처리를 나타내는 @Async
에는 proxy target 옵션이 존재한다.
처리 모드가 프록시일 때만 설정할 수 있는 옵션인데, true
라면 CGLIB로, false
라면 동적 프록시로 생성한다.
두 방법 모두 프록시를 사용하므로 당연히 상속을 사용하는데, CGLIB는 subclass 기반이고 동적 프록시는 interface 기반이다.
여기서 CGLIB는 바이트 코드 기반으로 생성하기 때문에 성능적으로 약간 낫다.
@Async
가 아닌 커스텀 어노테이션을 등록해서도 사용할 수 있다.
@EnableAsync
속성에 annotation 필드가 바로 이 옵션이다.
비동기를 사용하기 앞서 thread pool의 사이즈, queue 사이즈를 정해서 하나의 Executor를 빈으로 등록한다.
pool은 재고를 미리 쌓아두는 것과 같으므로 비용을 고려해야 한다. (Context switching)
API에 따라 요구하는 pool의 크기가 다를 수 있는데, 이때 빈을 여러 개 등록하면 된다.
@Configuration
public class AsyncConfiguration {
@Bean(name = "fcm")
public Executor fcmExecutor() {
// ...
}
@Bean(name = "mail")
public Executor mailExecutor() {
// ...
}
}
그러면 다음과 같이 사용할 수 있다.
@Service
public class AsyncService {
@Async("fcm")
public void sendFcm(...) {
// ...
}
@Async("mail")
public void sendMail(...) {
// ...
}
}
Reference:
😋 지극히 개인적인 블로그지만 댓글, 조언 그리고 좋아요는 제 성장에 도움이 됩니다 😋
'개인 공부 > TIL' 카테고리의 다른 글
TIL : gradle-build-action (짧) (0) | 2023.10.27 |
---|---|
TIL : import문이 빨갛게 되고 import가 안되는 문제 고치기 (IntelliJ) (23) (0) | 2023.06.21 |
TIL : Bean 컨테이너와 ComponentScan (22) (0) | 2023.05.17 |
TIL : 위상정렬 알고리즘 (21) (0) | 2023.03.03 |
TIL : @PathVariable vs @RequestParam (20) (0) | 2023.01.10 |
댓글