Language/Java

@Controller VS @RestController

개발하는 구름이 2023. 7. 17. 03:26
Spring에서 컨트롤러를 지정해주기 위한 어노테이션은 @Controller와 @RestController가 있다.
  • Controller : 전통적인 Spring MVC의 컨트롤러
  • RestContoller : Restful 웹서비스의 컨트롤러

# Controller

  • 전통적인 Spring MVC의 컨트롤러
  • 주로 view를 반환하기 위해 사용
  • Client -> Dispatcher Servlet -> Handler Mapper -> Controller -> View Resolver -> View -> Client
    1. Client : URI 형식으로 웹 서비스 요청 
    2. DispatcherServlet이 요청을 intercept -> Handler Mapping을 통해 요청에 맞는 Controller 호출
    3. 요청을 처리한 Controller가 응답을 DispatcherServlet에 반환 -> DispatcherServlet은 응답에 해당하는 View를 Client에게 반환 
      ( @Controller에서 View를 반환하기 위해서는 ViewResolver가 사용되며, ViewResolver에서 설정에 맞는 View를 찾아 렌더링 ) 

  • @Controller가 Data를 반환하는 경우 @ResponseBody 어노테이션을 활용 -> Json 형태로 데이터를 반환 
  • 이러한 형태로 사용하게 된다면, 모든 메서드에 @ResponseBody Annotation을 넣어줘야 하는 번거로움 존재 
이러한 형태로 사용하게 된다면, 모든 메서드에 @ResponseBody Annotation을 넣어줘야 하는 번거로움 존재 

 

 

 

# RestController

  • @RestController = @Controller + @ResponseBody 
  • 주용도는 Json 형태로 객체 데이터를 반환하는 것 위의 @Controller가 Data를 반환하는 경우와 같은 케이스를 커버한다고 생각하면 된다.
  • 정리하면, Controller에서 view를 반환하는 케이스 이외에 json data를 반환해야 되는 케이스에 @Controller + @ResponseBody를 함께 쓰는 번거로움을 해결하기 위해서 @RestController 탄생

**Json : 자바스크립트 객체