반응형
이제 어느 정도 API통신이 가능한것을 확인했으니 테스트 페이지를 만들어야했다.
그래서 Tile Framework를 이용해 페이지를 구성하려고 한다.
하지만 REST API 환경에는 Tiles Framework로 웹페이지를 구성하는 것이 안되는 것은 아니지만 가능하면 사용하지 않는 것이 좋다고 한다.
REST API는 주로 서버와 클라이언트 간의 상태를 전달하는 데 초점을 맞춘 데이터 주고받기 방식을 제공되어 클라이언트(예: 웹 브라우저, 모바일 앱)에서 사용자 인터페이스를 구성하고, 서버로부터 받은 데이터를 표시하는 방식으로 작동하기 때문이라고 한다. 따라서, 서버 측에서 HTML 페이지 조각을 조립하는 Tiles와 같은 기술은 클라이언트 측에서 UI를 동적으로 구성하는 현대적인 접근 방식과 잘 맞지 않다고 한다.
한줄 요약 하자면 REST API는 CSR이기 때문에 SSR을 지향하는 Tiles Framework는 맞지 않다라고 한다.
그래서 Thymeleaf를 사용할까 고민하긴 했지만 일단 지금 하는 개인 프로젝트는 Tiles로 구현하고 다음에는 Thymeleaf로 구현하려고 한다.
서론이 길었는데 여차저차해서 SSR방식을 사용해야하니 Controller도 수정해야 했다.
여기서 생기는 @Controller와 @RestController에 대해 공부하려고 한다.
@Controller
- 주로 View를 반환하기 위한 목적으로 사용
- 반환한 View의 이름으로부터 View를 렌더링하기 위해서는 ViewResolver가 사용됨
과정
- Client는 URI형식으로 웹 서비스에 요청
- DispatcherServlet이 요청을 처리할 대상 조회
- HandlerAdapter을 통해 요청을 Controller로 위임
- Controller는 요청을 처리한 후 ViewName 반환
- DispatcherServlet은 ViewResolver를 통해 ViewName에 해당하는 View 찾아 사용자에게 반환
+ ) Controller를 이용해 데이터를 반환
- 데이터를 반환하기 위해서는 @ResponseBody 어노테이션이 필요
- JSON형태로 데이터 반환
과정
- Client는 URI 형식으로 웹 서비스에 요청을 보냄
- DispatcherServlet이 요청을 처리할 대상을 찾음
- HandlerAdapter을 통해 요청을 Controller로 위임
- Controller는 요청을 처리 후 객체를 반환
- 반환되는 객체는 Json으로 Serialize되어 사용자에게 반환
- Controller를 통해 객체를 반환하는 경우 viewResolver 대신 HttpMessageConverter가 동작
- 단순 문자열인 경우에는 StringHttpMessageConvertor가 객체인 경우에는 MapperJackson2HttpMessageConverter가 사용되는 등 데이터 종류에 따라 서로 다른 MessageConverter가 작동하므로, HttpMessageConverter에 여러 Converter가 등록되어 있어야 함
@RestController
- RestController = Controller + ResponseBody
- 데이터를 전달하는 Controller와 동일한 동작
- 주목적도 JSON형태로 객체 데이터를 반환
과정
- Client는 URI 형식으로 웹 서비스에 요청 보냄
- DispatcherServlet이 요청을 처리할 대상 조회
- HandlerAdapter을 통해 요청을 Controller로 위임
- Controller는 요청을 처리한 후에 객체 반환
- 반환되는 객체는 Json으로 Serialize되어 사용자에게 반환
반응형
'Backend > Spring | SpringBoot' 카테고리의 다른 글
[JPA] Auto Increase가 안될 때 (0) | 2024.03.11 |
---|---|
[JDBC] java.sql.SQLException: No suitable driver found for jdbc:mariadb (0) | 2024.03.07 |
[JPA] insert...ing (0) | 2024.03.04 |
[JPA] Insert 방법 (0) | 2024.02.29 |
[JPA] JPA, JPQL, NativeQuery 비교 (0) | 2024.02.22 |