본 내용은 온라인 강의 사이트 인프런의 김영한 님의 강의 내용이 포함되어 있습니다.
'스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술'
정적 리소스
정적 리소스는 해당 리소스 파일(HTML, CSS, js)을 변경 없이 그대로 뷰에 제공하는 것을 말한다.
먼저, 스프링 부트는 클래스패스의 특정 디렉토리에 있는 정적 리소스를 제공한다.
- /static
- /public
- /resources
- /META-INF/resources
기본적으로 src/main/resources/static 경로로 리소스를 보관하고 클래스패스의 시작 경로로 사용한다.
따라서, HTML, css, js 등의 리소스를 해당 경로에 넣어두면 스프링 부트가 정적 리소스로 서비스를 제공한다.
예를 들어, 다음 경로에 hello-form.html 파일이 들어 있다면
- src/main/resource/static/basic/hello-form.html
웹 브라우저에서는 다음과 같이 요청을 보내면 뷰가 제공된다.
- http://localhost:8080/basic/hello-form.html
뷰 템플릿
뷰 템플릿을 거쳐 HTML이 생성되고, 뷰가 응답을 만들어서 전달하는 방식이다.
일반적으로 HTML을 동적으로 생성하는 용도로 사용하지만 다른 용도로도 사용이 가능하다.
스프링 부트는 src/main/resources/templates를 기본 뷰 템플릿 경로로 제공하고 있다.
Thymeleaf 스프링 부트 설정
뷰 템플릿 코드를 실행하기 위해서는 동적 뷰 템플릿을 지원하는 Thymeleaf를 설정해야 한다.
build.gradle
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
스프링 부트가 자동으로 ThymeleafViewResolver와 필요한 스프링 빈을 등록한다.
뷰 템플릿 생성
스프링 부트가 제공하는 뷰 템플릿 경로에 해당 html 파일을 생성한다.
- src/main/resources/templates/response
- hello.html
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<p th:text="${data}">empty</p>
</body>
</html>
뷰 템플릿을 호출하기 위한 컨트롤러
@Controller
public class ResponseViewController {
@RequestMapping("/response-view-v1")
public ModelAndView responseViewV1() {
ModelAndView mav = new ModelAndView("response/hello")
.addObject("data", "hello!");
return mav;
}
// String을 반환하는 경우
@RequestMapping("/response-view-v2")
public String responseViewV2(Model model) {
model.addAttribute("data", "hello!");
return "response/hello";
}
// 반환이 없는 경우(void)
@RequestMapping("/response/hello")
public void responseViewV3(Model model) {
model.addAttribute("data", "hello!");
}
}
String을 반환하는 경우
@ResponseBody가 없으면 response/hello로 뷰 리졸버가 실행되어 뷰를 찾고 렌더링 한다.
- 뷰의 논리 이름인 response/hello를 반환하여 해당 경로의 뷰 템플릿이 렌더링 된다.
- 실행 시 templates/response/hello.html
@ResponseBody가 있으면, 뷰 리졸버를 실행하지 않고 HTTP 바디에 직접 respnse/hello라는 문자가 입력된다.
반환이 없는 경우(void)
@Controller 어노테이션을 사용하고, HTTP 메시지 바디를 처리하는 파라미터가 없으면, URL을 참고하여 논리 뷰 이름으로 사용한다.
- URL : /response/hello
- 실행 : templates/response/hello.html
- 이 방식의 경우, 명시성이 떨어지고, 조건이 맞지 않는 경우가 대부분으로 권장하지는 않는 방법이다.
'프레임워크(Framework) > Spring' 카테고리의 다른 글
[Spring DB] 체크 예외와 언체크 예외 총정리 - (2) (0) | 2022.11.22 |
---|---|
[Spring DB] 체크 예외와 언체크 예외 총정리 - (1) (0) | 2022.11.21 |
[Spring MVC] 스프링 MVC @ModelAttribute 사용 방법 정리 (0) | 2022.11.18 |
[Spring MVC] 스프링 MVC @RequestParam 사용 방법 정리 (0) | 2022.11.17 |
[Spring MVC] HTTP 요청 파라미터 (0) | 2022.11.15 |