[SpringBoot] 템플릿 설정

2024. 8. 28. 15:13자바 웹 개발/스프링부트

템플릿이란?

템플릿은 자바 코드를 삽입할 수 있는 HTML 형식의 파일을 말한다. 템플릿 엔진에는 Thymeleaf, Mustache, Groovy, Freemarker, Velocity 등이 있는데 여기서는 타임리프를 사용한다. 

 

타임리프를 build.gradle 파일을 수정하여 설치한다. 

implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect'

 

템플릿 사용하기

src/main/resources 디렉터리에서 templates를 선택하여 html 파일을 만든다. 

 

이제 @ResponseBody가 필요없으니 삭제하고 템플릿 파일 이름을 적어서 리턴한다. 

@RequiredArgsConstructor
@Controller
public class QuestionController {

  private final QuestionRepository questionRepository;

  @GetMapping("/question/list")
  public String list(Model model){
    List<Question> questionList = this.questionRepository.findAll();
    model.addAttribute("questionList", questionList);
    return "question_list";
  }
}

 

템플릿에서 Model 사용하기

QuestionRespository로 조회한 데이터를 Model 클래스를 사용하여 템플렛에 전달할 수 있다. 

public String list(Model model)

 

매개변수로 Model로 지정하면 객체가 자동으로 생성된다. @RequiredArgsConstructor은 롬복을 통해 final이 붙은 속성을 포함하는 생성자를 자동으로 만들어주는 역할을 한다. 따라서 questionResposityory 객체가 자동으로 주입된다. 

<table>
    <thead>
        <tr>
            <th>제목</th>
            <th>작성일시</th>
        </tr>
    </thead>
    <tbody>
        <tr th:each="question : ${questionList}">
            <td th:text="${question.subject}"></td>
            <td th:text="${question.createDate}"></td>
        </tr>
    </tbody>
</table>

 

th: 타임리프 속성임을 나타낸다. 이를 통해 자바 코드랑 연관된다. 

${} : 모델 객체에 저장된 값을 불러들일 수 있다. 

 

자주 사용하는 타임피르의 속성은 다음과 같다. 


if문  :  th:if="${question != null}"
반복문 : th:each="question : ${questionList}

반복문 속성
-loop.index:루프의 순서(루파 반복 순서, 0부터 1씩 증가)
-loop.count:루프의 순서(루프의 반복 순서, 1부터 1씩 증가)
-loop.size: 반복 객체의 요소 개수(ex.questionList 요소 개수)
-loop.first: 루프의 첫 번째 순서인 경우 true
-loop.last: 루프의 마지막 순서인 경우 true
-loop.odd: 루프의 홀수번째 순서인 경우 true
-loop.even: 루프의 짝수번째 순서인 경우 true
-loop.current: 현재 대입된 객체(ex.question)

텍스트 속성 : th:text="${question.subject}" or [[${question.subject}]]