| 원저자 | 하워드 루이스 십 |
|---|---|
| 개발자 | 아파치 소프트웨어 재단 |
| 안정화 버전 | |
| 저장소 | Tapestry Repository |
| 프로그래밍 언어 | 자바 |
| 운영 체제 | 크로스 플랫폼 (자바 가상 머신) |
| 종류 | 웹 프레임워크 |
| 라이선스 | 아파치 라이선스 2.0 |
| 웹사이트 | tapestry |
아파치 태피스트리(Apache Tapestry)는 오픈 소스 컴포넌트 지향 자바 웹 프레임워크로 개념적으로는 자바서버 페이스와 아파치 위켓과 유사하다. 태피스트리는 하워드 루이스 십이 만들었으며, 2006년 아파치 소프트웨어 재단에 의해 최상위 프로젝트로 채택되었다.
태피스트리는 단순성, 사용 편의성 및 개발자 생산성을 강조한다. 거의 모든 XML 구성을 제거하여 설정보다 관례 패러다임을 따른다. 태피스트리는 웹 페이지의 각 사용자 인터페이스 컴포넌트(객체)와 해당 자바 클래스 간의 강력한 바인딩을 통해 웹 개발에 모듈식 접근 방식을 사용한다. 이 컴포넌트 기반 아키텍처는 웹오브젝트에서 많은 아이디어를 차용했다.
최소한의 템플릿 태피스트리 애플리케이션은 세 개의 파일만 필요하다:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd">
<body>
<p>Hello, ${username}</p>
</body>
</html>
package org.example.demo.pages;
/** A page class (automatically associated with the template file of the same name) */
public class HelloWorld {
/** An ordinary getter */
public String getUsername() {
return "World";
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>Tapestry Example</display-name>
<context-param>
<!-- Tell Tapestry 5 where to look for pages, components and mixins -->
<param-name>tapestry.app-package</param-name>
<param-value>org.example.demo</param-value>
</context-param>
<filter>
<!-- Define the Tapestry servlet filter -->
<filter-name>app</filter-name>
<filter-class>org.apache.tapestry5.TapestryFilter</filter-class>
</filter>
<filter-mapping>
<!-- Tell the servlet container which requests to send to the Tapestry servlet filter -->
<filter-name>app</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
태피스트리는 런타임에 페이지 및 컴포넌트 클래스를 변환하기 위해 바이트코드 조작을 사용한다. 이 접근 방식은 페이지 및 컴포넌트 클래스를 간단한 POJO로 작성할 수 있게 하며, 몇 가지 명명 규칙과 어노테이션이 클래스 로드 시간에 상당한 추가 동작을 유발할 수 있다. 태피스트리 버전 5.0, 5.1 및 5.2는 자바시스트 바이트코드 조작 라이브러리를 사용했다. 이후 버전에서는 자바시스트를 ObjectWeb ASM을 기반으로 하는 Plastic이라는 새로운 바이트코드 조작 계층으로 대체했다.
태피스트리 5 버전 5.3까지는 프로토타입과 script.aculo.us 자바스크립트 프레임워크를 태피스트리 특정 라이브러리와 함께 번들로 제공하여 Ajax 작업을 일급 시민으로 지원했다. 프로토타입/스크립타큘러스 대신 또는 추가로 jQuery를 통합하기 위한 서드 파티 모듈을 사용할 수 있다.
버전 5.4부터 태피스트리는 기본 제공 컴포넌트의 프로토타입 의존성을 제거하는 새로운 자바스크립트 계층을 포함하여, jQuery 또는 다른 자바스크립트 프레임워크를 플러그인할 수 있게 한다.
버전 5.4는 또한 RequireJS 모듈 로딩 시스템을 사용하는 자바스크립트 모듈 지원을 도입했다.
태피스트리 프로젝트 문서는 2008년 버전 5부터 모든 태피스트리 개발 결정을 지배하는 네 가지 "원칙"을 언급한다:
태피스트리는 주요 버전 간의 하위 호환성이 부족하다는 비판을 받아왔으며, 특히 버전 4에서 버전 5로의 전환에서 기존 애플리케이션을 위한 깔끔한 마이그레이션 경로가 없었다는 점이 지적되었다. 프로젝트 팀원들은 이를 과거 태피스트리 사용자들에게 큰 문제였음을 인정했으며, 하위 호환성은 태피스트리가 앞으로 나아갈 주요 설계 목표가 되었다. 버전 5 개발 초기부터 하위 호환성은 태피스트리의 네 가지 새로운 "핵심 원칙" 중 하나로T 지정되었고, 나머지 세 가지 중 두 가지는 하위 호환성을 희생하지 않고 프레임워크의 진화를 가능하게 하기 위함이었다. 프로젝트 팀원들은 5.0 이후의 모든 태피스트리 릴리스가 높은 하위 호환성을 가졌다고 주장한다.
태피스트리 5에 대한 초기 비판은 문서 부족을 언급하기도 했다. 프로젝트 팀원들은 이제 완전히 개정되고 업데이트된 사용자 가이드 및 기타 문서를 통해 이러한 단점이 크게 해소되었다고 주장한다.
버전 5.0부터 태피스트리는 프로토타입 및 스크립타큘러스 자바스크립트 라이브러리를 번들로 제공했다. 하워드 루이스 십에 따르면, 2008-2009년경에는 이들이 합리적인 선택이었다. 그러나 이후 프로토타입의 인기는 하락했고, jQuery의 인기는 급증했다. 이에 대응하여 태피스트리 커뮤니티는 프로토타입 외에 또는 대신 jQuery를 사용할 수 있도록 하는 모듈을 개발했다. 한편, 현재 버전의 태피스트리인 5.4는 프로토타입에 대한 의존성을 완전히 제거하고, jQuery 또는 프로토타입(또는 잠재적으로 다른 자바스크립트 프레임워크)을 플러그인할 수 있는 호환성 계층으로 대체했다.
하워드 루이스 십에 따르면, 태피스트리는 당시에 오브젝티브-C로 작성되었고 비공개 소스였던 웹오브젝트에서 발견된 일반적인 개념과 접근 방식을 자바로 구현하려는 시도로 처음 고안되었다.
아파치 위켓의 창시자 조나단 로크에 따르면, 아파치 위켓은 초기 버전의 태피스트리의 복잡성에 대한 대응으로 개발되었다고 한다.
자바서버 페이스의 기본 뷰 기술인 페이스릿은 "산업 표준인 자바서버 페이스를 기반으로 하는 태피스트리 같은 프레임워크"의 필요성을 채우려는 시도로, 초기 버전의 태피스트리에서 영감을 받았다고 알려져 있다.
| 버전 | 날짜 | 설명 |
|---|---|---|
| 1.0 | 2000 | 하워드 루이스 십이 내부 사용을 위해 개발 |
| 2.0 | 2002-04 | GNU 약소 일반 공중 사용 허가서에 따라 소스포지에서 처음으로 제공됨. |
| 3.0 | 2004-04 | 아파치 산하 자카르타 서브프로젝트로 첫 릴리스. |
| 4.0 | 2006-01 | JDK 1.5 어노테이션, 새로운 입력 유효성 검사 서브시스템, 향상된 오류 보고 지원 도입 |
| 5.0 | 2008-12 | 태피스트리 4에서 거의 완전히 재작성되었으며, 설정보다 관례를 강조하는 새로운 POJO 기반 컴포넌트 모델을 도입하고, Hivemind를 새로운 노-XML 제어 역전 계층으로 대체했다. |
| 5.1 | 2009-04 | 성능 및 메모리 개선, 자동 GZIP 압축, 자바스크립트 집계 기능이 추가되었지만 태피스트리 5.0과 하위 호환성을 유지했다. |
| 5.2 | 2010-12 | JSR 303 빈 유효성 검사가 추가되었다. 서비스 구현으로 라이브 클래스 리로딩이 확장되었다. 페이지 풀링이 제거되었다. |
| 5.3 | 2011-11 | HTML5 DOCTYPE 지원, 주입을 위한 JSR-330 어노테이션 지원, 성능 및 메모리 개선, 새로운 컴포넌트 추가, JavaAssist에서 ASM 바이트코드 조작으로 전환 |
| 5.3.1 - 5.3.8 | 2012-2014 | 버그 수정 및 사소한 개선 사항 |
| 5.4-5.4.5 | 2015-2019 | 주요 클라이언트 측 개선. 교체 가능한 jQuery/프로토타입 지원을 위한 새로운 자바스크립트 계층, 자바스크립트 모듈 시스템을 위해 Require.js 사용, 기본 스타일링을 위해 트위터 부트스트랩 사용. |
| 5.5 | 2020-03 | 현재 안정 버전. 자바 12 바이트코드, 타입스크립트, 부트스트랩 4 지원. |