IT/Java

[Thymeleaf] 공통 html 파일 분리하기 (header, footer)

binary? 2024. 6. 17. 15:39

[Thymeleaf] 공통 html 파일 분리하기 (header, footer)

 

프로젝트 진행하면서 점차 개발하는 화면들이 늘어났습니다.

모든 화면에서 <header>태그에서 메뉴를 보여주고 있었습니다.

메뉴를 수정함에 따라 모든 html 파일들을 수정해야 하다 보니 유지보수가 어려웠습니다.

그래서 파일을 분리하기로 결심했고 Thymeleaf에서 사용하는 방법을 정리해 보겠습니다.

1. 폴더 및 파일 생성

공통된 파일을 관리할 fragment 폴더를 생성하였습니다. 추후에 footer도 추가할 예정입니다.

2. header.html 파일 작성

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<body>
    <div th:fragment="headerFragment">
        <header>
            <div class="container">
                <div class="logo" onclick="window.location.href='https://binary96.store/'">
                    <h1>뭐든지 만들어드립니다</h1>
                </div>
                <nav class="main-nav">
                    <ul>
                        <li><a href="https://binary96.store/lucky"><i class="fas fa-star"></i>오늘의 운세</a></li>
                        <li><a href="https://binary96.store/game"><i class="fas fa-gamepad"></i>게임</a></li>
                        <li><a href="https://binary96.store/voteList"><i class="fas fa-vote-yea"></i>익명 투표!</a></li>
                        <li><a href="https://kimchilotto.netlify.app/"><i class="fas fa-ticket-alt"></i>로또 추첨기</a></li>
                        <li><a href="https://godofdeath.pages.dev/"><i class="fas fa-skull-crossbones"></i>죽음 예측 테스트</a></li>
                        <li><a href="https://binary96.store/rsiSummary"><i class="fas fa-chart-line"></i>코인 RSI 정보</a></li>
                        <li><a href="https://binary96.store/getLotto"><i class="fas fa-medal"></i>로또 당첨 순위</a></li>
                        <li><a href="https://binary96.store/getLotto"><i class="fas fa-medal"></i>로그인</a></li>
                    </ul>
                </nav>
                <div class="hamburger" onclick="toggleMenu()">
                    <i class="fas fa-bars"></i>
                </div>
            </div>
        </header>
    </div>
</body>
</html>
 

3. header.html 불러오는 html 수정

수정전

<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <title>뭐든지 만들어드립니다</title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" type="text/css" th:href="@{/css/common.css}">
    <link rel="stylesheet" type="text/css" th:href="@{/css/header.css}">
</head>
<body>
<header>
    <div class="container">
        <div class="logo" onclick="window.location.href='https://binary96.store/'">
            <h1>뭐든지 만들어드립니다</h1>
        </div>
        <nav class="main-nav">
            <ul>
                <li><a href="https://binary96.store/lucky"><i class="fas fa-star"></i>오늘의 운세</a></li>
                <li><a href="https://binary96.store/game"><i class="fas fa-gamepad"></i>게임</a></li>
                <li><a href="https://binary96.store/voteList"><i class="fas fa-vote-yea"></i>익명 투표!</a></li>
                <li><a href="https://kimchilotto.netlify.app/"><i class="fas fa-ticket-alt"></i>로또 추첨기</a></li>
                <li><a href="https://godofdeath.pages.dev/"><i class="fas fa-skull-crossbones"></i>죽음 예측 테스트</a></li>
                <li><a href="https://binary96.store/rsiSummary"><i class="fas fa-chart-line"></i>코인 RSI 정보</a></li>
                <li><a href="https://binary96.store/getLotto"><i class="fas fa-medal"></i>로또 당첨 순위</a></li>
            </ul>
        </nav>
        <div class="hamburger" onclick="toggleMenu()">
            <i class="fas fa-bars"></i>
        </div>
    </div>
</header>

<div>
      // 다른 UI 생략
</div
<body>
 

 

수정후

<body>
<header th:replace="/fragment/header :: headerFragment"></header> // 이거 한줄로 변경

<div>
      // 다른 UI 생략
</div
<body>
 

 

결론

공통으로 사용할 html 파일을 분리한다.

기존에 사용하던 html 파일에는 분리한 내용을 지우고 아래 한 줄을 추가한다.

<header th:replace="/fragment/header :: headerFragment"></header>

파일 경로에 따라 위의 빨간색 부분을 수정하시면 됩니다.

저의 파일 경로는 아래와 같습니다.

resources/template/fragment/header.html

'IT > Java' 카테고리의 다른 글

MVC 패턴과 모델1, 모델2의 차이  (1) 2024.09.18
[JAVA] 프로세스와 스레드  (0) 2024.06.14
총알 피하기 게임  (3) 2024.06.02
[JAVA] session 세션 유효시간 설정  (0) 2024.05.22
[JAVA] 시간 지연하는 방법  (0) 2024.05.13