📖 개요
서버에서 응답 데이터를 만드는 방법은 크게 3가지다.
- 정적 리소스 (ex: 정적 html, css, js, ...)
- 뷰 템플릿 (ex: 동적 html)
- HTTP 메시지
📕 1. 정적 리소스
정적 리소스는 해당 파일을 변경 없이 그대로 서비스하는 것이다.
src/main/resources는 리소스를 보관하는 곳이고, 클래스패스의 시작 경로다.
스프링 부트는 클래스 패스의 다음 디렉토리에 있는 정적 리소스를 제공한다.
/static, /public, /resources, /META-INF/resources |
📒 2. 뷰 템플릿
뷰 템플릿을 거쳐 html이 생성되고, 뷰가 응답을 만들어 전달한다.
일반적으로 html을 동적으로 생성하는 용도로 사용된다.
스프링 부트의 기본 뷰 템플릿 경로는 아래와 같다.
src/main/resources/templates |
이제 예제를 통해 뷰 템플릿을 호출해보자.
🔻 html 파일
src/main/resources/templates 하위에 html 파일을 생성한다.
타임리프를 이용했으며, 프론트와 관련된 자세한 설명은 생략한다.
<!DOCTYPE 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>
Thymeleaf 설정하기 (build.gradle)
타임리프 관련 추가 설정 > https://docs.spring.io/spring-boot/docs/2.4.3/reference/html/appendix-applicationproperties.html#common-application-properties-templating
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
🍃 ModelAndView를 반환하기
@RequestMapping("/response-view-v1")
public ModelAndView responseViewV1() {
ModelAndView mav = new ModelAndView("response/hello")
.addObject("data", "hello!");
return mav;
}
🍃 String을 반환하기
response/hello는 뷰의 논리 이름이다.
뷰의 논리 이름을 반환하면 해당 경로의 뷰 템플릿이 렌더링 된다.
@ResponseBody가 있으면 뷰 리졸버를 실행하지 않고 HTTP 메시지 바디에 직접 response/hello 문자가 입력된다.
@RequestMapping("/response-view-v2")
public String responseViewV2(Model model) {
model.addAttribute("data", "hello!");
return "response/hello"; // view 찾기
}
❓ 만약 view 이름과 요청 url이 같다면...
view 이름과 요청 url이 같은 경우에는 아래와 같이 사용할 수 있다.
@RequestMapping("/response/hello")
public void responseViewV3(Model model) {
model.addAttribute("data", "hello!");
}
@Controller를 사용하며 HTTP 메시지 바디를 처리하는 파라미터(HttpServletResponse, OutputStream 등)가 없을 경우에 발생하는데, 요청 URL을 참고해서 논리 뷰 이름으로 사용한다.
하지만 위 방식은 URL과 논리 뷰 이름이 항상 같지는 않다, 명시성이 떨어진다 등의 문제로 권장되는 방법은 아니다.
📘 3. HTTP 메시지
HTTP API를 제공하는 경우, html이 아니라 데이터를 전달해야 한다.
HTTP 메시지 바디에 JSON 같은 형식을 이용해 데이터를 넣어 보낸다.
HTTP 메시지와 같은 경우에는 이미 요청 데이터 조회할때 다양한 예시를 보았으니 링크로 대체한다.
( > https://yeonyeon.tistory.com/134 )
본 게시글은 김영한 님의 '스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술' 강의를 구매 후 정리하기 위한 포스팅입니다.
내용을 임의로 추가, 수정, 삭제한 부분이 많으며 정확한 이해를 위해서 강의를 구매하시는 것을 추천 드립니다.
'Develop > Spring+JPA' 카테고리의 다른 글
[Thymeleaf] 타임리프란? (+기본적인 사용법) (2) | 2021.10.15 |
---|---|
[Spring] HTTP 메시지 컨버터 (0) | 2021.10.10 |
[Spring] http 요청 데이터 조회 (0) | 2021.08.09 |
[Spring] 헤더 조회 (0) | 2021.07.14 |
[Spring] 요청 매핑 (0) | 2021.06.25 |