🧑🏫 목표
- HTTP 요청 및 응답 데이터의 처리 방식을 학습한다.
- 실습을 통해 CRUD 기능을 포함한 프로젝트를 개발하며, 실제 애플리케이션에서 HTTP 통신과 데이터 처리를 적용하는 방법을 익힌다.
/static/public/META-INF/resourcessrc/main/resources/static → 🌱 Spring 자동 생성
Spring에서는 Thymeleaf, JSP와 같은 템플릿 엔진을 사용해 View Template을 작성할 수 있고, View Template은 서버에서 데이터를 받아 이를 HTML 구조에 맞게 삽입한 후, 최종적으로 클라이언트에게 전송되는 HTML 문서로 변환하여 사용자에게 동적으로 생성된 웹 페이지를 제공한다.
📌 View Template
- View Template은 Model을 참고하여 HTML 등이 동적으로 만들어지고 Client에 응답된다.
- Spring Boot는 기본적으로 View Template 경로(
src/main/resources/templates)를 설정한다.- build.gradle에 Thymeleaf 의존성을 추가하면
ThymeleafViewResolver와 필요한 Spring Bean들이 자동으로 등록된다.
@ResponseBody 가 없으면 View Resolver가 실행되며 View를 찾고 Rendering한다.@Controller
public class ViewTemplateController {
@RequestMapping("/response-view")
public String responseView(Model model) {
// key, value
model.addAttribute("data", "sparta");
return "thymeleaf-view";
}
}
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Hello</title>
</head>
<body>
<h1>Thymeleaf</h1>
<h2 th:text="${data}"></h2>
</body>
</html>
@ResponseBody 가 있으면 HTTP Message Body에 return 문자열 값이 입력된다. // thymeleaf-view.html 과 Mapping된다.
@RequestMapping("/thymeleaf-view")
public void responseViewV2(Model model) {
model.addAttribute("data", "sparta");
}
REST API를 만드는 경우 Server에서 Client로 HTML을 전달하는 방식이 아닌 HTTP Message Body에 직접 Data를 JSON 형식으로 담아 전달한다.
⛔️ 정적 리소스, View Template도 HTTP Message Body에 담겨 전달된다. HTTP 응답 데이터 안의 정적 HTML, View Template을 보고 브라우저가 화면에 그려주는 것이다.
@GetMapping("/v1/response-body")
public void responseBodyV1(
HttpServletResponse response
) throws IOException {
// HttpServletResponse 객체를 사용한다.
response.getWriter().write("data");
}
@GetMapping("/v2/response-body")
public ResponseEntity<String> responseBodyV2() {
return new ResponseEntity<>("data", HttpStatus.OK);
}
HttpStatus Enum 상태 코드를 전달할 수 있다.
// TEXT 데이터 통신
@ResponseBody
@GetMapping("/v3/response-body-text")
public String responseBodyText() {
return "data"; // HTTP Message Body에 "data"
}
// JSON 데이터 통신
@ResponseBody
@GetMapping("/v3/response-body-json")
public Tutor responseBodyJson() {
Tutor tutor = new Tutor("wonuk", 100);
return tutor; // HTTP Message Body에 Member Object -> JSON
}
ResponseEntity와 같음@ResponseStatus 를 사용하여 상태 코드를 지정할 수 있다.@ResponseBody
@GetMapping("/v5/response-body")
public ResponseEntity<Tutor> responseBody() {
Tutor tutor = new Tutor("wonuk", 100);
return new ResponseEntity<>(tutor, HttpStatus.OK);
}
ResponseEntity<>두 번째 파라미터에 Enum을 사용하여 상태 코드를 바꿀 수 있다.