본문 바로가기

IT/Java Spring

[Spring] @RestController vs @Controller

1. @Controller

 

전통적인 Spring MVC Controller는 View 기술을 이용하여 화면을 리턴하는 방식이다.

json, xml형태의 객체를 반환하기 위해서는 @ResponseBody를 사용하여 json, xml형태의 객체를 리턴 할 수 있다.

@Controller의 workflow는 다음과 같다.

 

 

위 workflow의 순서를 간략히 설명하면 다음과 같다.

  1. Client는 URL로 서비스에 Request를 보낸다.
  2. 해당 요청을 처리할 수 있는 Handler를 찾아 Mapping 하기 위해 Dispatcher Servlet가 인터셉트 한다.
  3. Mapping 된 Handler가 존재하는 Controller에서 해당 요청을 처리하고, Model and View 객체를 반환한다.
  4. Dispatcher Servlet는 반환된 객체를 client에게 전달한다.

 

 

2. @RestController

 

View를 통해서 객체를 반환하지 않으며, 이 annotation을 통해 Controller에서 직접적으로 client에게 객체를 반환할 수 있게 되었다.

또한, 위 공식 문서의 첫 문장을 보면 다음과 같은 description이 있다.

"@RestController는 @Controller와 @ResponseBody가 annotated된 편리한 anntation이다." => @RestController = @Controller + @ResponseBody

즉, @ResponseBody의 성질에 의해서 HTTP응답에 대해 return 값을 자동으로 변환까지 해준다.

Workflow는 다음과 같다. 위 @Controller과 비교해보자.

 

 

 

 

 

 

3. 참고 문헌