BackEnd/Spring&SpringBoot
[Spring] SiteMesh란?
Systema
2025. 4. 5. 22:25
1. SiteMesh란?
SiteMesh는 Java 기반 웹 애플리케이션에서 공통 레이아웃을 적용하기 위한 필터 기반 데코레이터
프레임워크.
2. 데코레이터 패턴이란?
기존 객체의 기능을 변경하지 않고, 동적으로 기능을 추가하거나 확장할 수 있게 하는 패턴
3. SiteMesh의 주요 개념
개념 | 설명 |
Decorator | 페이지에 입힐 공통 레이아웃 (보통 layout.jsp) |
Content | 실제 사용자 컨텐츠 (board.jsp, main.jsp 등) |
Filter | 웹 요청 시 페이지를 가로채서 레이아웃을 적용 |
Tag | <sitemesh:write property="title"/> 등으로 컨텐츠 위치 지정 |
4. SiteMesh의 동작 방식
- 동작방식
요청: /board/list.jsp
- 사용자는 /board/list.jsp를 요청함
- SiteMesh Filter가 요청을 가로채서 내부적으로 렌더링 시작
- list.jsp의 내용(본문)을 먼저 생성함
→ 여기서 title, head, body 부분을 추출 - layout.jsp(데코레이터)에 그 내용들을 끼워 넣음:
- <sitemesh:write property="title"/> → list.jsp의 <title>로 채움
- <sitemesh:write property="body"/> → list.jsp의 본문 내용으로 채움
- 완성된 페이지를 사용자에게 전달
- Spring MVC의 ViewResolver와는 별개로 동작함
- 설정 파일 (decorators.xml) 또는 Java Config를 통해 URL 패턴 매핑 가능
5. SiteMesh의 장점
장점 | 설명 |
공통 레이아웃 관리 용이 | header, footer 중복 제거 |
유지보수 편리 | 전체 UI 변경 시 layout.jsp만 수정하면 됨 |
디자인 일관성 | 모든 페이지가 동일한 틀을 가짐 |
적용 간단 | 복잡한 설정 없이도 빠르게 도입 가능 |
Spring MVC와 호환 가능 | filter 기반이라 MVC 설정과 충돌 없음 |
6. SiteMesh 3.x vs 2.x 설정 방식 비교
항목 | SiteMesh 2.x (XML 설정) | SiteMesh 3.x (Java 설정) |
설정 파일 | decorators.xml | Java 클래스 (SiteMeshFilter 설정) |
레이아웃 매핑 방식 | XML 기반 URL 패턴 | 코드 기반 URL 패턴 |
유연성/동적 처리 | 제한적 (고정된 설정) | 매우 유연 (조건별 설정 가능) |
커스터마이징 | 복잡하고 제한적 | 필터 체인 및 커스텀 파서 등 쉬움 |
초기화 방식 | web.xml 필터 등록 | FilterRegistrationBean 또는 Java Config |
적용 대상 | JSP 중심 | HTML5, Thymeleaf 등도 OK |
- 2.x는 전통적인 XML 설정 기반
- 3.x는 Java 기반 설정과 더 유연한 확장성 지원
SiteMesh 2.x 예제 (XML 설정 기반)
decorators.xml
<decorators defaultdir="/WEB-INF/decorators">
<decorator name="default" page="layout.jsp">
<pattern>/*</pattern>
</decorator>
</decorators>
web.xml
<filter>
<filter-name>sitemesh</filter-name>
<filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
SiteMesh 3.x 예제 (Java 설정 기반)
SiteMeshConfig.java
import org.sitemesh.builder.SiteMeshFilterBuilder;
import org.sitemesh.config.ConfigurableSiteMeshFilter;
import org.sitemesh.builder.SiteMeshFilterBuilder;
import org.sitemesh.webapp.WebAppContext;
import javax.servlet.annotation.WebFilter;
import javax.servlet.FilterConfig;
@WebFilter("/*")
public class SiteMeshConfig extends ConfigurableSiteMeshFilter {
@Override
protected void applyCustomConfiguration(SiteMeshFilterBuilder builder) {
builder
.setMimeTypes("text/html") // 필터링할 MIME 타입
.addDecoratorPath("/*", "/WEB-INF/decorators/layout.jsp") // 데코레이터 지정
.addExcludedPath("/static/*"); // 제외할 경로
}
}
7. 정리
SiteMesh는 웹 페이지에 일관된 레이아웃을 자동으로 적용해 유지보수를 쉽게 만드는 필터 기반 템플릿 프레임워크다.
** SiteMesh 적용 프로젝트 | https://github.com/LuckyStrike1989/my-spring-framewrok-project