본문 바로가기
Sesac 웹 풀스택[새싹X코딩온]/Spring

2. Spring Boot 사용하기(feat: Intellij, Spring initializer, thymeleaf)

by 이쟝 2023. 3. 9.
Spring을 더 쉽게 이용하기 위한 도구 
Spring을 이용할 시, 필요한 여러 가지 세팅 작업들 ( ex) 톰캣 서버 설 정, XML 설정 등 ) 없이 쉽고 빠르게 프레임워크를 사용할 수 있도록 만들어진 것

 

Intellij 유용한 플러그인

더보기
Atom Material Icons : 프로젝트 구조(패키지, 폴더, 파일)을 Atom ide 디자인을 입혀서 아이콘 모양을 바꿔주는 플러그인
Material Theme UI 
CodeGlance Pro : 대략적인 전체적인 코드의 양을 체크하거나 위에 적어놓은 메서드를 찾을 때 유용
Grep Console : Console 출력을 상황에 맞게 색상 별로 나눠서 출력

Spring initializer 

  • Spring을 더 쉽게 이용하기 위한 도구
  • Groovy ⇒ script 이름
  • 빌드했을 때 나오는 결과물 이름 Artifact
  • Lombok : 코드를 간소화시켜줌


Spring MVC

  • 정적 파일
    • ./src/main/resources/static => 정적 파일 위치
    • 그림 같은것들..

Thymeleaf 템플릿

  • 템플릿 엔진의 일종으로, html 태그에 속성을 추가해 페이지에 동적으로 값을 추가하거나 처리할 수 있게 도와주는 것
  • Spring Boot 사용시 권장되는 템플릿 엔진

1. Controller 생성

1-1. java > sesac.sesacspring > controller > HelloController 생성

package sesac.sesac.spring.controller;

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


import java.util.ArrayList;

@Controller
public class HelloController {

    @GetMapping("/hi")
    public String getHi(Model model) {
        model.addAttribute("msg", "메세지입니다.!"); // 메시지 보내기
        return "hi"; // res.render("hi"); => 렌더하기
    }
}

2. Template view 생성

1-2. resources > templates > hi.html 생성

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>title</title>
</head>
<body>
    <h1 th:text="${msg}"></h1>
</body>
</html>

3. Thymeleaft 기본 문법

  • html 태그 안에 소 문법을 추가한다.
  • 이때, 태그는 div 뿐만이 아니라 html에서 지원하는 태그들 모두 사용 가능하다.
<div th:[속성]="${서버에서 보내는 attribute 이름}"/>

th.text

  • 태그 안의 텍스트를 서버에서 전달받은 값에 따라 표현하고자 할 때 사용하는 문법
<span th:text=”${msg}”></span>

th.utext

  • th:text와 유사
  • 변수에서 받은 값에 html 태그가 있다면 태그값을 반영해서 표시
  • <strong>안녕</strong>”값이 서버에서 넘어왔다면 <strong>이라는 글자가 나오는 것이 아닌 “안녕”이라는 글자가 <strong> 태그에 의해 굵게 표시

th.value

  • Element 들의 value 값을 지정할 때 사용된다.
<button th:value=”${hello}”/>

th.with

  • 변수 값을 지정해서 사용하고자 할 때 사용된다.
<span th:with="msg2='안녕? ' + ${msg}" th:text="${msg2}"></span>

 

  • thymeleaf안에서만 사용되는 msg2라는 변수를 만든 것!

th:switch

  • Switch-case 문을 이용할 때 사용되는 문법
  • th:case 에서 case 문을 다루고, *로 case문에서 다루지 않은 모든 경우가 처리 된다.( *는 일반 문법에서의 default)
<div th:switch="${hello}">
    <p th:case="'admin'">hello is admin</p>
    <p th:case="'manager'">hello is manager</p>
    <p th:case="'*'">hello is other</p>
</div>

 

th:if

  • 조건문이 필요할 때 사용되는 문법
  • Else 문이 필요한 경우에는 th:unless를 사용한다.
<p th:if="${hello} == 'web'" th:text="${hello}+'입니다.'"></p>
<p th:unless="${age} == 'web'" th:text="unless입니다."></p>

th:each

  • 반복문이 필요할 때 사용되는 문법
  • 리스트와 같은 collection 자료형을 서버에서 넘겨주면 그에 맞춰 반복적인 작업이 이루어질 때 사용된다.
// Person.java

package sesac.sesac.spring.controller;

public class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public int show(int age) {
        return age+1;
    }
}
    // PeopleController
    
    @GetMapping("/people")
    public String getPeople(Model model) {
        ArrayList<Person> list = new ArrayList<>();

        list.add(new Person("kim", 10));
        list.add(new Person("lee", 20));
        list.add(new Person("soo", 35));
        list.add(new Person("kwon", 26));

        model.addAttribute("people", list);
        return "people";
    }
// people.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
  <table border="1">
    <thead>
        <th>이름</th>
        <th>나이</th>
    </thead>
    <tbody>
        <tr th:each="p:${people}">
            <td th:text="${p.getName()}">kim</td>
            <td th:text="${p.age}">kim</td>
        </tr>
    </tbody>
  </table>
</body>
</html>