Spring Framework - Controller와 RestController의 차이
Controller란?
MVC패턴에서 C를 맡고 있는 Controller는 간단하게 말하면 model과 view를 매칭해주는 역할을 한다.
웹서버로부터 서블릿을 거쳐 Controller로 특정 요청이 올 경우, 요청에 맞는 view페이지를 호출해주는 것이 일반적이다.
다만 view를 리턴하는 것은 @Controller 어노테이션을 사용하여 관리하고, 데이터를 리턴하는 것은 @RestController를 사용하여 관리한다.
1. Controller의 특징
Model과 View를 연결
Controller는 비즈니스 로직을 수행하여 얻은 결과 데이터를 Model에 담아 View와 연결한다. 이를 통해 클라이언트에게 필요한 데이터를 전달하게 된다.
다양한 어노테이션 지원
Spring MVC 프레임워크에서는 다양한 어노테이션을 통해 Controller의 기능을 확장할 수 있다. @RequestMapping 어노테이션은 클라이언트의 요청 URI와 Controller의 메서드를 매핑시켜주며, @PathVariable 어노테이션은 URI 경로 중 일부를 변수로 사용할 수 있도록 한다. 이 외에도 @RequestBody, @AuthenticationPrincipal 등을 사용하여 보다 쉽게 클라이언트의 요청을 처리할 수 있다.
뷰(View)를 결정
Controller는 비즈니스 로직을 수행한 결과를 이용하여 어떤 뷰(View)를 사용할지 결정합니다.
이를 위해 ViewResolver를 이용하는데, ViewResolver는 View 이름을 이용하여 View 객체를 찾아내고 반환한다. View 이름은 일반적으로 Controller에서 반환한 문자열로, ViewResolver는 이 문자열을 이용하여 실제로 사용될 View 객체를 찾아낸다. 이후 DispatcherServlet은 이 View 객체를 이용하여 사용자에게 응답을 생성하게된다.
DispatcherServlet에 의해 관리
Spring MVC에서 Controller는 DispatcherServlet이 관리한다. 이를 통해 요청과 응답에 대한 처리를 일관적으로 처리할 수 있게 된다.
2. @Controller와 @RestController의 차이
@Controller
@Controller를 사용할 경우, Controller는 클라이언트의 요청을 처리하고, 비즈니스 로직을 처리하는 Service 클래스를 호출 한뒤 Service 클래스에서 처리된 결과 데이터를 Controller에서 View에 전달하기 위해 Model 객체에 담겨진다. Controller는 일반적으로 HTML View를 반환하므로, ViewResolver가 이 Model 객체를 이용하여 HTML View를 생성하게된다.
@RestController
@RestController를 사용할 경우, Controller는 클라이언트의 요청을 처리하고, 비즈니스 로직을 처리하는 Service 클래스를 호출하는 것은 동일하며 Service 클래스에서 처리된 결과 데이터는 Controller에서 직접 반환된다.
따라서, @RestController를 사용하면 일반적으로 JSON, XML 등의 데이터가 반환된다는 차이점이 있다.
즉, @Controller와 @RestController의 차이는 반환되는 데이터의 형태와 의미에 있으며,
반환되는 데이터의 형태에 따라서 각각의 어노테이션이 사용된다.