일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Meta Quest3
- 백준
- 점프 점프
- 10505
- 알고리즘
- 메타퀘스트3
- D3
- spring
- 이니셔티브 q
- BOJ
- 논블록
- 11060
- 자료구조
- D2
- SOLID
- SWEA
- 삼성 SW 역량 테스트 기출 문제
- 리퍼럴
- C++
- Initiative Q
- 어싱크
- 재밌게 할래요
- d4
- 블록
- Java
- 디자인패턴
- 레퍼럴
- 프로그래머스
- level2
- Design Pattern
- Today
- Total
아직은 정체성이 없는 블로그
[Spring] @Controller와 @RestController의 차이 본문
Spring을 처음 사용해볼 때 @Controller와 @RestController의 차이점도 정확히 모르고 둘이 헷갈려 사용을 제대로 못해 제가 원하는 View를 보여주지 못했던 기억이 있습니다.
오늘은 Spring MVC에서 자주 쓰게 되는 @Controller와 @RestController의 차이점을 알아보겠습니다.
@Controller와 @RestController의 차이
Spring에서 컨트롤러를 지정해주기 위한 어노테이션은 @Controller와 @RestController가 있습니다.
전통적인 Spring MVC의 컨트롤러인 @Controller와 Restuful 웹서비스의 컨트롤러인 @RestController의 주요한 차이점은 HTTP Response Body가 생성되는 방식입니다.
좀 더 쉽게 말하자면 @Controller의 주용도는 View를 리턴하는 것이고, @RestController는 JSON/XML 타입의 HTTP 응답을 직접 리턴합니다.
2가지의 어노테이션을 아래에서 간단히 설명해드리겠습니다.
1. @Controller(Spring MVC Controller)
Controller에서 View 반환하는 경우
전통적인 Spring MVC의 컨트롤러인 @Controller는 주로 View를 반환하기 위해 사용합니다. 아래와 같은 과정을 통해 Spring MVC Container는 Client의 요청으로부터 View를 반환합니다.
1.Client는 URI 형식으로 웹 서비스에 요청을 보낸다.
2.Mapping되는 Handler와 그 Type을 찾는 DispatcherServlet이 요청을 인터셉트한다.
3.Controller가 요청을 처리한 후에 응답을 DispatcherServlet으로 반환하고, DispatcherServlet은 View를 사용자에게 반환한다.
Client -> Request -> Dispatcher Servlet -> Handler Mapping -> Controller -> View -> Dispatcher Servlet -> Response -> Client
Data를 반환할 때
Spring MVC Controller는 View 만 반환하지 않습니다. Data를 반환해야 하는 경우가 있는데 이럴 때에는ResponseBody 어노테이션을 활용하여 Json형태로 데이터를 반환할 수 있습니다.
1.Client는 URI 형식으로 웹 서비스에 요청을 보낸다.
2.Mapping되는 Handler와 그 Type을 찾는 DispatcherServlet이 요청을 인터셉트한다.
3.@ResponseBody를 사용하여 Client에게 Json 형태로 데이터를 반환한다.
Client -> Request -> Dispatcher Servlet -> Handler Mapping -> Controller (ResponseBody)-> Response -> Client
2. @RestController(Spring Restful Controller)
@RestController는 Spring MVC Controller에 @ResponseBody가 추가된 것입니다. 클래스 상단에 @RestController 어노테이션을 선언하면 Method마다 @ResponseBody를 붙여 주지 않아도 됩니다.
RestController의 주용도는 Json/Xml 형태로 객체 데이터를 반환하는 것입니다.
1.Client는 URI 형식으로 웹 서비스에 요청을 보낸다.
2.Mapping되는 Handler와 그 Type을 찾는 DispatcherServlet이 요청을 인터셉트한다.
3.RestController는 해당 요청을 처리하고 데이터를 반환한다.
Client -> HTTP Request -> Dispatcher Servlet -> Handler Mapping -> RestController (자동 ResponseBody 추가)-> HTTP Response -> Client
참고한 자료
https://mangkyu.tistory.com/49
https://www.genuitec.com/spring-frameworkrestcontroller-vs-controller/
'Spring' 카테고리의 다른 글
[Spring][Spring boot] @SpringBootApplication 이란? (0) | 2020.07.09 |
---|---|
[Spring][IoC] IoC(Inversion of Control) 제어의 역전 (0) | 2020.06.12 |
[Spring] Spring boot 프로젝트의 구조 (0) | 2020.06.12 |
[Spring][Java] DAO (Data Access Object) (0) | 2020.05.19 |