제공 :
한빛 네트워크
저자 : Markus Plesser and Daniel Lichtenberger
역자 : 정규현
원문 :
Introducing [fleXive] - A Complementary Approach to Java EE 5 Web Development
웹 애플리케이션을 다루는 아키텍트나 개발자의 일상은 무수한 반복적인 일들로 구성되어 있다. 이것은 개발환경을 셋업 하는 것으로 시작되며, 라이브러리들을 선택하고 다운로드 받는 것 (또는 Maven같은 도구들이 다운로드 하게 만드는 것), 기본적인 빌딩 스크립트를 만드는 것, 그리고 필요한 컴포넌트들을 연결 짓는 작업들이다. 이런 작업들 후에 웹 애플리케이션을 위한 기본적인
스켈레톤 골격이 준비되고, 이후의 코딩을 진행할 수 있다. 이런 일들은 쉽고 자동화 도구들에 의해 효율적으로 다루어질 수 있는 반면에, 사용자를 관리하거나, 실제 사용할
퍼시스턴스(파일 베이스, JDBC, 하이버네이트, JPA등)를 선택하는 것과 민감한 데이터에 대해 보안을 유지하는 데에는 상당한 시간과 노력이 필요하다.
[역자주] 스켈레톤(Skeleton) : 분산객체 애플리케이션 구현에서 사용되는 용어로 서버 쪽에서 커뮤니케이션을 담당하는 객체를 의미한다. 클라이언트 쪽에서 구현요청을 하는 객체를 스텁(Stub)이라 부른다.
[역자주] 퍼시스턴스(Persistence) : Presentation Layer(화면에 보여지는 부분) – Business Logic Layer(비즈니스 로직이 포함된 부분) – Persistence Layer(데이터베이스 연결부분)으로 구성된 애플리케이션의 3-tier 모델에서 데이터베이스 연결부분을 지칭. 물리적으로 JDBC나 ODBC등이라고 생각하면 되나, 데이터베이스 이외에도 플랫 파일, 엑셀등 여러가지 데이터 소스한 범용적인 접근방법을 제공하는 모듈이기 때문에, 다양한 데이터 소스에 대한 범용적인 접근이라는 측면에서 ‘영속성’을 의미하는 Persistence를 사용한다. 컴퓨터공학의 정의는 프로그램에 종속되지 않는 데이터 속성을 의미한다.
이런 이슈들 가운데 일부를 다루는 많은 솔루션이 있지만, 대부분의 경우 몇가지 단점을 가지고 있다. 예를 들어 대단히 훌륭하며 잘 동작하는 Ruby On Rails의 경우 Java나 .Net의 경우 이미 기업표준에 가까운 반면에, 기업에 구현사례가 많지 않다. .Net에 대해서는 파고들 필요가 없지만, (전형적인 자바 환경과는 상당히 다르기 때문이다) Java에 대해서는, 특히 Java EE를 기반으로 한 웹애플리케이션이 프레임워크로 대부분 JSF를 사용하며, 퍼시스턴스 프레임워크는 대개 하이버네이트나 JPA(하이버네이트로 구현된 애플리케이션 서버들에서 쓰이는)를 쓰기 때문에 알아두는 것이 필요하다. 몇가지 기본적인 도구들에 의존해서, 데이터 인스턴스를 생성하고, 읽고, 수정하고, 지울 수 있는 기본적인 양식들을 가지게 될 것이다.
지금까지는 상당히 간단했지만 –권한부여와 인증이 필요하다는 걸 상상해 보라– 단순히 애플리케이션에서 데이터를 사용하는 것이 아니라, 보다 세분화된 유연한 액세스 제한이 필요하다. 머지 않아 당신 스스로 만든 작은 보안 프레임워크 -아마도 JAAS코드에 엮어있는 OSUser나 Acegi같은 오픈 소스 라이브러이에 기반한– 을 쓰는 것을 그만 두어야 할 것이다.
수년간, 저자들은 같은 일들을 하고 또 해왔다. 우리는 여러가지를 배웠는데, 특히 다양한 라이브러리들을 통합하는 능력과 노력뿐만 아니라, 그것들을 주요 장점과 단점들을 알았다. 그리고 이를 통해 프레임워크에 필요한 사항들을 도출하게 되었다.
- 인증부터 보다 세세한 단계의 권한부여에 이르는 보안기능
- 다양한 언어를 지원할 수 있는 데이터유형들
- 버전관리
- 계측적인 데이터 구조
- 워크플로우에 대한 지원
- 세세한 부분까지 조정 할 수 있는 프레임워크
- 특정벤더나 특정기술에 대한 의존 배제
- 다른 애플리케이션과의 상호 운용성
[그림 1] [fleXive] 핵심 컴포넌트
[fleXive]는 순수한 Jave EE 5 애플리케이션이며, 그 핵심은 EJB3 빈들로 이루어져 있으며, 클러스터링된 캐쉬를 사용하는 구성과 일반 상태를 공유한다(Gigaspaces나 Coherence같은 공급자들에 사용될 수 있는 바로 접속가능한 인터페이스와 함께 JBoss Cache 2.X에 대한 틀에 얽매이지 않는 지원을 포함한다.) 반면 웹 레이어는 Facelets, Richfaces / Ajax4JSF 그리고 Dojo 툴킷을 이용한 JSF에 기반을 두고 있다. JPA/Hibernate의 대체 퍼시스턴스로서 [fleXive]는 통합된 ACL기반의 보안, 버전관리, 다언어 데이터 유형에 대한 지원, 상속 그리고 재사용과 같은 여러 장점을 제공하는 자체의 퍼시스턴스 구현체를 가지고 있다. 그 persistence 프레임워크는 그저 객체-관계 맵퍼가 아니라 구문이나 전반적으로 객체 그래프 같은 형태의 X-Path를 사용하여 인스턴스 데이터를 포함하는 일반 객체에 가깝다.
이 모든 것들은 엔진들(엔터프라이즈 자바 빈즈로 구현되어 있는)이라고 불리우며 당신의 프로젝트에서 이용될 수 있다. [fleXive]는 비지지스 로직을 구현해야 하는 애플리케이션 스켈레톤을 생성하여 (Java EE 5에 호환되는 어떤 라이브러리도 사용할 수 있는 자유를 주며, 사전에 만들어진 JSF 유저 인터페이스 컴포넌트 가운데 일부를 사용하여) 당신을 지원한다.
[그림 2] 애플리케이션 구현을 위한 [fleXive]의 구조
[fleXive]를 사용하는 가장 큰 장점은 강력하고, 확장가능한 백엔드 애플리케이션 -데이터 구조를 모델링할 수 있고, 사용자 및 보안관리가 가능하며, 쿼리를 직관적으로 만들어 낼 수 있으며, 검색결과를 서류가방이라 불리우는 구조에 저장할 수 있고, 데이터
인스턴스를 수정할 수 있는- 의 존재이다.
[역자주] 인스턴스(Instance) : 데이터베이스 테이블을 설계할때, 데이터베이스 스키마를 모델로 본다면, 실제로 데이터가 채워지는 각각의 Row (또는 Record)는 이 모델에 기반한 인스턴스로 볼 수 있다. 인스턴스의 사전적 의미는 실제사례를 의미한다.
바닥부터 설계하고 코드를 쓰는 대신에, [fleXive]는 99으로 거슬러 올라가는 매우 숙성되고 인증받는 개념들을 사용한다. 원래는 컨텐츠 관리 시스템을 위한 프레임워크로 기획되었으나, 점차 발전하여 최신의 오픈 소스 프로젝트와 도구들을 통합할 수 있는 다용도
프레임워크가 되었다.
[역자주] 프레임워크(Framework) : 컴퓨터공학 상의 정의는 재사용 가능한 디자인이다. 실제로는 재 사용가능한 컴포넌트와 이를 지원하기 위한 각종 도구의 모음을 예기한다. 예를 들어 Spring같은 것이 프레임워크의 실례이다. 프레임워크는 단순히 컴포넌트의 집합체가 아니라, 컴포넌트간의 상호작용 (디자인패턴 같은 것) 을 포함하는데 반해 라이브러리는 재사용을 위해 일반적으로 이러한 상호작용은 포함하지 않는다.
아직 완벽하지는 않고, 몇 가지 기능들(가져오기/내보내기나 웹서비스 지원)은 여전히 작업 중이지만 프레임워크의 대부분은 매우 안정적이고 견고하며, 곧 실제 용도로 사용가능하게 될 것이다. [fleXive]를 후원하고 개발을 책임지고 있는 독일의 UCS는 오픈소스와 “주는 것이 있는 받는 것이 있다”를 믿기 때문에 LGPL v2.1이나 이상의 라이선스에 기반하여 전체 프레임워크를 공개하기로 결정했다.
[fleXive]가 가지고 있는 대부분의 기능들을 보여주는 백엔드 애플리케이션은 GPL v2이상의 라이선스하에 프레임워크에 기반하여 만들어져 있다. 이것은 [fleXive]의 모든 기능들-데이터 구조정의, 쿼리 제작, 사용자 및 권한관리 등-을 직관적으로 관리하는데 도움을 줄 것이다.
그리고 현재는 우리가 [fleXive]를 유지보수하고 확장시키는 사람들이지만, 긍정적인 피드백과 기능요청, 그리고 도움을 희망한다. 그러한 개발과 문서작업들이 [fleXive]가 웹 애플리케이션 개발에 있어 유용한 선택이 될 수 있게 할 것이다.
우리는 이미 이루어진 것들을 다시 하려 하지 않았지만, 플러그인을 이용한 프레임워크를 확장하는 방법을 제공하고, 즉시 사용할 수 있고 당신의 필요에 쉽게 부응할 수 있는 백엔드 애플리케이션을 제공하여, 최신 기술을 이용한 웹 애플리케이션 개발을 보다 쉽고 빠르게 하고자 했다.
현재 개발 스냅샷과 Release Candidate 1은
http://www.flexive.org/download에서 다운받을 수 있다. 최종 릴리즈는 [fleXive]의 기능들이 완전해지고 버그가 다소간 준 다음에 출시될 것이다. 보다 자세한 정보를 원한다면
로드맵을 참조하기 바란다.
[fleXive] 시작하기
[fleXive]를 사용하기 위한 필요조건은 아주 적다. Java 5 SDK (JSR-223 스크립트를 사용하고자 한다면 Java6), 아파치 Ant 1.7이나 그 이상, MySQL 5.X 데이터베이스, 그리고 Java EE 5 애플리케이션 서버 (현재는
JBoss 4.2.2 GA와
Glassfish v2가
Geronimo 2.1의 사용을 완전하게 지원하고 있다.)가 필요하다.
MySQL을 셋업하는 자세한 정보와 당신의 애플리케이션 서버를 세팅하는 정보는
설치안내나
참고문서에서 찾을 수 있다.
[fleXive]를
다운로드하고 압축을 푼 다음에 아래와 같은 디렉토리 구조를 볼 수 있을 것이다. 최종 릴리즈가 나오기 전까지는 현재의 개발빌드를 사용할 것을 권고한다.
.
|-- META-INF/
|-- build.xml
|-- database.properties
|-- applications/
|-- extlib/
|-- lib/
|-- templates/
이 애플리케이션 폴더는 엔터프라이즈 아카이브 파일(EAR)에 포함되어야 하는 모든 [fleXive] 애플리케이션을 포함하고 있다. 표준 배포본은 이 디렉토리 안에 모든 백엔드 관리 프로그램을 포함하고 있다. EAR로부터 애플리케이션을 제거하기 위해서는 디렉토리로부터 해당 파일을 제거하고, EAR파일을 다시 만들면 된다.
[fleXive]기반의 애플리케이션 컴파일/실행을 위해 필요한 Third-Party 라이브러리 파일은 extlib폴더에 저장되어야 한다. 모든 [fleXive] 자체 라이브러리는 lib폴더 안에 저장된다.
다음 스텝은 database.propertise 파일을 유저의 필요에 맞게 조정하고 (호스트, 포트번호, 사용자이름, 암호), 커맨드 창에서 다음의 명령어를 실행해서 데이터베이스 스키마를 만든다.
ant db.create db.config.create
데이터베이스를 위한 이름입력 프롬프트가 뜬다. 기본값인 fliexive를 사용하려면 그냥 enter를 친다.
새로운 프로젝트를 만들기 위해서는 ant target project.create를 호출해야 한다. 그렇게 하면 새로운 프로젝트 폴더가 (프로젝트 이름은 ant task를 호출할 때, 결정하면 된다.) [fleXive]가 설치되어 있는 폴더(예를 들면 현재의 상위 디렉토리)안에 만들어지게 된다. 예를 들어 products라고 이름 붙여진 프로젝트를 만들기로 하자.
가용한 Ant targets과 [fleXive]애플리케이션 스켈레톤들을 만드는 것에 대해 알고자 한다면 참조문서의
시작하기 섹션을 참조하라.