본문 바로가기
블로그 이미지

방문해 주셔서 감사합니다! 항상 행복하세요!

  
   - 문의사항은 메일 또는 댓글로 언제든 연락주세요.
   - "해줘","답 내놔" 같은 질문은 답변드리지 않습니다.
   - 메일주소 : lts06069@naver.com


Spring framework

Spring 비동기 응답(Spring async, Spring EnableAsync)

야근없는 행복한 삶을 위해 ~
by 마샤와 곰 2019. 4. 25.

 

ajax나 form테그에서의 submit등을 통하여 어떠한 요청을 한 뒤에 바로 응답을 요구하는 경우가 있었습니다.(결과에 상관없이)

 

이럴 때 간단하게 해결하는 방법은, 요청 받는 메소드 내부에 thread를 만들어서 비지니스 로직은 따로 수행하게 하고 응답은 바로 되돌려주면 가능 합니다.

@Controller
public class ZController {

    @RequestMapping(value = "/요청", method = RequestMethod.POST)
    @ResponseBody
    public String test(@RequestParam HashMap<Object, Object> param) {
    
        new Thread(()-> {
            //서비스 클래스에서 비지니스로직을 수행
        }).start();
        
        return "SUCC";
    }
}

 

스프링에서는 Async라는 에노테이션을 통해서 위 방법과 동일한 효과를 나타 낼 수 있습니다.

public한 메소드에 대해서만 동작 하므로 접근 제어자에 대해서 유의하여야 합니다.

또한 같은 클래스 내부의 메서드를 호출하는 것은 되지가 않습니다.

@EnableAsync  //async를 사용하겠다고 선언
@Controller
public class ZController {

    @Async  //async를 할 메소드
    @RequestMapping(value = "/요청", method = RequestMethod.POST)
    @ResponseBody
    public String test(@RequestParam HashMap<Object, Object> param) {
		//서비스를 통한 비지니스 로직
        return "SUCC";
    }
}

 

Async가 적용된 메소드는 스프링이 끼어들어 별도의 작업영역에 할당한 뒤에 쓰레드를 통해서 실행을 합니다.

그러므로 접근 제어자는 반드시 public이어야 합니다.

 

반응형
* 위 에니메이션은 Html의 캔버스(canvas)기반으로 동작하는 기능 입니다. Html 캔버스 튜토리얼 도 한번 살펴보세요~ :)
* 직접 만든 Html 캔버스 애니메이션 도 한번 살펴보세요~ :)

댓글