web
Spring Boot - Async
허원철
2016. 12. 5. 08:38
이번 글은 Spring Boot 를 이용한 비동기(Async)에 대한 글 입니다.
What..!
비동기 통신이란?
- 자료를 일정한 크기로 정하여 순서대로 전송하는 자료의 전송방식
- (사실 무슨 말인지 모르겠습니다... 간단하게 말하자면) Request 가 들어올 때 하나의 Thread로 모든 처리를 하고 Response 하는 것(Sync 방식)이 아니라, Request 가 들어올 때 기본적인 Thread가 생성이 되면서 별도의 Thread 생성하여 처리하는 것(Async 방식)이라고 말할 수 있습니다.
When..?
1. Log 처리
2. Push 처리
.. 등등 Client에 영향이 끼치지 않고 별개의 처리를 할 때 사용할 수 있습니다.
이렇게 함으로써, Client 에게 조금더 빠른 Response를 줄 수 있게 됩니다.
How..?
1. Gradle 설정
2. Config 설정
3. Service & Controller 설정
4. Result
1. Gradle 설정
- spring-context 3.1 이후에 기능으로, 부트를 사용하는 경우 제약 없이 사용 가능 합니다.
2. Config 설정
- @EableAsync 를 Config 파일에 선언 해줍니다.
기본적으로는, SimpleAsyncTaskExecutor 이 사용됩니다.
3. Service & Controller 설정
[ Service ]
- async를 사용하기 위해서는 두가지 제약이 있습니다.
1) Service 안에서만 가능합니다.
2) 같은 Service 내의 호출은 async 되지 않습니다.
명확한 비교를 하기 위해, 두 개의 메소드를 준비하고, 약 1초정도 멈춘 뒤, 로그를 찍는 형태를 메소드를 준비합니다.
[ Controller ]
Controller에서 Service를 Autowired 하여 /async 와 /sync 를 test 합니다.
4. Result
결과를 보면,
/sync 는 onSync 가 출력되고 난 후 반환되는 것을 볼 수 있고,
/async 는 onAsync 가 출력되지 전에 반환 후 출력되는 것을 볼 수 있습니다.