본문 바로가기

Dev/Spring Boot

[코드로 배우는 스프링 부트] View 환경설정

본 포스팅은 인프런의 '스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술' 강의를 수강하며 정리한 내용입니다.

 

welcome page 만들기 : 도메인의 첫 화면

스프링 부트가 제공하는 Welcome Page 기능 (아래 사진 참조)

spring.io 사이트에서 [Projects] 탭 → [Spring Boot] 탭 → [Learn] 탭  → [current] 버튼  → [Spring Boot Features] 탭을 확인하면, 스프링부트는 static 폴더에 있는 index.html 이 존재하는지 먼저 찾고, 만약 못 찾으면 index 템플릿을 찾는 순서로 동작한다. << + localhost:8080에 대한 매핑이 없는 상황(21.02.25추가 내용)

 

방식 1. src/main/resources/static/index.html 에 직접 작성

<!DOCTYPE HTML>
<html>
<head>
<title>Hello</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
Hello
<a href="/hello">hello</a>
</body>
</html>

 

방식 2. 템플릿 엔진 사용하기

3.x 버전에서는 성능이 많이 개선되었습니다.

- thymeleaf 공식 사이트: https://www.thymeleaf.org/

- 스프링 공식 튜토리얼: https://spring.io/guides/gs/serving-web-content/

- 스프링부트 메뉴얼: https://docs.spring.io/spring-boot/docs/2.3.1.RELEASE/reference/html/spring-boot-features.html#boot-features-spring-mvc-template-engines

 

 스프링부트 메뉴얼 사이트에서 template을 검색하면, FreeMarker, Groovy, Thymeleaf, Mustache 4가지를 제공해주는 것을 알 수 있습니다. 우리는 타임리프를 사용합니다.

 

1. hello.hellospring 밑에 controller 패키지를 생성하고, HelloController.java 파일을 생성합니다.

package hello.hellospring.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HelloController {

    // url : hello 가 들어오면 아래 함수 실행
    @GetMapping("hello") 
    public String hello(Model model){

        model.addAttribute("data", "hello!!");
        return "hello";
    }
}

2. src/resources/templates 패키지 밑에 hello.html 파일을 생성합니다.

<!DOCTYPE HTML>

// 타임리프 문법을 사용할 수 있게 해줍니다.
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Hello</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>

    // HelloController.java 파일에서 model에 작성한 data의 value 값을 참조
    <p th:text="'안녕하세요. ' + ${data}" >안녕하세요. 손님</p> 
</body>
</html>

 

3. localhost:8080/hello 실행 화면

 

thymeleaf 템플릿 엔진 동작 방식

1. localhost:8080/hello url이 들어옵니다.

2. 스프링 부트는 내장 웹서버인 톰캣으로 이 url 을 받아 스프링에게 /hello url을 전달합니다.

3. 스프링은 HelloController 에서 @GetMapping에 해당하는 메소드를 실행합니다. 이때 메소드 인자에 있는 model은 스프링이 만들어 넣어줍니다.

4. 메소드에서는 model 에 데이터를 add하고, "hello" 를 return합니다. 이것은 resources/templates 폴더에 있는 "hello"라는 이름의 html 파일을 찾아 렌더링하라는 의미입니다.

5. viewResolver는 이 html을 찾아 렌더링하고, 템플릿 엔진 처리를 합니다.

 

즉, 컨트롤러에서 리턴 값으로 문자를 반환하면 뷰 리졸버( viewResolver )가 화면을 찾아서 처리합니다.

스프링 부트 템플릿엔진 기본 viewName 매핑 : resources:templates/ +{ViewName}+ .html

 

cf : spring-boot-devtools 라이브러리를 추가하면, html 파일을 컴파일만 해주면 서버 재시작 없이 View 파일 변경이 가능합니다. 인텔리J 컴파일 방법: 메뉴 build Recompile