Backend:: @Async 비동기 처리

jahlee·2023년 10월 31일

Backend공부

목록 보기
13/18

동기 비동기

간단하게 동기 비동기를 이해하자면 직렬처리, 병렬처리 정도로 이해하면 된다. 각 사건을 독립적으로 수행하게 된다면 비동기이게 되는 것이다.

spring 에서 사용 방식

Application 클래스에 @EnableAsync 를 붙이거나 AsyncConfig를 직접 정의한 후 비동기 처리를 사용하고자 하는 메서드에 @Async 어노테이션을 붙여 사용한다.

사용 전 주의사항

  1. public 메서드에만 사용 가능
    @Async의 동작은 별도의 설정이 없으면 Proxy 모드가 적용되어 Spring의 AOP를 가져가기에 AOP와 관련된 제약사항을 안고 가게 된다. AOP는 Proxy 패턴을 사용하고 Proxy 패턴은 실제 기능을 수행하는 객체 대신 가상의 객체를 사용하기 때문에 private으로의 접근이 불가능하다.
  1. 자가 호출 불가능
    자가호출 시 Proxy를 거치지 않기 때문에 1번과 같은 이유로 불가능하다.
  1. ThreadLocal 사용 시 내용 복사
    @Async 사용 시 새로운 스레드를 생성하여 작동하기 때문에 기존 스레드의 스택에 저장되는 ThreadLocal의 데이터를 사용하지 못한다. 따라서 복사해서 전달해주어야함
  1. 비동기 스레드에서 발생한 Exception 처리
    비동기 스레드에서 발생한 에러는 메인 메서드까지 반환되지 못하기 때문에 return값이 있는 형태로 정의하거나 별도의 예외 처리가 필요하다.

참조

https://velog.io/@jongil512/Spring-%EB%8F%99%EA%B8%B0%EC%99%80-%EB%B9%84%EB%8F%99%EA%B8%B0-%EC%B2%98%EB%A6%AC
https://bepoz-study-diary.tistory.com/399

0개의 댓글