ZK (프레임워크)

**ZK**는 자바로 작성된 오픈 소스 Ajax 웹 애플리케이션 프레임워크로, 거의 프로그래밍 지식이 필요 없이 웹 애플리케이션용 그래픽 사용자 인터페이스를 생성할 수 있다.

ZK의 핵심은 Ajax 기반 사건 기반 메커니즘, 123개 이상의 XUL 및 83개 XHTML 기반 구성 요소, 그리고 사용자 인터페이스 설계를 위한 마크업 언어로 구성된다. 프로그래머는 기능이 풍부한 XUL/XHTML 구성 요소로 애플리케이션 페이지를 설계하고, 최종 사용자 활동에 의해 트리거된 이벤트에 따라 이를 조작한다. 이는 데스크톱 GUI 기반 애플리케이션에서 발견되는 프로그래밍 모델과 유사하다.

ZK는 구성 요소의 콘텐츠 동기화와 클라이언트 및 서버 간의 이벤트 파이프라인 처리가 엔진에 의해 자동으로 수행되고, Ajax 배관 코드가 웹 애플리케이션 개발자에게 완전히 투명한 서버 중심 접근 방식을 사용한다. 따라서 최종 사용자는 데스크톱 애플리케이션과 유사한 상호 작용 및 응답성을 얻는 동시에, 프로그래머의 개발은 데스크톱 애플리케이션과 유사한 단순성을 유지한다.

ZK는 표준 웹 요청-응답 메커니즘을 사용하지 않으며 쿼리 매개 변수가 있는 GET 요청 또는 POST 요청을 통해 서버로 폼 필드를 전송하지 않는다. 대신, 각 화면 위젯의 내부 상태를 업데이트하기 위해 AJAX 요청이 서버로 전송된다. 브라우저에서 ZK는 웹 페이지의 JSON 설명만 다운로드하고 클라이언트 렌더러를 사용하여 이를 UI로 변환한다. 이는 매우 효율적이며 면밀히 검사하면 모든 것을 한 번에 다운로드하지 않는다. 클라이언트와 서버 간의 트래픽을 보면 페이지 렌더링이 최종적으로 완료될 때까지 클라이언트와 브라우저 간에 여러 요청이 오가는 것을 알 수 있다.

선택적 클라이언트 측 사용자 지정은 개발자가 소위 서버+클라이언트 퓨전을 통해 클라이언트 측 리소스를 활용하여 사용자 지정 및 Ajax 트래픽을 줄일 수 있게 한다.

스윙과 유사한 방식의 구성 요소 기반 프로그래밍 외에도, ZK는 ZUML이라는 풍부한 사용자 인터페이스 정의를 위한 마크업 언어를 지원한다.

* ZUML은 비프로그래머 개발자가 사용자 인터페이스를 직관적으로 설계하도록 설계되었다.
* ZUML을 통해 개발자는 모질라 XUL 언어 및 XHTML과 같은 다른 마크업 언어를 동일한 페이지에 원활하게 혼합할 수 있다.
* ZUML을 통해 개발자는 순수 자바 언어(재구성된 BeanShell에 의해 해석됨)로 스크립트를 내장하고 EL 표현식을 사용하여 구성 요소를 조작하고 데이터에 액세스할 수 있다.

## 기능

400px|섬네일|ZK6 기반 iDempiere의 웹 UI 인터페이스
* 단순한 자바. ZK는 "자바스크립트 없는 Ajax" 접근 방식으로 유명하며, 개발자가 Ajax와 자바스크립트에 대한 지식 없이도 풍부한 웹 애플리케이션을 투명하게 구축할 수 있도록 한다.
* 부트스트랩 지원과 함께 반응형 디자인 테마
* HTML 5 및 CSS 3 지원
* 100개 이상의 Ajax 구성 요소는 UI 디자이너에게 엔터프라이즈 Ajax 애플리케이션의 요구 사항을 충족하는 다양한 풍부한 기능 구성 요소를 제공한다.
* ZUML은 풍부한 사용자 인터페이스 디자인을 HTML 페이지 작성과 유사하게 만든다. ZUML은 XML에 사용 가능한 모든 기능을 상속하는 XUL의 변형이며, UI 정의를 런타임 논리에서 분리한다.
* 다중 사건 기반 GUI 디자인 패턴을 지원하는 사건 기반 구성 요소 모델(데스크톱 프로그래밍 모델과 유사).
* 모델-뷰-컨트롤러 (MVC), 모델-뷰-프레젠터 및 모델-뷰-뷰모델 (MVVM) 디자인 패턴 지원
* UI 뷰와 데이터 및 POJO 간의 CRUD 및 상태 동기화를 자동화하는 ZUML 페이지 내 주석을 통한 데이터 바인딩 기능.
* 스프레드시트, 피벗 테이블 및 달력과 같은 애플리케이션 구성 요소.
* 자바 (Beanshell)를 통한 스크립팅 내장 지원. 이는 사용자 인터페이스 및 백엔드 프로그래밍 모두에 통합된 프로그래밍 언어를 사용할 수 있다는 점에서 중요한 이점이다. 자바스크립트 (라이노), 루비 (JRuby), 파이썬 (자이썬) 및 그루비와 같은 다른 언어의 서버측 자바 스크립팅에 대한 선택적 지원.
* JSP 사용자 지정 태그 라이브러리, JSF 지원, 포틀릿 및 서블릿 필터를 통해 기존 웹 프레임워크와 통합을 지원한다. 스프링 및 하이버네이트를 지원한다.
* 프로그래머가 새로운 사용자 지정 UI 컨트롤을 만들 수 있도록 확장 가능하다. 컨트롤 그룹은 매크로 구성 요소로 재사용할 수 있다.
* ZK 차트를 사용한 광범위한 차트 작성

## XUL과의 차이점
* ZK는 HTML을 생성하는 서버측 프레임워크이므로 클라이언트측에 게코의 존재 여부에 의존하지 않아 어떤 브라우저에서도 이식 가능하다. ZK는 ZUML (xul 및 xhtml) 서버측 페이지를 입력으로 받아 브라우저용 dhtml을 출력한다.
* ZK는 서버에서 자바로 사용자 인터페이스 논리를 처리한다. 이는 논리를 생성하는 데 사용할 수 있는 스크립팅 엔진 및 애플리케이션 라이브러리 선택의 폭을 넓힌다. dhtml 효과에 대한 서버 로드를 줄이기 위해 클라이언트 측 액션 기능을 사용하여 프레젠테이션 효과를 브라우저에 위임할 수 있다. 단일 애플리케이션 컨테이너에서 서버의 애플리케이션 논리를 실행하면 브라우저에서 DOM을 광범위하게 프로그래밍하는 경우에 비해 교차 브라우저 및 브라우저 버전 테스트 양이 줄어든다.
* ZK와 XUL은 구성 요소의 중복되는 부분 집합을 가지고 있지만, ZK는 자체적인 고유한 구성 요소 집합을 가지고 있다. 구성 요소 라이브러리는 사용자 지정 구성 요소로 확장될 수 있다. 매크로 구성 요소는 구성 요소의 복합체로 정의될 수 있다.
* ZK는 서버측 데이터 바인딩 주석을 제공하여 UI 구성 요소를 서버측 데이터에 선언적으로 바인딩한다.
* 룩 앤드 필 차이.

## 시스템 요구 사항
* JRE 버전 1.5 이상
* 서블릿 2.3 이상을 지원하는 웹 서버

## 프로그래밍 기술의 전제 조건

### 필수
* 자바 또는 그루비, 라이노 (자바 자바스크립트), JRuby (자바 루비) 또는 자이썬 (자바 파이썬)과 같은 자바 스크립팅 엔진 언어의 기본 지식
* HTML 및 XUL의 기본 지식

### 선택 사항
* 연결 논리 (서버에서 실행)를 작성하기 위한 스크립팅 언어 지식:
** BeanShell (자바 인터프리터), 자바스크립트, 그루비, 루비, 스칼라 및 파이썬
* 객체 지향 프로그래밍
* 서블릿 프로그래밍
* Ajax
* 자바스크립트 (클라이언트 측)
* 선언적 데이터 바인딩
* JSTL 스타일 표현 언어

## ZUML
**ZUML** (ZK 사용자 인터페이스 마크업 언어)은 풍부한 사용자 인터페이스 정의를 위한 마크업 언어이다.
* ZUML은 비프로그래머가 ZUML 마크업을 사용하여 사용자 인터페이스를 효율적으로 설계할 수 있도록 설계되었다.
* ZUML을 통해 개발자는 모질라 XUL 언어 및 XHTML과 같은 다른 마크업 언어를 동일한 페이지에 원활하게 혼합할 수 있다.
* ZUML을 통해 개발자는 순수 자바 언어(재구성된 BeanShell에 의해 해석됨)로 스크립트를 내장하고 EL 표현식을 사용하여 구성 요소를 조작하고 데이터에 액세스할 수 있다.
* ZUML은 ZK에 의해 지원된다.
* 공식 문서: ZUML 참조

## 클라이언트 측 기술

ZK는 서버 중심 프레임워크이다. 기술적으로 클라이언트 측 구현에 대해 알 필요가 없다. 이는 자바 모바일 VM에서 ZK 모바일이 실행되는 방식이다.

ZK 5.0부터 소위 **서버+클라이언트 퓨전** 아키텍처가 도입되었다. 개발자는 원하는 경우 클라이언트 측 위젯에 직접 액세스할 수 있다. ZK 클라이언트 엔진은 jQuery를 기반으로 한다. 기술적으로 jQuery 호환 라이브러리 및 위젯을 사용할 수 있다.

## 추가 기능

## 같이 보기

* 리치 웹 애플리케이션 프레임워크 목록
* 자바스크립트 프레임워크 비교
* Ajax 프레임워크 목록
* 자바스크립트 기반 위젯 툴킷 목록

## 각주

## 외부 링크

* 

분류:자바 플랫폼
분류:웹 프레임워크
분류:자바 라이브러리
분류:자바 플랫폼, 엔터프라이즈 에디션
분류:Ajax
분류:리치 인터넷 애플리케이션 프레임워크