본문 바로가기

dev/스프링

Spring Async 비동기 처리

스프링에서 메소드 호출을 비동기로 처리해야 하는 경우 Async를 사용하면 됩니다.

 

예를 들면 첨부파일을 ElasticSearch와 DB에 저장해야 하는 경우

 

순차적으로 저장하는 것보다 비동기로 처리하면 성능을 개선할 수 있습니다.

 

AsyncConfig.java

 

비동기 처리를 설정하는 AsyncConfig 클래스입니다.

 

@Configuration 어노테이션을 통해 이 클래스가 스프링 설정을 담당하고 있음을 나타냅니다.(10라인)

 

@EnableAsync 어노테이션을 사용하여 스프링의 비동기 설정을 처리합니다.(11라인)

 

비동기 작업을 지원하는 ThreadPoolTaskExecutor 빈을 생성하는 taskExecutor 메소드입니다.(14 ~ 23라인)

 

이 메소드에서 생성하는 빈 이름은 "taskExecutor"입니다.(14라인)

 

기본적으로 유지할 스레드 수를 "4"로 설정합니다.(17라인)

 

스레드 풀에서 생성할 수 있는 최대 스레드 수를 "8"로 설정합니다.(18라인)

 

스레드 풀에서 작업 대기할 수를 "1000"으로 설정합니다.(19라인)

 

스레드 이름의 접두사를 "ElasticThread-"로 설정합니다.(20라인)

 

ThreadPoolTaskExecutor을 초기화하여 앞에서 작업한 설정을 적용합니다.(21라인)

 

ThreadPoolTaskExecutor 객체를 생성하여 스프링 컨테이너에 빈으로 등록합니다.(22라인)

 

ElasticSearchUtil post 메소드

 

@Async 어노테이션을 통해 ElasticSearch post 메소드를 비동기로 호출할 수 있습니다.(83라인)

 

ElasticSearchServiceImp saveFileElastic 메소드

 

첨부파일을 ElasticSearch와 DB에 저장하는 saveFileElastic 메소드에서

 

ElasticSearch에 저장하는 메소드 elasticSearchUtil.post 메소드는 비동기로 호출합니다.(207라인)

 

로그 화면

 

로그를 보면 ElasticSearch에 저장하는 메소드가 비동기로 호출된 것을 확인할 수 있습니다.

 

스프링에서 Async를 사용하면 불필요하게 시간이 걸렸던 작업을 비동기로 처리하여 단축시킬 수 있습니다.

'dev > 스프링' 카테고리의 다른 글

Spring Async CompletableFuture  (0) 2024.06.12
Spring ElasticSearch Snapshot Backup Restore  (0) 2024.05.21
Spring ElasticSearch 첨부파일 조회  (0) 2024.05.12
Spring ElasticSearch 첨부파일 색인  (0) 2024.05.11
Spring ClassPathResource  (0) 2024.04.21