@ResponseBody, @Controller, @RestController

Kim Dong Kyun·2023년 3월 8일
1

개요

Controller와 RestController는 @ResponseBody 어노테이션의 유무로 구분됩니다.

본문

@ResponseBody 어노테이션은 스프링에서 HTTP 요청에 대한 응답 결과를 HTTP 응답 본문에 직접 쓰는 것을 가능하게 합니다. 즉, 컨트롤러 메소드가 반환하는 객체를 HTTP 응답 본문으로 변환해주는 역할을 합니다.

@Controller 어노테이션은 스프링에서 컨트롤러 역할을 하는 클래스를 정의할 때 사용됩니다. @Controller 어노테이션이 붙은 클래스는 HTTP 요청에 대한 처리를 담당하는 메소드들을 포함하고 있습니다. @Controller 어노테이션을 사용할 때는, 컨트롤러 메소드들이 View 렌더링을 위한 모델을 반환하기 위해 @ResponseBody 어노테이션을 사용할 수 있습니다.

반면에 @RestController 어노테이션은 스프링 4.0부터 추가된 어노테이션으로, @Controller 어노테이션과 @ResponseBody 어노테이션을 함께 사용하는 것과 동일한 역할을 합니다. 즉, @RestController 어노테이션을 사용하면 컨트롤러 메소드의 반환값이 HTTP 응답 본문에 직접 쓰이게 됩니다. 따라서, @RestController 어노테이션을 사용하는 경우 별도의 @ResponseBody 어노테이션을 사용할 필요가 없습니다.

따라서, @Controller와 @RestController의 가장 큰 차이점은 반환값에 대한 처리 방식입니다. @Controller는 View 렌더링을 위해 모델 객체를 반환하고, @RestController는 HTTP 응답 본문에 직접 쓰이는 데이터 객체를 반환합니다. 또한, @RestController는 기본적으로 모든 메소드에 @ResponseBody 어노테이션을 적용한 것과 같은 효과를 가지고 있습니다.


정리

  1. Controller vs RestController -> @RequestBody 유무
  2. @RequestBody 는 자바 객체 데이터를 반환 할 수 있게 한다.(Json 형식이 일반적)
  3. @Controller 는 모델 객체, 즉 뷰를 반환한다고 보면 된다.

0개의 댓글