@Controller와 @RestController의 차이점

kys95·2022년 9월 29일
0

오늘은 @Controller와 @RestController의 차이점에 대해 알아보겠습니다.

개요

Spring MVC의 @RestController은 @Controller와 @ResponseBody의 조합이다.

Spring 프레임 워크에서 RESTful 웹 서비스를 보다 쉽게 개발할 수 있도록 Spring 4.0에서 추가되었다.

근본적인 차이점은 @Controller의 역할은 Model 객체를 만들어 데이터를 담고 View를 찾는 것이지만, @RestController는 단순히 객체만을 반환하고 객체 데이터는 JSON 또는 XML 형식으로 HTTP 응답에 담아서 전송한다. 물론 @Controller와 @ResponseBody를 사용하여 만들 수 있지만 이러한 방식은 RESTful 웹서비스의 기본 동작이기 때문에 Spring은 @Controller와 @ResponseBody의 동작을 조합한 @RestController을 도입했다.

다음 두 코드는 Spring MVC에서 동일한 동작을 한다.

@Controller
@ResponseBody
public class MVCController{
	logic...
}

@RestController
public class ReftFulController{
	logic...
}

대부분의 개발자들은 두개의 어노테이션이 아닌 하나의 어노테이션만 선언하고 싶어할 것이다. 또한, @RestController는 이전 두개보다 의미에 대해서 명확히 나타내고 있다.

Spring에서 @Controller와 @RestController은 무엇인가?

@Controller은 뷰에 표시될 데이터가 있는 Model 객체를 만들고 올바른 뷰를 선택하는 일을 담당한다. 또한, @ResponseBody를 사용하여 HTTP Response Body에 데이터를 담아 요청을 완료할 수 있다.

HTTP Response Body에 데이터를 담는 것은 RESTful 웹 서비스에 대한 응답에 매우 유용하다. 왜냐하면 뷰를 반환하는 대신 데이터를 반환하기 때문이다.

Spring4 이전에 RESTful 웹 서비스를 개발했다면 @Controller와 @ResponseBody의 조합 사용에 익숙했을 것이다. 하지만 @RestController을 사용하여 동일한 기능을 제공할 수 있다. @Controller와 @ResponsBody의 동작을 하나로 결합한 편의 컨트롤러라 보면 된다.

  1. Spring에서 @RestController와 @Controller의 차이점
  1. @Controller는 클래스를 Spring MVC 컨트롤러로 표시하는데 사용되고, @RestController는 RESTful 웹 서비스에서 사용되는 특수 컨트롤러이며 @Controller + @ResponseBody와 동일하다.
  1. @RestController는 Spring4.0에서 추가되었지만, @Controller는 Spring이 주석을 지원하기 시작한 이후에 존재하며 공식적으로 Spring 2.5버전에서 추가되었다.
  1. @Controller는 @Component 주석이 달려있고, @RestController는 아래와 같이 @Controller와 @ResponseBody 주석이 달린 편의 컨트롤러이다.
@Target(value=TYEP)
@Retention(value=RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController

@Target(value=TYEP)
@Retention(value=RUNTIME)
@Documented
@Component
public @interface Controller
  1. @Controller와 @RestController의 주요 차이점 중 하나는 @RestController을 표시하면 모든 메소드가 뷰 대신 객체로 작성된다.
  • 일반적인 Spring MVC 처리과정

결론은 RESTful 웹 서비스를 만드는 경우 @Controller + @ResponseBody를 사용하는 것 보다 @RestController을 사용하는 것이 좋다!!

profile
어제의 나보다 나은 사람이 되자

0개의 댓글