( 강의에서는 초기 프로젝트 설정에서
thymeleaf와 spring web만 의존성 추가한 상태 )


MVC : Model, View, Controller
- controller
@Controller
public class HelloController {
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model) {
model.addAttribute("name", name);
return "hello-template";
}
}
- view
resources/templates/hello-template.html
<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
</body>
</html>

내가 이해한 대로 써보면 사용자의 요청을 받은 서버가 스프링컨테이너에 있는 해당 컨트롤러를 찾은 다음 반환하는 뷰를 뷰리졸버가 템플릿 경로 안에서 해당 뷰가 있는지 찾고 해당 뷰를 찾으면 (여기선 타임리프 템플릿 엔진 처리) html로 반환해서 사용자에게 보여준다 (응답) !
🌪️ 정적인 컨텐츠들은 뷰리졸버를 거치지 않음 !! (html,css,이미지 등)
🌪️ 겟방식은 주소에 정보가 나타나서 post보다 보안이 낮은 느낌
🌪️ 만났던 오류 404 - > 원인 : hello-template.html의 위치가
templates 안이 아니어서 생긴 오류였음 !!

결과

템플릿 엔진을 통합 응답과의 차이는 페이지 소스를 보면
@responsebody를 사용했을 땐 데이터 그 자체만 보여줌 !!
그래서 html 파일을 따로 만들지 않아도 문자 데이터를 나타낼 수 있다.
템플릿 엔진을 통한 처리일 때 (html로 변환해서 반환)

@ResponseBody 사용할 때 데이터 그 자체만 처리

@ResponseBody는 Spring Framework에서 사용되는
어노테이션 중 하나로, 주로 Spring MVC에서 컨트롤러 메서드가 HTTP 응답의 본문을 직접 작성할 때 사용된다.
이 어노테이션을 사용하면 메서드의 반환 값이 HTTP 응답으로 직접 전송되며, View Resolver를 거치지 않고 직접 데이터를 응답으로 보낼 수 있다.
( getter/setter 생성 - > win 단축키 alt + Ins )

결과
⚡ @ResponseBody 를 사용하고, 객체를 반환하면 객체가 JSON으로 변환됨

@ResponseBody api
HTTP의 BODY에 문자 내용을 직접 반환
viewResolver 대신에 HttpMessageConverter 가 동작
기본 문자처리: StringHttpMessageConverter
기본 객체처리: MappingJackson2HttpMessageConverter
byte 처리 등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음
참고: 클라이언트의 HTTP Accept 해더와 서버의 컨트롤러 반환 타입 정보 둘을 조합해서 HttpMessageConverter 가 선택된다.
⭐ json은 추후에 따로 또 정리해두자 !