회고하는 이유?
스프링부트를 통해서 토이 프로젝트를 진행하는 과정에서 두 개의 컨트롤러를 사용했지만, 차이점과 용도를 알지 못하고 사용하였다. 추후에 프로젝트가 끝난 직후에, 리서치를 통해 두 컨트롤러에 대해 학습하였고 비슷한 생각을 하는 다른 코린이한데도 도움이 됐으면 하는 마음에 게시글을 작성했습니다.
주요 차이점
- HTTP Response Body가 생성되는 방식
더보기
☞ HTTP에 대해서
- 기본적으로 요청/응답 (request/response) 구조로 되어있으며, 클라이언트가 HTTP request를 서버에 보내면 서버는 HTTP response를 보내는 구조. 클라이언트와 서버의 모든 통신이 요청과 응답으로 이루어 진다.
- HTTP Request/Response는 크게 3가지 부분(Status line, Headers, Body)으로 되어있다.
- Response의 body와 일반적으로 동일하다. Request와 마찬가지로 모든 response가 body가 있지는 않다. 데이터를 전송할 필요가 없을경우 body가 비어있게 된다.
Controller
- 전통적인 Spring MVC의 컨트롤러
- view(화면)을 리턴 (ResponseBody를 사용하여 객체, 데이터를 리턴할수도 있음)
더보기
Spring MVC의 전통적인 Work Flow
- 클라이언트는 URI 형식으로 웹 서비스에 요청을 보냄.
- 요청은 Handler Mapping과 그 타입을 찾는 DispatcherServlet에 의해 인터셉트
- 요청은 Controller에 의해 처리되고 응답은 DispatcherServelt으로 리턴된 후 DispatcherServlet은 View로 디스패치.
RestController
- Restful 웹 서비스의 컨트롤러
- 반환되는 객체 데이터 타입: JSON/XML 타입의 HTTP 응답을 직접 리턴
- 각 메서드마다 @ResponseBody를 추가할 필요가 없다.
- 데이터를 리턴하는 것이 주용도이다.
- 클라이언트로부터 JSON 데이터 응답을 내려주기 때문에 @RestController 어노테이션을 사용해 온 것이다.
※ 참고자료
velog.io/@woo00oo/RestController-vs-Controller
@RestController vs @Controller
_나는 지금까지 컨트롤러 클래스 위에 Rest API를 사용하기 때문에 @RestController 어노테이션을 아무생각 없이 사용해 왔다. 이번 장에서는 @RestController 어노테이션과 @Controller 어노테이션의 정확한
velog.io
HTTP 구조 및 핵심 요소
하이퍼텍스트(HTML) 문서를 교환하기 위해 만들어진 protocol(통신 규약).즉 웹상에서 네트워크로 서버끼리 통신을 할때 어떠한 형식으로 서로 통신을 하자고 규정해 놓은 "통신 형식" 혹은 "통신 구
velog.io