1. @Controller
Spring MVC 의 대표 어노테이션 Controller 는 View 를 반환하기 위해 사용하는 어노테이션이다
순서
- Clinet 는 URI 형식으로 웹 서비스에 요청을 보낸다
- DispatcherServlet이 요청을 처리할 대상을 찾는다(존재의 유무)
- HandlerAdapter를 통해 요청을 위임하게 되고 그 요청은 Controller 로 가게 되는것이다.
- Controller 는 요청을 처리한 후에 ViewName 을 반환하게 된다
- DispatcherServlet은 ViewResolver를 통해 ViewName에 해당하는 View를 찾아 사용자에게 반환한다
- View 네임을 통해 결과적으로 ViewResolver 에서 이름을 통해 렌더링 되면서 사용자에게 화면을 보여주게 된다.
그렇다면 한가지 궁금한게 생긴다. 근데 과연 Controller 는 그저 View 찾아주는 역할에 불과할까? Data는 다루지 못하는 걸까? 결과부터 말하자면 당연히 가능하다 다만 한가지 더 추가해주어야 하는 길이 있는데 바로 @ResponseBody가 메소드에 추가되어야 한다. 이로 인해 JSON의 형태로 데이터를 반환하게 되는것이다.
위와 크게 다르지 않지만 6번을 보면 조금 다른걸 알수가 있다. View를 통해 ViewResolver 를 사용하는 대신에 HttpMessageConverter가 동작하기 시작한다. 여기엔 다양한 Converter가 존재하는데 반환되는 데이터에 따라 사용하는 Converter가 결정된다
단순 문자열일 경우 : StringHttpMessageConverter
객체인 경우 : MappingJackson2HttpMessageConverter
이런식으로 데이터의 경우에 따라 다양한 Converter가 동작하는 것이다.
보이는것과 같이 ResponseEntity로 감싸서 데이터를 반환하게 된다 또 반환한 데이터를 JSON으로 만들어주기 위해 @ResponseBody 어노테이션을 사용해 묶어준다.
그렇다면 이제 또 다시 고민하게 된다 그럼 Data 만 전송하면 되는 상황에서 모든 메소드에 ResponseBody를 붙여야할까? 이마저도 귀찮다 한번에 붙여버리게 된 RestController 에 대해 알아보자
2. @RestController
RestController 는 이름만 봐도 감이 오겠지만 ResponseBody와 Controller 의 기능을 합쳐놓은 것으로 해당 클래스의 모든 메소드가 JSON의 형태인 객체로 반환한다면 사용하면 된다. 이건 과정을 설명하기엔 위에 Data를 다루는 Controller 와 너무 비슷하다 때문에 코드만 보고 확인해보자
RestController 하나로 어노테이션이 정리가 되었다는 사실을 알수 있다.
Reference
https://mangkyu.tistory.com/49
[Spring] @Controller와 @RestController 차이
Spring에서 컨트롤러를 지정해주기 위한 어노테이션은 @Controller와 @RestController가 있습니다. 전통적인 Spring MVC의 컨트롤러인 @Controller와 Restuful 웹서비스의 컨트롤러인 @RestController의 주요한 차이점
mangkyu.tistory.com
'Spring > 🌲 Spring' 카테고리의 다른 글
🌲 Entity 와 DTO 의 차이 (0) | 2023.08.03 |
---|---|
🌲 @NoArgsConstructor 와 @AllArgsConstructor 그리고 @RequiredArgsConstructor (0) | 2023.08.03 |
🌲 Request 와 Response (0) | 2023.08.03 |
🌲 개발자가 서비스를 주고 받을 때 고민하는 3가지(feat. SSR, CSR) (0) | 2023.08.01 |
🌲 서블릿(Servlet) (0) | 2023.08.01 |