Spring 비동기 프로그래밍의 동작 원리

이해찬·2023년 10월 2일
0

TIL

목록 보기
18/20

2023.10.03

🤷‍♂️ 비동기란?

  • 비동기 프로그래밍 = 여러 작업을 동시에 처리 (멀티 스레드 사용)
  • 멀티스레딩이란 하나의 작업을 동기화 하는 것이 아니라, 비동기화 하는 것
    -> 전화받으면서 설거지하기(비동기), 전화 받고 통화 종료 후 설거지하기(동기화)
  • 웹 애플리케이션에서 여러 사용자가 동시에 요청을 보낼 때, 각 요청을 별도의 스레드에서 처리하여 사용자가 웹페이지를 더 빠르게 볼 수 있도록 만드는 것이 비동기 프로그래밍입니다.

  • 예를 들어, 사용자가 웹사이트에서 글을 작성하면서 동시에 이미지를 업로드한다고 생각해봅시다. 이미지 업로드는 시간이 오래 걸리는 작업일 수 있는데, 이를 메인 스레드에서 처리한다면 사용자는 이미지 업로드가 완료될 때까지 글 작성을 할 수 없습니다. 하지만 이 두 작업을 별도의 스레드에서 처리한다면 사용자는 이미지 업로딩과 상관없이 글 작성을 계속할 수 있습니다.



💻 Spring Framework -> 스레드 풀 설정

1. 비동기 config 작성

  • ThreadPoolTaskExecutor 클래스를 사용해서 풀을 생성
  • 스레드풀 = 여러 개의 스레드를 미리 만들고, 필요할 때마다 사용 -> 다시 풀에 반환
  • 스레드풀 클래스의 메서드를 호출해서 스레드 수를 지정


  • @EnableAsync를 사용해서 비동기화 설정


서비스에서 비동기화 테스트

  • 서비스 로직의 1~3번 중에 1번만 동작
  • @Async 어노테이션을 사용해서 지정된 스레드에 할당을 하기 위해서는 빈으로 주입해야됨
    ->즉, Spring 컨테이너가 관리를 해주는 빈으로 생성된 객체만 비동기로 처리 가능!!


🙆‍♂️ 1번. 멀티스레딩 동작

  • 컨테이너에 의해서 주입되었기 때문에 동작한다.


🤷‍♂️ 2번,3번은 동작하지 않음

  • 2번 : 빈을 주입한 것이 아니라 new키워드로 생성을 했기 때문
  • 3번 : 같은 클래스 내부 호출 -> proxy기반의 AOP 동작 원리 때문에 실제 Async 설정을 인식 하지 못하고 동일한 스레드에서 실행


profile
디자인에서 개발자로

0개의 댓글