아파치 태피스트리
| 파일:Apache Tapestry logo.svg | |
| 원저자 | 하워드 루이스 십 |
|---|---|
| 개발자 | 아파치 소프트웨어 재단 |
| 저장소 | Tapestry Repository |
| 프로그래밍 언어 | 자바 |
| 엔진 | |
| 운영 체제 | 크로스 플랫폼 (자바 가상 머신) |
| 종류 | 웹 프레임워크 |
| 라이선스 | 아파치 라이선스 2.0 |
| 웹사이트 | tapestry |
아파치 태피스트리(Apache Tapestry)는 오픈 소스 컴포넌트 지향 자바 웹 프레임워크로 개념적으로는 자바서버 페이스와 아파치 위켓과 유사하다.[1] 태피스트리는 하워드 루이스 십이 만들었으며, 2006년 아파치 소프트웨어 재단에 의해 최상위 프로젝트로 채택되었다.[2]
태피스트리는 단순성, 사용 편의성 및 개발자 생산성을 강조한다. 거의 모든 XML 구성을 제거하여 설정보다 관례 패러다임을 따른다.[3] 태피스트리는 웹 페이지의 각 사용자 인터페이스 컴포넌트(객체)와 해당 자바 클래스 간의 강력한 바인딩을 통해 웹 개발에 모듈식 접근 방식을 사용한다. 이 컴포넌트 기반 아키텍처는 웹오브젝트에서 많은 아이디어를 차용했다.[4]
주요 기능
- 라이브 클래스 리로딩
- 태피스트리는 자바 페이지 클래스, 컴포넌트 클래스, 서비스 구현 클래스, HTML 템플릿 및 컴포넌트 속성 파일의 변경 사항을 파일 시스템에서 모니터링하고, 재시작 없이 실행 중인 애플리케이션에 변경 사항을 핫스왑한다. 이는 코드 저장-보기 피드백 주기를 매우 짧게 제공하여 개발자 생산성을 크게 향상시킨다고 주장된다.[5]
- 컴포넌트 기반
- 페이지는 작은 중첩 가능한 컴포넌트로 구성될 수 있으며, 각 컴포넌트는 템플릿과 컴포넌트 클래스를 가진다. 사용자 지정 컴포넌트는 구성하기에 사소한 것으로 알려져 있다.[6]
- 설정보다 관례
- 태피스트리는 애플리케이션을 구성하기 위해 XML 대신 명명 규칙과 어노테이션을 사용한다.[7]
- HTTPSession의 절약적 사용
- HTTPSession을 최소한으로 사용하여, 태피스트리는 클러스터링된 세션 복제 환경에서 고효율적으로 설계되었다.[8]
- Post/Redirect/Get
- 대부분의 양식 제출은 Post/Redirect/Get (PRG) 패턴을 따르며, 이는 다중 양식 제출 오류를 줄이고 URL을 더 친근하게 만들고 북마크 가능하게 하며, 브라우저의 뒤로가기 및 새로고침 버튼이 정상적으로 작동하도록 한다.[9]
- 제어의 역전(IoC)
- 태피스트리는 구글 주스와 유사하지만, 태피스트리 동작의 거의 모든 측면을 구성하고 교체할 수 있도록 설계된 경량 제어의 역전 계층 위에 구축되었다.[7]
헬로 월드 예제
최소한의 템플릿 태피스트리 애플리케이션은 세 개의 파일만 필요하다:
- HelloWorld.tml
- /helloworld 페이지용 (X)HTML 템플릿. 태피스트리 템플릿은 잘 형성된 (X)HTML 마크업을 포함할 수 있다.
<!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>
- HelloWorld.java
- 템플릿과 연결된 페이지 클래스. 여기서는 템플릿이 접근할 수 있는 *username* 속성만 제공한다.
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이라는 새로운 바이트코드 조작 계층으로 대체했다.[10][11]
클라이언트 측 지원
태피스트리 5 버전 5.3까지는 프로토타입과 script.aculo.us 자바스크립트 프레임워크를 태피스트리 특정 라이브러리와 함께 번들로 제공하여 Ajax 작업을 일급 시민으로 지원했다. 프로토타입/스크립타큘러스 대신 또는 추가로 jQuery를 통합하기 위한 서드 파티 모듈을 사용할 수 있다.
버전 5.4부터 태피스트리는 기본 제공 컴포넌트의 프로토타입 의존성을 제거하는 새로운 자바스크립트 계층을 포함하여, jQuery 또는 다른 자바스크립트 프레임워크를 플러그인할 수 있게 한다.[12]
버전 5.4는 또한 RequireJS 모듈 로딩 시스템을 사용하는 자바스크립트 모듈 지원을 도입했다.
핵심 원칙
태피스트리 프로젝트 문서는 2008년 버전 5부터 모든 태피스트리 개발 결정을 지배하는 네 가지 "원칙"을 언급한다:[13]
- 정적 구조, 동적 동작—페이지 및 컴포넌트 구조는 기본적으로 정적이어서 대규모 페이지 및 컴포넌트 트리를 구성(및 세션 메모리에 저장)할 필요가 없다.
- 적응형 API—프레임워크가 코드에 적응하도록 설계되었으며, 코드가 프레임워크에 적응하도록 하지 않는다.
- 공개 API와 내부 API 구분—모든 API는 필수적으로 공개된 것을 제외하고는 명시적으로 "내부"(비공개)이다.
- 하위 호환성 보장—태피스트리 개발자들은 태피스트리의 최신 버전으로 업그레이드하는 것이 항상 쉬울 것을 보장하기 위해 노력한다고 알려져 있다.
비판
태피스트리는 주요 버전 간의 하위 호환성이 부족하다는 비판을 받아왔으며, 특히 버전 4에서 버전 5로의 전환에서 기존 애플리케이션을 위한 깔끔한 마이그레이션 경로가 없었다는 점이 지적되었다.[14] 프로젝트 팀원들은 이를 과거 태피스트리 사용자들에게 큰 문제였음을 인정했으며, 하위 호환성은 태피스트리가 앞으로 나아갈 주요 설계 목표가 되었다. 버전 5 개발 초기부터 하위 호환성은 태피스트리의 네 가지 새로운 "핵심 원칙" 중 하나로T 지정되었고, 나머지 세 가지 중 두 가지는 하위 호환성을 희생하지 않고 프레임워크의 진화를 가능하게 하기 위함이었다. 프로젝트 팀원들은 5.0 이후의 모든 태피스트리 릴리스가 높은 하위 호환성을 가졌다고 주장한다.
태피스트리 5에 대한 초기 비판은 문서 부족을 언급하기도 했다. 프로젝트 팀원들은 이제 완전히 개정되고 업데이트된 사용자 가이드 및 기타 문서를 통해 이러한 단점이 크게 해소되었다고 주장한다.
버전 5.0부터 태피스트리는 프로토타입 및 스크립타큘러스 자바스크립트 라이브러리를 번들로 제공했다. 하워드 루이스 십에 따르면, 2008-2009년경에는 이들이 합리적인 선택이었다. 그러나 이후 프로토타입의 인기는 하락했고, jQuery의 인기는 급증했다. 이에 대응하여 태피스트리 커뮤니티는 프로토타입 외에 또는 대신 jQuery를 사용할 수 있도록 하는 모듈을 개발했다. 한편, 현재 버전의 태피스트리인 5.4는 프로토타입에 대한 의존성을 완전히 제거하고, jQuery 또는 프로토타입(또는 잠재적으로 다른 자바스크립트 프레임워크)을 플러그인할 수 있는 호환성 계층으로 대체했다.
다른 프레임워크와의 관계
하워드 루이스 십에 따르면, 태피스트리는 당시에 오브젝티브-C로 작성되었고 비공개 소스였던 웹오브젝트에서 발견된 일반적인 개념과 접근 방식을 자바로 구현하려는 시도로 처음 고안되었다.[15]
아파치 위켓의 창시자 조나단 로크에 따르면, 아파치 위켓은 초기 버전의 태피스트리의 복잡성에 대한 대응으로 개발되었다고 한다.[16]
자바서버 페이스의 기본 뷰 기술인 페이스릿은 "산업 표준인 자바서버 페이스를 기반으로 하는 태피스트리 같은 프레임워크"의 필요성을 채우려는 시도로, 초기 버전의 태피스트리에서 영감을 받았다고 알려져 있다.[17][18]
역사
| 버전 | 날짜 | 설명 |
|---|---|---|
| 1.0 | 2000 | 하워드 루이스 십이 내부 사용을 위해 개발 |
| 2.0 | 2002-04 | GNU 약소 일반 공중 사용 허가서에 따라 소스포지에서 처음으로 제공됨.[19] |
| 3.0 | 2004-04 | 아파치 산하 자카르타 서브프로젝트로 첫 릴리스.[20] |
| 4.0 | 2006-01 | JDK 1.5 어노테이션, 새로운 입력 유효성 검사 서브시스템, 향상된 오류 보고 지원 도입[21] |
| 5.0 | 2008-12 | 태피스트리 4에서 거의 완전히 재작성되었으며, 설정보다 관례를 강조하는 새로운 POJO 기반 컴포넌트 모델을 도입하고, Hivemind를 새로운 노-XML 제어 역전 계층으로 대체했다. |
| 5.1 | 2009-04 | 성능 및 메모리 개선, 자동 GZIP 압축, 자바스크립트 집계 기능이 추가되었지만 태피스트리 5.0과 하위 호환성을 유지했다. |
| 5.2 | 2010-12 | JSR 303 빈 유효성 검사가 추가되었다.[22] 서비스 구현으로 라이브 클래스 리로딩이 확장되었다. 페이지 풀링이 제거되었다.[23] |
| 5.3 | 2011-11 | HTML5 DOCTYPE 지원, 주입을 위한 JSR-330 어노테이션 지원,[24] 성능 및 메모리 개선, 새로운 컴포넌트 추가, JavaAssist에서 ASM 바이트코드 조작으로 전환 |
| 5.3.1 - 5.3.8 | 2012-2014 | 버그 수정 및 사소한 개선 사항 |
| 5.4-5.4.5 | 2015-2019 | 주요 클라이언트 측 개선. 교체 가능한 jQuery/프로토타입 지원을 위한 새로운 자바스크립트 계층, 자바스크립트 모듈 시스템을 위해 Require.js 사용, 기본 스타일링을 위해 트위터 부트스트랩 사용.[25] |
| 5.5 | 2020-03 | 현재 안정 버전. 자바 12 바이트코드, 타입스크립트, 부트스트랩 4 지원. |
같이 보기
각주
- Drobiazko, Igor (2012), 《Tapestry 5: Rapid web application development in Java》, Igor Drobiazko, 482쪽, 2014년 12월 15일에 원본 문서에서 보존된 문서, 2013년 1월 20일에 확인함
- Kolesnikov, Alexander (2008년 1월 15일), 《Tapestry 5: Building Web Applications: A step-by-step guide to Java Web development with the developer-friendly Apache Tapestry framework》, 팩트 퍼블리싱, 280쪽, ISBN 978-1-84719-307-0
- Iok Tong, Ka (2007년 1월 1일), 《Enjoying Web Development with Tapestry》 3판, 497쪽, ASIN B00262M3HS
- Lewis Ship, Howard (2004), 《Tapestry in Action》, 매닝, 580쪽, ISBN 1932394117
내용주
- ↑ “Howard Lewis Ship of Tapestry interview [part 1] (2012-10-22)”. 2013년 1월 22일에 원본 문서에서 보존된 문서. 2013년 1월 28일에 확인함.
- ↑ Drobiazko 2012, p. 1.
- ↑ “Tapestry Central: Tapestry 5 Updates”. 2006년 7월 24일.
- ↑ Tapestry in Action - Preface by Howard Lewis Ship
- ↑ “Class Reloading - Apache Tapestry”.
- ↑ Drobiazko 2012, p. 20.
- ↑ 가 나 Drobiazko 2012, p. 7.
- ↑ “Performance and Clustering - Apache Tapestry”.
- ↑ “Forms and Validation - Apache Tapestry”.
- ↑ “Meeting Plastic I: Introduction | Java Magic”. 2011년 4월 18일.
- ↑ “[asm] Plastic: An ASM wrapper for Tapestry 5.3”. 2013년 6월 18일에 원본 문서에서 보존된 문서. 2013년 2월 21일에 확인함.
- ↑ “Tapestry Central: Zeroing in on Tapestry 5.4”. 2012년 10월 19일.
- ↑ “Principles”. 2010년 12월 21일. 2012년 10월 12일에 원본 문서에서 보존된 문서. 2012년 10월 12일에 확인함.
- ↑ “Tapestry5 future compatiblity [sic]”. 2009년 4월 30일. 2013년 1월 21일에 원본 문서에서 보존된 문서. 2013년 1월 21일에 확인함.
- ↑ “DevRates | Howard Lewis Ship of Tapestry interview [part 1]”. 2013년 1월 22일에 원본 문서에서 보존된 문서. 2013년 1월 28일에 확인함.
- ↑ “Wicket: Do we need yet another presentation layer framework?”. 《www.theserverside.com》. 2004년 9월 9일에 원본 문서에서 보존된 문서. 2022년 1월 11일에 확인함.
- ↑ “Facelets: JavaServer Facelets”. 《facelets.dev.java.net》. 2007년 7월 6일에 원본 문서에서 보존된 문서. 2022년 1월 11일에 확인함.
- ↑ “JSF Central - Inside Facelets Part 1: An Introduction”. 《www.jsfcentral.com》. 2013년 1월 13일에 원본 문서에서 보존된 문서. 2022년 1월 11일에 확인함.
- ↑ “Tapestry: Java Web Components Release 2.0 is Out”. 2013년 1월 20일에 확인함.
- ↑ “Tapestry 3.0 Final Release”. 2013년 1월 20일에 확인함.
- ↑ “Tapestry 4.0 Released”. 2013년 1월 20일에 확인함.
- ↑ “Tapestry and JSR-303 Bean Validation API”. 2010년 1월 4일. 2010년 4월 16일에 원본 문서에서 보존된 문서. 2010년 3월 13일에 확인함.
- ↑ “Announcing Tapestry 5.2”. 2010년 12월 17일. 2012년 11월 14일에 원본 문서에서 보존된 문서. 2012년 11월 14일에 확인함.
- ↑ “Using JSR 330 standard annotations - Apache Tapestry”.
- ↑ “JavaScript Rewrite”. 2012년 11월 14일에 원본 문서에서 보존된 문서. 2013년 1월 20일에 확인함.
외부 링크
- 모듈:Official_website 90번째 줄에서 Lua 오류: attempt to index field 'wikibase' (a nil value).
모듈:Authority_control 159번째 줄에서 Lua 오류: attempt to index field 'wikibase' (a nil value).
- 스크립트 오류가 있는 문서
- 잘못된 파일 링크가 포함된 문서
- 위키데이터 속성 P18을 사용하는 문서
- 위키데이터 속성 P41을 사용하는 문서
- 위키데이터 속성 P94를 사용하는 문서
- 위키데이터 속성 P117을 사용하는 문서
- 위키데이터 속성 P154를 사용하는 문서
- 위키데이터 속성 P213을 사용하는 문서
- 위키데이터 속성 P227을 사용하는 문서
- 위키데이터 속성 P242를 사용하는 문서
- 위키데이터 속성 P244를 사용하는 문서
- 위키데이터 속성 P245를 사용하는 문서
- 위키데이터 속성 P268을 사용하는 문서
- 위키데이터 속성 P269를 사용하는 문서
- 위키데이터 속성 P271을 사용하는 문서
- 위키데이터 속성 P347을 사용하는 문서
- 위키데이터 속성 P349를 사용하는 문서
- 위키데이터 속성 P350을 사용하는 문서
- 위키데이터 속성 P373을 사용하는 문서
- 위키데이터 속성 P380을 사용하는 문서
- 위키데이터 속성 P396을 사용하는 문서
- 위키데이터 속성 P409를 사용하는 문서
- 위키데이터 속성 P428을 사용하는 문서
- 위키데이터 속성 P434를 사용하는 문서
- 위키데이터 속성 P435를 사용하는 문서
- 위키데이터 속성 P436을 사용하는 문서
- 위키데이터 속성 P454를 사용하는 문서
- 위키데이터 속성 P496을 사용하는 문서
- 위키데이터 속성 P549를 사용하는 문서
- 위키데이터 속성 P650을 사용하는 문서
- 위키데이터 속성 P651을 사용하는 문서
- 위키데이터 속성 P691을 사용하는 문서
- 위키데이터 속성 P716을 사용하는 문서
- 위키데이터 속성 P781을 사용하는 문서
- 위키데이터 속성 P791을 사용하는 문서
- 위키데이터 속성 P864를 사용하는 문서
- 위키데이터 속성 P865를 사용하는 문서
- 위키데이터 속성 P886을 사용하는 문서
- 위키데이터 속성 P902를 사용하는 문서
- 위키데이터 속성 P906을 사용하는 문서
- 위키데이터 속성 P947을 사용하는 문서
- 위키데이터 속성 P950을 사용하는 문서
- 위키데이터 속성 P966을 사용하는 문서
- 위키데이터 속성 P982를 사용하는 문서
- 위키데이터 속성 P1003을 사용하는 문서
- 위키데이터 속성 P1004를 사용하는 문서
- 위키데이터 속성 P1005를 사용하는 문서
- 위키데이터 속성 P1006을 사용하는 문서
- 위키데이터 속성 P1015를 사용하는 문서
- 위키데이터 속성 P1045를 사용하는 문서
- 위키데이터 속성 P1048을 사용하는 문서
- 위키데이터 속성 P1053을 사용하는 문서
- 위키데이터 속성 P1146을 사용하는 문서
- 위키데이터 속성 P1153을 사용하는 문서
- 위키데이터 속성 P1157을 사용하는 문서
- 위키데이터 속성 P1186을 사용하는 문서
- 위키데이터 속성 P1225를 사용하는 문서
- 위키데이터 속성 P1248을 사용하는 문서
- 위키데이터 속성 P1273을 사용하는 문서
- 위키데이터 속성 P1315를 사용하는 문서
- 위키데이터 속성 P1323을 사용하는 문서
- 위키데이터 속성 P1330을 사용하는 문서
- 위키데이터 속성 P1362를 사용하는 문서
- 위키데이터 속성 P1368을 사용하는 문서
- 위키데이터 속성 P1375를 사용하는 문서
- 위키데이터 속성 P1407을 사용하는 문서
- 위키데이터 속성 P1556을 사용하는 문서
- 위키데이터 속성 P1584를 사용하는 문서
- 위키데이터 속성 P1695를 사용하는 문서
- 위키데이터 속성 P1707을 사용하는 문서
- 위키데이터 속성 P1736을 사용하는 문서
- 위키데이터 속성 P1886을 사용하는 문서
- 위키데이터 속성 P1890을 사용하는 문서
- 위키데이터 속성 P1907을 사용하는 문서
- 위키데이터 속성 P1908을 사용하는 문서
- 위키데이터 속성 P1960을 사용하는 문서
- 위키데이터 속성 P1986을 사용하는 문서
- 위키데이터 속성 P2041을 사용하는 문서
- 위키데이터 속성 P2163을 사용하는 문서
- 위키데이터 속성 P2174를 사용하는 문서
- 위키데이터 속성 P2268을 사용하는 문서
- 위키데이터 속성 P2349를 사용하는 문서
- 위키데이터 속성 P2418을 사용하는 문서
- 위키데이터 속성 P2456을 사용하는 문서
- 위키데이터 속성 P2484를 사용하는 문서
- 위키데이터 속성 P2558을 사용하는 문서
- 위키데이터 속성 P2750을 사용하는 문서
- 위키데이터 속성 P2980을 사용하는 문서
- 위키데이터 속성 P3223을 사용하는 문서
- 위키데이터 속성 P3233을 사용하는 문서
- 위키데이터 속성 P3348을 사용하는 문서
- 위키데이터 속성 P3372를 사용하는 문서
- 위키데이터 속성 P3407을 사용하는 문서
- 위키데이터 속성 P3430을 사용하는 문서
- 위키데이터 속성 P3544를 사용하는 문서
- 위키데이터 속성 P3562를 사용하는 문서
- 위키데이터 속성 P3563을 사용하는 문서
- 위키데이터 속성 P3601을 사용하는 문서
- 위키데이터 속성 P3723을 사용하는 문서
- 위키데이터 속성 P3788을 사용하는 문서
- 위키데이터 속성 P3829를 사용하는 문서
- 위키데이터 속성 P3863을 사용하는 문서
- 위키데이터 속성 P3920을 사용하는 문서
- 위키데이터 속성 P3993을 사용하는 문서
- 위키데이터 속성 P4038을 사용하는 문서
- 위키데이터 속성 P4055를 사용하는 문서
- 위키데이터 속성 P4114를 사용하는 문서
- 위키데이터 속성 P4143을 사용하는 문서
- 위키데이터 속성 P4186을 사용하는 문서
- 위키데이터 속성 P4423을 사용하는 문서
- 위키데이터 속성 P4457을 사용하는 문서
- 위키데이터 속성 P4534를 사용하는 문서
- 위키데이터 속성 P4535를 사용하는 문서
- 위키데이터 속성 P4581을 사용하는 문서
- 위키데이터 속성 P4613을 사용하는 문서
- 위키데이터 속성 P4955를 사용하는 문서
- 위키데이터 속성 P5034를 사용하는 문서
- 위키데이터 속성 P5226을 사용하는 문서
- 위키데이터 속성 P5288을 사용하는 문서
- 위키데이터 속성 P5302를 사용하는 문서
- 위키데이터 속성 P5321을 사용하는 문서
- 위키데이터 속성 P5368을 사용하는 문서
- 위키데이터 속성 P5504를 사용하는 문서
- 위키데이터 속성 P5587을 사용하는 문서
- 위키데이터 속성 P5736을 사용하는 문서
- 위키데이터 속성 P5818을 사용하는 문서
- 위키데이터 속성 P6213을 사용하는 문서
- 위키데이터 속성 P6734를 사용하는 문서
- 위키데이터 속성 P6792를 사용하는 문서
- 위키데이터 속성 P6804를 사용하는 문서
- 위키데이터 속성 P6829를 사용하는 문서
- 위키데이터 속성 P7293을 사용하는 문서
- 위키데이터 속성 P7303을 사용하는 문서
- 위키데이터 속성 P7314를 사용하는 문서
- 위키데이터 속성 P7902를 사용하는 문서
- 위키데이터 속성 P8034를 사용하는 문서
- 위키데이터 속성 P8189를 사용하는 문서
- 위키데이터 속성 P8381을 사용하는 문서
- 위키데이터 속성 P8671을 사용하는 문서
- 위키데이터 속성 P8980을 사용하는 문서
- 위키데이터 속성 P9070을 사용하는 문서
- 위키데이터 속성 P9692를 사용하는 문서
- 위키데이터 속성 P9725를 사용하는 문서
- 위키데이터 속성 P9984를 사용하는 문서
- 위키데이터 속성 P10020을 사용하는 문서
- 위키데이터 속성 P10299를 사용하는 문서
- 위키데이터 속성 P10608을 사용하는 문서
- 위키데이터 속성 P10832를 사용하는 문서
- 위키데이터 속성 P11249를 사용하는 문서
- 위키데이터 속성 P11646을 사용하는 문서
- 위키데이터 속성 P11729를 사용하는 문서
- 위키데이터 속성 P12204를 사용하는 문서
- 위키데이터 속성 P12362를 사용하는 문서
- 위키데이터 속성 P12754를 사용하는 문서
- 위키데이터 속성 P13049를 사용하는 문서
- 아파치 소프트웨어 재단 프로젝트
- 웹 프레임워크
- 자바 플랫폼, 엔터프라이즈 에디션