Spring, @Controller @RestController 차이

@Controller @RestController 차이

  • 주요한 차이점 : HTTP Response Body가 생성되는 방식

@Controller

  • 전통적인 Spring MVC의 컨트롤러
  • View 기술사용
  • @ResponseBody를 사용하면 View를 리턴하지 않고 Controller에서 직접 데이터 리턴 가능

Spring4.0부터 @RestController를 통해 더 단순화 되었다.

@RestController

  • Restful 웹서비스의 컨트롤러
  • 반환 되는 객체 데이터 타입 : JSON/XML 타입의 HTTP 응답을 직접 리턴

실행 흐름

@Controller의 실행 흐름

Client -> Request -> Dispatcher Servlet -> Handler Mapping -> Controller -> View -> Dispatcher Servlet -> Response -> Client

@ResponseBody의 실행 흐름

Client -> Request -> Dispatcher Servlet -> Handler Mapping -> Controller (ResponseBody) -> Response -> Client

@RestController의 실행 흐름

Client -> HTTP Request -> Dispatcher Servlet -> Handler Mapping -> RestController (자동 ResponseBody 추가) -> HTTP Response -> Client

1. @Controller(Spring MVC Controller)

[Controller - View]

Spring MVC Restful 전통적인 Work Flow controller view

  • 전통적인 Spring MVC Controller인 @Controller는 주로 View를 반환하기 위해 사용한다.
  1. Client는 URI형식으로 웹 서비스에 요청 전송
  2. Mapping되는 Handler와 그 Type을 찾는 DispatcherServlet이 요청을 인터셉트
  3. Controller가 요청을 처리한 후 응답을 DispatcherServlet으로 반환하고 DispatcherServlet은 View를 사용자에게 반환.

[Contoller - Data]

Spring 3.x MVC Restful Web Service Work Flow controller data

  • @ResponseBody로 Spring MVC의 컨트롤러에서는 데이터를 반환하기 위해 사용
    1. Client는 URI형식으로 웹 서비스에 요청 전송
    2. Mapping되는 Handler와 그 Type을 찾는 DispatcherServlet이 요청을 인터셉트
    3. @ResponseBody를 사용하여 Client에게 Json형태로 데이터를 반환.

2. @RestController(Spring Restful Controller)

Spring 4.x MVC Restful Web Service Work Flow restcontroller

  • RestController = Spring MVC Controller + @ResponseBody
  • 주용도 : Json/XML형태로 객체 데이터 반환
    1. Client는 URI형식으로 웹 서비스에 요청 전송
    2. Mapping되는 Handler와 그 Type을 찾는 DispatcherServlet이 요청을 인터셉트
    3. RestController는 해당 요청을 처리하고 데이터를 반환.

참고