허원철의 개발 블로그

Spring Boot - Async 본문

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 이 사용됩니다.
thread 갯수, 최대 thread 갯수, 큐 크기을 설정했습니다. 이외에도 많은 설정 들을 할 수 있습니다. (참고 : 스프링 레퍼런스 문서)

3. Service & Controller 설정
[ Service ]
- async를 사용하기 위해서는 두가지 제약이 있습니다.
1) Service 안에서만 가능합니다.
2) 같은 Service 내의 호출은 async 되지 않습니다.



명확한 비교를 하기 위해, 두 개의 메소드를 준비하고, 약 1초정도 멈춘 뒤, 로그를 찍는 형태를 메소드를 준비합니다.


[ Controller ]
Controller에서 Service를 Autowired 하여 /async 와 /sync 를 test 합니다.



4. Result



결과를 보면,
/sync 는 onSync 가 출력되고 난 후 반환되는 것을 볼 수 있고,
/async 는 onAsync 가 출력되지 전에 반환 후 출력되는 것을 볼 수 있습니다.


'web' 카테고리의 다른 글

페이징에 대한 이해 - 2  (396) 2016.12.08
페이징에 대한 이해 - 1  (429) 2016.12.06
Spring Boot - Swagger  (411) 2016.12.05
Spring Boot - Custom Jackson Converter  (415) 2016.12.05
Spring Boot - Cache  (412) 2016.12.05
Comments