TIL - JAVA spring DAY 2

jihan kong·2022년 1월 4일
0

JAVA spring 입문

목록 보기
2/20
post-thumbnail

오늘은 template 엔진이 동작하는 원리와 실제 동작하는 방법에 대해 알게되었다. 예제로 Welcome page를 직접 만들면서 학습하였다.
강사님께서 spring이 자바 웹 엔터프라이즈와 관련된 전반의 생태계 전반을 제공해준다고 하셨다. 그만큼 spring이 현재 웹에 방대한 영향을 미치고 있다고 해도 과언이 아닐것 같다. 먼저, 자바 spring의 강력한 기능인 template을 살펴보았다.

Template이란?

주로 view를 만들어낼때 사용. 동적 컨텐츠를 만들때 사용된다.
spring boot에서 자동 설정을 지원하는 template 엔진은

  • FreeMarker
  • Groovy
  • Thymeleaf
  • Mustache
<!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>

-> 위와 같이 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>
<p th:text="'안녕하세요. ' + ${data}">안녕하세요. 손님</p>
</body>
</html>

-> 따라서 thymeleaf 라는 템플릿 엔진을 통해 정적 페이지를 동적으로 사용할 수 있게끔 해보았다. thymeleaf 문법을 사용하기 위해서는 xmlns:th="http://www.thymeleaf.org" 를 작성해주어야한다.
위 ${data}의 값을 p tag로 페이지에 로드하여 나타내준다.

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 {

    @GetMapping("hello")
    public String hello(Model model) {
        model.addAttribute("data", "hello!!");
        return "hello";
    }
}

이를 통해 controller에서 웹 어플리케이션에서 /hello라고 input값이 들어오면 @GetMapping에 의해

@GetMapping("hello")
public String hello(Model model) {
model.addAttribute("data", "hello!!");
return "hello";}

메소드를 호출하게 된다.

결론적으로 컨트롤러에서 리턴 값으로 문자를 반환하면 뷰 리졸버('viewResolver')가 해당 값을 찾아서 처리하는 것이다. 즉, 기본적으로 스프링 부트 템플릿 엔진이 기본 viewName을 매핑하고 templates의 hello.html을 찾아 리턴하게 되는 것.

학부때 배운 자바에서의 template은 제네릭 측면에서 클래스나 인터페이스같은 타입을 파라미터로 사용할 수 있게 해주는 역할을 의미했다. 이러한 템플릿을 아예 하나의 엔진으로 활용하여 값을 입력하고 이를 mapping 한다는 점에서 처음으로 template을 조금 더 프랙티컬하게 사용해본 것 같아서 나름의 의미가 있었던 것 같다..!

profile
학습하며 도전하는 것을 즐기는 개발자

0개의 댓글