정적 콘텐츠의 개념
→ 서버에 저장되어 있는 파일을 웹 브라우저를 통해 그대로 보여주는 것
Spring Boot에서 제공하는 정적 콘텐츠 기능
📍 resources/static 하위에 HTML 파일 생성
웹 브라우저가 톰켓 서버에 localhost:8080/hello-static.html 요청
→ ① 컨트롤러가 hello-static을 찾음 ② static 폴더에서 hello-static을 찾음
→ 파일을 찾으면 반환
동적 콘텐츠의 개념
→ HTML을 서버에서 변형하여 보여주는 것
→ MVC와 템플릿 엔진을 이용하는 방식, API를 이용하는 방식
MVC의 개념
→ Model-View-Controller로 역할 분리
Model ▶ 화면에 필요한 데이터를 화면으로 전달
View ▶ 화면 처리
Controller ▶ 서버 관련(비즈니스 로직 etc) 관리
📍 Controller (MVC ver)
// controller/HelloController.java
@Controller
public class HelloController {
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model) {
model.addAttribute("name", name);
return "hello-template";
}
→ return 값인 hello-template을 찾음
📍 View (MVC ver)
<!-- resources/templates/hello-template.html -->
<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
</body>
</html>
→ 템플릿 엔진으로 동작하면 hello! empty가 'hello ' + ${name}로 치환
웹 브라우저가 톰켓 서버에 localhost:8080/hello-mvc 요청
→ helloController(컨트롤러)가 hello-mvc와 매핑되어 있는 메소드를 찾아 데이터 전달
→ viewResolver가 뷰를 찾아주고 템플릿 연결
→ 템플릿 엔진에서 HTML을 변환하여 웹 브라우저에 반환
API의 개념
→ JSON 형태의 데이터를 클라이언트에게 전달하는 것
@ResponseBody를 사용, viewResolver는 사용 X
HTTP의 BODY에 문자 내용 직접 반환
📍 Controller (API ver)
// controller/HelloController.java
@Controller
public class HelloController {
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name) {
return "hello" + name;
}
}
1. @ResponseBody 이용하여 문자열 반환
→ BODY에 내가 작성한 문자열 출력
// controller/HelloController.java
@Controller
public class HelloController {
@GetMapping("hello-api")
@ResponseBody
public Hello helloApi(@RequestParam("name") String name) {
Hello hello = new Hello();
hello.setName(name);
return hello;
}
static class Hello {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}
2. @ResponseBody 이용하여 객체 반환
→ JSON 형태로 객체 반환
웹 브라우저가 톰켓 서버에 localhost:8080/hello-api 요청
→ helloController(컨트롤러)가 hello-api와 매핑되어 있는 메소드를 찾았는데 @ResponseBody 존재
→ ① 기본 문자 처리 SttringHttpMessageConverter ② 기본 객체 처리 MappingJackson2HttpMessageConverter
→ 변환된 데이터는 HTTP 응답 본문에 작성
→ 웹 브라우저에 응답 반환
1. ( 정적 콘텐츠 )는 서버에 저장되어 있는 파일을 웹 브라우저를 통해 그대로 보여주는 것이다.
2. ( 동적 콘텐츠 )는 HTML을 서버에서 변형하여 보여주는 것이다.
3. Spring Boot에서 제공하는 정적 컨텐츠 기능을 이용하려면 HTML 파일을 ( resources/static ) 폴더에 생성해야 한다.
4. 스프링에서는 URL과 메소드를 연결하기 위해 ( @GetMapping ) 어노테이션을 사용한다.
5. MVC는 ( Model-View-Controller )이다.
6. MVC에서 ( Model )은 화면에 필요한 데이터를 전달하는 역할을 한다.
7-1. API에서 ( @ResponseBody ) 어노테이션은 문자열을 직접 HTTP의 BODY에 반환하기 위해 사용한다.
7-2. 위 어노테이션을 사용하면, ( viewResolver )를 사용하지 않고 HTTP의 BODY에 데이터를 직접 반환한다.
8. API에서 객체는 주로 ( Json ) 형태로 변환되어 클라이언트에 전달된다.
1. 오늘 할 일을 입력받고 오늘의 할 일: xxx 형식의 메시지를 반환하는 프로그램이 되도록 빈 곳을 채워넣으시오.
(단, 입력이 없을 경우에는 오늘의 할 일: 스프링 공부하기가 출력되도록 한다.)
@Controller
public class TodoController {
@GetMapping("to-do")
// 채워넣기
}
<html xmlns:th="http://www.thymeleaf.org">
<body>
<!-- 채워넣기 -->
</body>
</html>
2. 숫자 2개를 입력받아 {"sum": 결과} 형식의 메시지를 반환하는 프로그램이 되도록 빈 곳을 채워넣으시오.
(단, HTML 파일은 존재한다고 가정한다.)
@Controller
public class CalculatorController {
@GetMapping("add-api")
@ResponseBody
public Result addApi(/* 채워넣기 */) {
// 채워넣기
}
static class Result {
// 채워넣기
}
}
[출처] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
(섹션3 스프링 웹 개발 기초)
Corner Spring 3
ⓒ UMI
[스프링 3팀] 5장~6.5장. API 작성과 데이터베이스 연동 (1) | 2024.11.22 |
---|---|
[스프링 3팀] 1장~4장. 스프링 부트 개발 환경과 애플리케이션 개발하기 (2) | 2024.11.14 |
[스프링 3팀] 스프링 입문 섹션 7~8 (2) | 2024.11.07 |
[스프링 3팀] 스프링 입문 섹션 5~6 (0) | 2024.10.11 |
[스프링 3팀] 스프링 입문 섹션 4 (0) | 2024.10.04 |