본문 바로가기
Dev/Java

[Spring] Tiles 적용하는 법과 사용하는 방법

by 데브길길잇 2024. 7. 24.
728x90
반응형

 

안녕하세요 dev-길길IT입니다.

 

일반적으로 웹 페이지를 구성할 때, 레이아웃을 가장 먼저 고려합니다. 상단과 하단, 좌측 사이드바, 또 메뉴 네비게이션, 본문 컨텐츠 등 다양한 컴포넌트들이 구성되는데요. 이 때 모든 요소들을 페이지 하나하나에 다 적용해주면 개발하기가 너무 어렵기 때문에 별도의 라이브러리를 사용하는데요. 그 중 하나가 Apache Tiles입니다.

 

※ 공식 사이트 : https://tiles.apache.org/framework/index.html

 

Apache Tiles는 반복적인 레이아웃을 한 곳에서 관리할 수 있도록 해주는 template framework입니다. 2017년 11월 7일을 기점으로 프로젝트가 종료되어 현재는 더 이상 추가적으로 release가 되고 있지는 않습니다. 그래서 spring 버전의 제약이 있을 수는 있는데요. 여전히 많은 사람들이 사용하고 있어서 오늘 소개해드리려고 합니다.

 

 

[Spring] Tiles 적용하는 법과 사용하는 방법

     

    ※ 목차
      1. dependency 설치 및 적용
      2. tiles config 적용
      3. tiles.xml 설정 파일 생성
      4. layout 파일 생성 및 적용

    1. dependency 설치 및 적용

     

     

     

     

    먼저 Spring에 Apache Tiles를 적용해주려면 dependency를 설치해주어야 합니다. pom.xml에 아래와 같이 org.apache.tiles 관련 tiles-core, tiles-extras 2가지를 적용해주고 reload를 해줍니다.

     

    # pom.xml

    		<dependency>
                <groupId>org.apache.tiles</groupId>
                <artifactId>tiles-core</artifactId>
                <version>3.0.8</version>
            </dependency>
            <dependency>
                <groupId>org.apache.tiles</groupId>
                <artifactId>tiles-extras</artifactId>
                <version>3.0.8</version>
            </dependency>

     

     


     

    2. tiles config 적용

    그 다음 serlvet 설정쪽에 tiles config를 적용해주어야 하는데요. config 파일을 만들기에 앞어서 해당 설정을 적용해주겠습니다. bean을 새로 만들어서 아래와 같이 등록을 해주면 됩니다.

     

    # servlet-context.xml

    	<bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver"
    			p:viewClass="org.springframework.web.servlet.view.tiles3.TilesView"
    			p:order="0" />
     	
    	<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
    		<property name="definitions">
    			<list>
    				<value>/WEB-INF/tiles/tiles.xml</value>
    			</list>
    		</property>
    	</bean>

     


     

    3. tiles.xml 설정 파일 생성

    이제 실제로 spring 프로젝트에서 레이아웃으로 적용할 파일들을 관리하는 tiles.xml을 만들어보겠습니다. servelet-context.xml 쪽 설정에 /WEB-INF/tiles/tiles.xml이라고 경로를 지정해주었으니 해당 경로에 파일을 만들어줍니다.

     

    # tiles.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE tiles-definitions PUBLIC
          "-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN"
          "http://tiles.apache.org/dtds/tiles-config_3_0.dtd">
    <tiles-definitions>
    	<definition name="templateTopMenuDefault" template="/WEB-INF/layout2/template.jsp">
    		<put-attribute name="body" 		value="" />
    		<put-attribute name="left" 		value="/WEB-INF/layout2/left.jsp" />
    		<put-attribute name="menu" 		value="/WEB-INF/layout2/menu.jsp" />
    		<put-attribute name="header" 	value="/WEB-INF/layout2/header.jsp" />
    		<put-attribute name="footer" 	value="/WEB-INF/layout2/footer.jsp" />
    	</definition>
    
    </tiles-definitions>

     

     

    tiles에는 tiles definitions를 정의합니다. 여기에는 공통적으로 적용할 코드인 template을 definition으로 할당해주고, 하위에 put-attribute를 통해 어떤 html tag에 tiles를 적용할 것인지를 설정하게 됩니다.

     

     


     

    4. layout 파일 생성 및 적용

     

     

     

    tiles.xml에 적용된 해당 jsp 파일들은 다음과 같은 경로에 위치합니다.

     

    # template.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles" %>
    <!DOCTYPE html>
    <html lang="ko">
    <head>
        <meta charset="UTF-8">
        <title>제목</title>
        <style>
            #header{
                width:100%;
                height:50px;
                text-align: center;
                background-color: aqua;
            }
            #left{
                float:left;
                width:15%;
                background-color: gray;
            }
            #main{
                float:left;
                width:85%;
                background-color: lime;
            }
            #footer{
                width: 100%;
                height: 50px;
                text-align: center;
                background-color: orange;
                clear:both;
            }
            #left, #main{
                min-height: 600px;
            }
        </style>
    
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    </head>
    <body>
    <div style="width:100%; height:100%;">
        <div id="header"><tiles:insertAttribute name="header" /></div>
        <div id="left"><tiles:insertAttribute name="left" /></div>
        <div id="main"><tiles:insertAttribute name="body" /></div>
        <div id="footer"><tiles:insertAttribute name="footer" /></div>
    </div>
    
    <script type="text/javascript">
        $(function() {
    
        });
    </script>
    </body>
    </html>

     

     

    # menu.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    <h1>Menu</h1>
    </body>
    </html>

     

    # left.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    
    <h1>Left</h1>
    </body>
    </html>

     

    # header.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    <h1>Header</h1>
    </body>
    </html>

     

    # footer.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    <h1>Footer</h1>
    </body>
    </html>

     

     

    위와 같이 template.jsp에 tiles러 적용할 페이지들의 기본적인 CSS를 작성해주고요. 그 다음 각각의 jsp 파일들을 생성해서 레이아웃을 구성해주었습니다. 이렇게 하고 실행을 하면 어떻게 될까요?

     

     

    실행을 해보면 이런식으로 화면이 그려지게 됩니다. 이렇게 공통 모듈들을 관리해줄 수 있습니다.


     

     

     

     

     

    마무리

     

    오늘은 Spring에서 Tiles 적용하는 법과 사용하는 방법을 알아보았습니다. 만들어진지 오래된 코드이지만 그래도 유용하게 사용할 수 있고 관리가 편리해서 좋더라구요. 하지만 deprecate되어서 더 이상 새로운 버전이 나오고 있지 않아서 spring boot의 경우 2버전대에서만 적용이 가능합니다. spring boot 3버전대에서는 tiles를 대체하여 thymeleaf를 사용하는데요. 다음 시간에는 이를 다뤄보겠습니다.

     

     

     

     

     

     

     

    728x90
    반응형

    댓글