java Async

CHR·2024년 5월 3일
0

Java 비동기 처리 방법
1. @Async annotation 으로 간단하게 처리 가능. 클래스에 @EnableAsnyc를 추가하고, 비동기로 제공하고자 하는 메소드에 @Async 어노테이션을 추가하는 방식으로 가능함. @Async의 기본 설정은 SimpleAsyncTaskExecutor 이기 때문에 thread 관리를 위해서는 별도로 구성해주어야 함
2. Async thread pool 설정을 위한 별도의 @Configuration 클래스를 만들고, 해당 클래스에 @EnableAsync 어노테이션 추가. (기존 클래스에서는 제거). Config 클래스 내부에 ThreadPoolTaskExecutor를 반환하는 @Bean 메소드를 만들고, thread pool 설정을 해준다. Async 메소드를 제공하는 클래스에서는 해당 Bean의 이름을 통해 가져다 쓸 수 있다. (ex) @Async("beanName")

 
Java 비동기 처리 장점

@Async 사용을 통해 method 수정없이 처리 가능

Java @Async 사용시 고려사항 및 주의사항

AOP의 특성 및 제약을 주의해서 사용해야 함 (비동기 메소드와 같은 클래스 내의 다른 메소드에서 비동기 메소드를 호출한다면, AOP proxy를 우회하기 때문에 비동기로 동작하지 않음)

Spring AOP의 두가지 모드1. Proxy 모드 : Spring AOP의 기본 모드이며, 순수한 자바 코드로 AOP 구현한다. Aspect를 특정 method와 엮는 작업(Weaving)이 자바 코드가 실행되는 시점이 이뤄진다. RTW(Run Time Weaving)으로 처리된다고 표현하고, 특정 method가 호출되는 런타임 시기에 해당 method의 Aspect 처리 여부가 결정된다.2. AspectJ 모드 : LTW(Load Time Weaving) - 클래스를 로드하는 과정에서 weaving, CTW(Compile Time Weaving) - compile 시에 weaving (ex) @EnableAsync(mode=AdviceMode.ASPECTJ) 와 같은 어노테이션으로 AspectJ 모드를 지정해주어 사용 가능

http://dveamer.github.io/java/SpringAsyncAspectJ.html https://velog.io/@gwontaeyong/Spring-AOP%EC%97%90%EC%84%9C-Proxy%EB%9E%80 (Spring AOP 원리)

public method에만 사용 가능 (메소드가 public 이어야 프록시가 될 수 있음)
Thread가 분리되므로 HttpServletRequest, Session 접근 불가 

 
ThreadPool 설정 이유, 단점

사용 이유 : 쓰레드 풀을 미리 생성해 둠으로써 프로그램 동작시 쓰레드를 생성하는데 별도의 딜레이가 필요하지 않고, 쓰레드를 재사용하여 시스템 자원을 줄일 수 있다. 다수의 사용자 요청을 빠르게 처리할 수 있다.
단점 : 쓰레드 갯수를 지나치게 많이 설정하는 경우 메모리 낭비가 발생할 수 있다.
출처: https://haloworld.tistory.com/147 [Halo World:티스토리]

profile
🍷

0개의 댓글

관련 채용 정보