[Spring] @Controller와 @RestController의 차이점 알아보기
by coco3o@Controller 와 @RestController
Spring에서 컨트롤러를 지정해주기 위한 어노테이션은 @Controller와 @RestController가 있습니다.
전통적인 Spring MVC 컨트롤러인 @Controller와 RESTful 웹 서비스의 컨트롤러인 @RestController의 주요한 차이점은
HTTP Response Body가 생성되는 방식입니다.
@Controller의 역할은 Model 객체를 만들어 데이터를 담고 View를 반환하는 것이고,
@RestController는 단순히 객체만을 반환하고 객체 데이터는 JSON 또는 XML 형식으로 HTTP 응답에 담아 전송합니다.
물론 @Controller도 @ResponseBody를 사용해서 만들 수 있지만 이런 방식은 RESTful 웹 서비스의 기본 동작이기 때문에
Spring은 @Controller와 @ResponseBody의 동작을 조합한 @RestController를 도입했습니다.
아래의 코드는 Spring MVC에서 동일한 동작을 합니다.
@Controller
@ResponseBody
public class MVCController {
business logic...
}
@RestController
public class RestFulController {
business logic...
}
@RestController는 @Controller와 @ResponseBody의 동작을 하나로 결합한 컨트롤러라 보시면 됩니다.
Spring에서 @Controller와 @RestController의 차이점
1. @Controller는 클래스를 Spring MVC 컨트롤러로 표시하는데 사용되고,
@RestController는 RESTful 웹 서비스에서 사용되는 특수 컨트롤러이며 @Controller + @Response와 동일하다.
2. @Controller와 @RestController의 주요 차이점 중 하나는 @RestController를 표시하면 모든 메소드가 뷰 대신 객체로 작성된다.
3. @Controller는 @Component 주석이 달려있고, @RestController는 아래와 같이 @Controller와 @ResponseBody 주석이 달린 편의 컨트롤러이다.
@Target(value=TYEP)
@Retention(value=RUNTIME)
@Documented
@Component
public @interface Controller
@Target(value=TYEP)
@Retention(value=RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController
일반적인 Spring MVC Work-flow
[ Controller - View ]
@Controller는 주로 View를 반환하기 위해 사용합니다. 아래와 같은 과정을 통해 Spring MVC Container는 Client의 요청으로부터 View를 반환합니다.
@Controller가 View를 반환하기 위해서는 View Resolver가 사용되며, ViewResolver 설정에 맞게 View를 찾아 렌더링 합니다.
[ Controller - Data ]
Spring MVC의 컨트롤러에서도 Data를 반환해야 하는 경우도 있습니다. 데이터를 반환하기 위해 @ResponseBody 어노테이션을
사용해주면, 이를 통해 Controller도 JSON 형태로 데이터를 반환할 수 있습니다.
1. Client는 URI 형식으로 웹 서비스에 요청을 보낸다.
2. Mapping되는 Handler와 그 Type을 찾는 DispatcherServlet이 요청을 인터셉트한다.
3. @ResponseBody를 사용하여 Client에게 JSON 형태로 데이터를 반환한다.
[ RestController ]
@RestController는 Spring MVC Controller에 @ResponseBody가 추가된 것입니다. 이로써 당연한 것은
RestController의 주용도는 JSON 형태로 객체 데이터를 반환하는 것입니다.
1. Client는 URI 형식으로 웹 서비스에 요청을 보낸다.
2. Mapping되는 Handler와 그 Type을 찾는 DispatcherServlet이 요청을 인터셉트한다.
3. RestController는 해당 요청을 처리하고 데이터를 반환한다.
'🌈Programming > Spring' 카테고리의 다른 글
DTO와 VO 그리고 Entity 차이점 알아보기 (0) | 2021.07.26 |
---|---|
[Spring] Lombok 알아보기 (0) | 2021.07.24 |
[Spring] PSA(Portable Service Abstraction)란? (0) | 2021.07.16 |
[Spring] POJO(Plain Old Java Object)란? (1) | 2021.07.15 |
[Spring] AOP(Aspect Oriented Programming)란? (0) | 2021.07.14 |
블로그의 정보
슬기로운 개발생활
coco3o