아파치 위켓
![]() | |
개발자 | 아파치 소프트웨어 재단 |
---|---|
안정화 버전 | 10.5.0[1] ![]() |
저장소 | github |
프로그래밍 언어 | 자바 |
종류 | 웹 프레임워크 |
라이선스 | 아파치 라이선스 2.0 |
웹사이트 | wicket |
아파치 위켓(Apache Wicket)은 보통 위켓이라고 불리며, 자바 프로그래밍 언어를 위한 컴포넌트 기반 웹 프레임워크로, 개념적으로 자카르타 페이스 및 태피스트리와 유사하다. 이 프레임워크는 조너선 로크가 2004년 4월에 처음 작성했다. 버전 1.0은 2005년 6월에 출시되었다. 2007년 6월에는 아파치 최상위 프로젝트로 승격되었다.[2]
원리
[편집]기존의 모델-뷰-컨트롤러 (MVC) 프레임워크는 전체 요청과 전체 페이지 단위로 작동한다. 각 요청 주기에서 들어오는 요청은 컨트롤러 객체의 메서드에 매핑되며, 이 메서드는 일반적으로 모델에서 데이터를 가져와 특수 템플릿 마크업으로 작성된 뷰를 채움으로써 나가는 응답 전체를 생성한다. 이는 애플리케이션의 흐름을 단순하고 명확하게 유지하지만, 컨트롤러에서의 코드 재사용을 어렵게 만들 수 있다.
반면, 위켓은 상태 유지 GUI 프레임워크(예: 스윙)를 면밀히 본떠 만들어졌다. 위켓 애플리케이션은 컴포넌트 트리로 구성되어 있으며, 스윙 컴포넌트가 마우스 및 키 입력 이벤트에 반응하는 것과 동일한 방식으로 리스너 델리게이트를 사용하여 링크 및 폼에 대한 HTTP 요청에 반응한다. 위켓은 컴포넌트 기반 프레임워크로 분류된다.
설계
[편집]위켓은 템플릿을 위해 순수 XHTML을 사용한다(이는 프레젠테이션과 비즈니스 로직의 명확한 분리를 강제하며, 템플릿을 일반적인 위지위그 디자인 도구로 편집할 수 있게 한다[3]). 각 컴포넌트는 XHTML의 이름 지정된 요소에 바인딩되며, 최종 출력에서 해당 요소를 렌더링하는 역할을 담당한다. 페이지는 단순히 최상위 컨테이너 컴포넌트이며, 정확히 하나의 XHTML 템플릿과 짝을 이룬다. 특별한 태그를 사용하여 개별 컴포넌트 그룹을 패널이라는 단일 컴포넌트로 추상화할 수 있으며, 이 패널은 해당 페이지, 다른 페이지 또는 다른 패널에서도 통째로 재사용할 수 있다.
각 컴포넌트는 자체 모델에 의해 지원되며, 이는 컴포넌트의 상태를 나타낸다. 프레임워크는 컴포넌트가 모델과 어떻게 상호 작용하는지 알지 못하며, 모델은 요청 간에 자동으로 직렬화되고 지속되는 불투명한 객체로 처리된다. 그러나 더 복잡한 모델은 분리 가능하게 만들어져 각 요청 주기 시작 및 끝에서 자체 저장 및 복원을 처리하는 훅을 제공할 수 있다. 위켓은 특정 객체 지속성 또는 ORM 계층을 강제하지 않으므로, 애플리케이션은 종종 하이버네이트 객체, EJB 또는 POJO의 조합을 모델로 사용한다.
위켓에서는 모든 서버 측 상태가 자동으로 관리된다. HttpSession 객체나 유사한 래퍼를 직접 사용하여 상태를 저장해서는 안 된다. 대신 상태는 컴포넌트와 연결된다. 각 서버 측 페이지 컴포넌트는 상태 유지 컴포넌트의 중첩된 계층 구조를 가지며, 각 컴포넌트의 모델은 결국 POJO(Plain Old Java Object)이다.
위켓은 단순함을 지향한다. 위켓에는 배워야 할 설정 파일이 없다. 위켓은 컴포넌트 구조에 대한 일관된 접근 방식을 가진 단순한 클래스 라이브러리이다.
예시
[편집]네 개의 파일로 구성된 헬로 월드 위켓 애플리케이션:
- HelloWorld.html
- XHTML 템플릿.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.3-strict.dtd"
xml:lang="en" lang="en">
<body>
<span wicket:id="message" id="message">Message goes here</span>
</body>
</html>
- HelloWorld.java
- 템플릿에 바인딩될 페이지 컴포넌트. 이 컴포넌트는 다시 자식 컴포넌트(이름이 "message"인 Label 컴포넌트)를 바인딩한다.
package org.wikipedia.wicket;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
public class HelloWorld extends WebPage {
/**
* Constructor
*/
public HelloWorld() {
add(new Label("message", "Hello World!"));
}
}
- HelloWorldApplication.java
- 홈페이지 요청을 HelloWorld 페이지 컴포넌트로 라우팅하는 주 애플리케이션 클래스.
package org.wikipedia.wicket;
import org.apache.wicket.protocol.http.WebApplication;
public class HelloWorldApplication extends WebApplication {
/**
* Constructor.
*/
public HelloWorldApplication() {
}
/**
* @see org.apache.wicket.Application#getHomePage()
*/
public Class getHomePage() {
return HelloWorld.class;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>Wicket Example</display-name>
<filter>
<filter-name>HelloWorldApplication</filter-name>
<filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
<init-param>
<param-name>applicationClassName</param-name>
<param-value>org.wikipedia.wicket.HelloWorldApplication</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>HelloWorldApplication</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
구성요소
[편집]폼, 링크, 리피터 등과 같은 기본 구성요소가 내장되어 있다.
릴리스
[편집]시리즈 | 설명 | 최신 릴리스 | 최신 릴리스 날짜 |
---|---|---|---|
10.x | Javax API에서 Jakarta API로 마이그레이션. 스프링 프레임워크 6을 지원하기 위해 의존성을 업그레이드하여 필수 최소 플랫폼으로 자바 17로 이동하고 자바 21과 호환됨. CGLib은 ByteBuddy로 대체됨.[4] | 10.0.0 | 2024-03-11 |
9.x | 필수 최소 플랫폼으로 자바 11로 이동, JUnit 4에서 5로 마이그레이션, 자바 12 및 13 지원, 페이지 및 데이터 저장소 재작업 및 기타 개선 사항.[5] | 9.16.0 | 2023-11-23 |
8.x | 필수 최소 플랫폼으로 자바 8로 이동. 람다 지원, 필수 서블릿 API 버전 3.1로 이동, 날짜 처리용 새 유형 지원 및 기타 개선 사항.[6] 9.x 버전으로 업그레이드 권장. | 8.14.0 | 2022-01-29 |
7.x | 필수 최소 플랫폼으로 자바 7로 이동, 크로스 사이트 요청 위조 방지, 인라인 이미지 지원. 릴리스는 약 300개의 기능, 개선 사항 및 수정 사항으로 구성.[7] 보안 수정만 제공되며, 9.x 버전으로 업그레이드 권장. | 7.18.0 | 2021-04-02 |
6.x | 필수 최소 플랫폼으로 자바 6로 이동. 즉시 사용 가능한 jQuery 통합, AJAX 요청에 대한 완벽한 제어, 브라우저에서 향상된 이벤트 등록, 대규모 데이터셋 지원, 클라이언트 측 자바스크립트 라이브러리 종속성 관리, 웹소켓 실험적 지원.[8] | 6.30.0 | 2018-12-05 |
1.5.x | 위켓 기능 개선.[9] | 1.5.16 | 2016-08-05 |
1.4.x | 필수 최소 플랫폼으로 자바 5로 이동.[10] | 1.4.23 | 2014-02-06 |
1.3.x | 1.3.7 | 2009-07-30 | |
1.2.x | 1.2.7 | 2008-03-23 | |
1.1.x | 1.1.1 | TBD | |
1.0.x | 1.0.3 | TBD | |
오래된 버전 오래된 버전, 지원 중 최신 버전 최신 미리보기 버전 |
같이 보기
[편집]각주
[편집]- Ceregatti Longo, João Sávio (2013년 8월 26일). 《Instant Apache Wicket 6》 1판. 팩트 퍼블리싱. 54쪽. ISBN 978-1783280018.
- Mader, Jochen (2012년 3월 28일). 《Wicket: Komponentenbasiert und objektorientiert》 1판. 엔트비클러. 220쪽. ISBN 978-3868020816. 2010년 12월 23일에 원본 문서에서 보존된 문서. 2009년 1월 23일에 확인함.
- Vaynberg, Igor (2011년 5월 15일). 《Apache Wicket Cookbook》 1판. 팩트 퍼블리싱. 312쪽. ISBN 978-1-84951-160-5.
- Dashorst, Martijn; Hillenius, Eelco (2008년 9월 15일). 《Wicket in Action》 1판. 매닝 퍼블리케이션즈. 392쪽. ISBN 978-1-932394-98-6.
- Gurumurthy, Karthik (2006년 9월 7일). 《Pro Wicket》 1판. 에이프레스. 328쪽. ISBN 1-59059-722-2. 2010년 12월 23일에 원본 문서에서 보존된 문서. 2009년 1월 23일에 확인함.
내용주
[편집]- ↑ https://github.com/apache/wicket/blob/master/CHANGELOG-10.x; 확인한 날짜: 2025년 5월 7일.
- ↑ Dashorst, Martijn (2007년 7월 20일). “Wicket graduates from Apache Incubation”. 2008년 3월 7일에 확인함.
- ↑ Carleton, Daniel (2007년 10월 12일). “Java Web Development the Wicket Way”. DevX. 2008년 3월 10일에 원본 문서에서 보존된 문서. 2008년 3월 7일에 확인함.
- ↑ Announcing Apache Wicket 10: build modern web applications with Java!. wicket.apache.org. Retrieved on 2024-03-11.
- ↑ Announcing Apache Wicket 9: get into the modern Java world!. wicket.apache.org. Retrieved on 2020-10-05.
- ↑ Announcing Apache Wicket 8: Write Less, Achieve More. wicket.apache.org. Retrieved on 2018-05-22.
- ↑ Apache Wicket v7.0 released. wicket.apache.org. Retrieved on 2018-04-16.
- ↑ Apache Wicket v6.0.0 released. wicket.apache.org. Retrieved on 2020-10-05.
- ↑ Apache Wicket - Apache Wicket releases Wicket 1.5. Wicket.apache.org. Retrieved on 2013-08-13. 보관됨 10월 6, 2014 - 웨이백 머신
- ↑ Apache Wicket - Apache Wicket 1.4 takes typesafety to the next level 보관됨 4월 25, 2012 - 웨이백 머신. Wicket.apache.org. Retrieved on 2013-08-13.
외부 링크
[편집]아파치 위켓 - 공식 웹사이트