일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 서비스 계층
- @RestCotroller
- 인텔리제이
- 인스타그램만들기
- 스프링
- RESTful
- 백엔드
- 예외처리
- Java
- RESTful웹서비스
- 깃
- git hub
- 개발자
- 백엔드 개발자 뭐해?
- BufferedReader
- 프로그래머스
- 개발 뭐하지
- 다리를 지나는 트럭
- 리눅스 서버시간 변경
- 클론코딩
- Git
- string
- springboot
- 스프링부트
- Scanner
- .ppk만들기
- Spring
- 입력
- 깃허브
- 스프링 OAuth
- Today
- Total
It's Ward
[Spring] @Controller와 @RestController 동작 방식 및 차이점 본문
Spring에서 컨트롤러를 지정해주기 위한 어노테이션은 아래와 같이 두개로 구분된다.
@Cotroller : 전통적인 Spring MVC 컨트롤러
@RestController : RESTful 웹서비스의 컨트롤러 // @RequestMapping + @Cotroller
RESTful 웹서비스에 관한 내용은 아래 포스팅에 이해가 잘 되도록 설명되어있다.
https://kimseunghyun76.tistory.com/18
어떻게 동작하는가?
1. @Cotroller 로 View 반환하기
@Cotroller는 모델이 객체를 만들어 담고 View를 반환하기 위해 사용한다.
아래 사진은 mustache를 사용한다는 가정으로 만든 도식화된 사진이다.
1. Client가 URI 형식으로 웹 서비스에 요청(Request) 한다.
2. Dispacter Servlet이 Hadler Mapping을 통해 해당하는 Cotroller가 있는지 찾는다.
3. Handler Adapter를 통해 해당 Cotroller에 데이터를 요청한다.
4. Cotroller는 요청을 처리한 후 View 이름을 반환한다.
5. ModelAndView에 View 네임과 모델(모델이 있다면) 을 담아 Dispacter Servlet에 전달한다.
6. Dispacter Servlet은 View Resolver를 통해 해당하는 View를 찾아 Client에 반환(Responese)한다.
이렇게 하면 View Resolver가 resources/templates/hello.mustache 을 찾아 화면에 보여주게된다.
2. @Cotroller 로 Data반환하기
@Cotroller로 View 뿐만이 아니라, Data를 반환해야 하는 경우에는 @ResponseBody 어노테이션을 활용하여, Json 형식으로 데이터를 반환 할 수 있다.
1. Client가 URI 형식으로 웹 서비스에 요청(Request) 한다.
2. Dispacter Servlet이 Hadler Mapping을 통해 해당하는 Cotroller가 있는지 찾는다.
3. Handler Adapter를 통해 해당 Cotroller에 데이터를 요청한다.
4. Cotroller는 요청을 처리한 후 ResponseEntity를 ResponseBody에 담아 Dispacter Servlet에 전달한다.
5. Dispacter Servlet은 Client에 ResponseEntity 데이터를 Json Serialize하여 반환(Responese)한다.
2. @RestController로 Data반환하기
@RestController는 @ResponseBody 와 @Controller가 합쳐져 있다고 생각하면된다. 정말 동일하게 작동되며, @ResponseBody 를 명시적으로 필요한 컨트롤러마다 계속 입력해야 했다면, @RestController하나로 해결할 수 있다.
1. Client가 URI 형식으로 웹 서비스에 요청(Request) 한다.
2. Dispacter Servlet이 Hadler Mapping을 통해 해당하는 Cotroller가 있는지 찾는다.
3. Handler Adapter를 통해 해당 Cotroller에 데이터를 요청한다.
4. Cotroller는 요청을 처리한 후 ResponseEntity를 Dispacter Servlet에 전달한다.
5. Dispacter Servlet은 Client에 ResponseEntity 데이터를 Json Serialize하여 반환(Responese)한다.
아래 예제는 ResponseEntity 를 사용하지않아 객체를 그대로 반환하게 되는데, 문제는 클라이언트가 예상하는 HTTPstatus 를 설정할 수 없어 실제로 사용할 때에는 상황에 맞는 ResponseEntity를 사용하여야 한다.
그렇다면 어디에 RestController를 사용해야하는건가? 라는 의문이 자연스럽게 들게되는데.. 웹페이지는 View를 잘 보여주면 되는게 아니였던가???
해당 의문은 아래 포스팅을 보고 이해할 수 있었다.
마치며 ...
해당 블로그 포스팅 전에는 Cotroller와 RestCotroller를 들으면 아~ 맞아 하고 이해하는 수준이였다면, 지금은 설명을 할 수 있을 정도로 이해하였다. 또한 추가로 공부해야할 것들이 생겼다.
RESTful / RESTful 웹서비스 ,REST API
HTTP Status의 RestController 적용(ResponseEntity 사용방법) 에 대해 공부하도록 하겠다.
참고한 자료
https://dncjf64.tistory.com/288
https://hyojaedev.tistory.com/6
'Java > Spring' 카테고리의 다른 글
[Spring] DTO와 Mapper, Mapper(Map Struct) 사용 방법 - gradle (0) | 2022.06.27 |
---|---|
[Spring] RESTful 웹서비스 (0) | 2022.06.23 |
[Spring] 빌더 패턴(Bulider Pattern)에 대해 알아보자 (0) | 2022.06.21 |
[Spring] Spring의 특징과 계층 구조 (0) | 2022.06.20 |
[Spring] 트랜잭션(Transaction)이란 무엇일까? (1) | 2022.06.18 |