둘러보기 생략.
 

Anyframe Core

Anyframe Core는 Spring에 다양한 best-of-breed 오픈 소스를 통합 및 확장하여 구성된 어플리케이션 프레임워크이다. Spring은 객체의 라이프 사이클을 관리하고 객체들간의 의존 관계를 최소화할 수 있는 컨테이너를 제공한다. 또한 객체들 간에 공통적으로 사용되는 비기능적인 요소를 개발자의 코드에서 완전히 분리할 수 있는 AOP를 핵심 기능으로 제공한다.
이러한 Spring의 기능을 그대로 활용하여 Anyframe Core는 POJO 기반의 어플리케이션을 개발할 수 있는 상세한 기법과 개발 시 자주 사용되는 기술 공통 서비스를 제공한다.

특징

  • 순수 객체 중심의(POJO) 어플리케이션 개발 지원: 프레임워크로 인해서 기본 설계와 상세 설계가 이중으로 진행되거나, 개발 시 설계 모델이 구현체와 불일치 되는 것을 줄이기 위해 순수 객체 중심의(POJO) 어플리케이션 개발을 지원한다.
  • Dependency Injection을 통한 의존 관계 처리: 인터페이스 중심의 개발을 가이드하고 객체나 컴포넌트간의 참조 관계는 Dependency Injection을 통해 처리함으로써 구현체의 변경에 따른 영향력을 최소화한다.
  • 개발자는 비즈니스 로직에만 집중하여 구현: 로깅, 트랜잭션, 예외처리 등과 같은 비기능 영역에 대한 코드가 업무 기능 개발 영역에서 분리될 수 있도록 함으로써, 개발자는 비즈니스 로직에만 집중하여 구현하도록 한다.
  • 재사용 가능한 기술 공통 서비스 제공: DB 접근 및 SQL 처리, 캐쉬, WAS와 연동 등과 같은 중요 기능에 대해 재사용 가능한 기술 공통 서비스를 제공함으로써 보다 빠르고 안정적인 개발을 지원한다.
  • 선언적으로 트랜잭션 통제: Java EE 환경과 독립적으로 JTA이나 JDBC 데이터 소스에 대해 별도의 트랜잭션 처리를 위한 코딩없이 간단한 설정만으로 선언적으로 트랜잭션을 통제할 수 있는 기능을 지원한다.
  • Singleton, Factory 패턴 등 유용한 패턴 실행 지원: 직접적인 패턴 구현 없이도 Singleton, Factory 패턴 등의 실행을 지원함으로써, 어플리케이션 개발시 인스턴스의 생성 관리, 데이터 무결성 확보 등을 위해 유용한 패턴 등을 직접 구현하는 어려움을 해결해준다.
  • 개발 지원 툴 활용: Anframe Core 기반으로 어플리케이션을 개발할 때 코드 자동 생성, DB I/O 처리 등의 개발 지원 툴을 활용하여 개발 및 테스트를 수행함으로써 사전에 오류 발생을 감지할 수 있다.

주요 기능

Lightweight 컨테이너

Anyframe의 Lightweight 컨테이너는 순수 POJO(Plain Old Java Objects) 기반 개발을 지원하며, 순수 POJO 기반으로 설계/개발된 모듈들을 엮어서 해당 어플리케이션이 제대로 된 기능을 제공할 수 있도록 지원한다. 반면에 EJB와 같은 컨테이너 기반에서 어플리케이션을 개발하기 위해서는 개발자가 해당 컨테이너에 종속된 인터페이스를 구현해야 하거나 정의된 컴포넌트 모델을 그대로 준수해야 한다. 즉, 전형적인 컨테이너는 정의된 개발 모델을 강제하기 때문에 어플리케이션 코드 내에 컨테이너 의존적인 코드가 추가할 수 밖에 없게 된다.

Anyframe의 Lightweight 컨테이너는 다음과 같은 특징을 가지고 있다.

POJO 기반 개발 지원

설계 결과물에 컨테이너 의존적인 코드를 추가하지 않아도 순수 POJO 기반으로 어플리케이션 개발이 가능하도록 지원하다. 즉, Lightweight 컨테이너 기반 개발시 프레임워크로 인한 기본 설계와 상세 설계가 이중으로 진행되거나, 개발시 설계 모델과 구현체가 불일치되는 것을 방지할 수 있다.

Dependency Resolution 지원

어플리케이션 구성 모듈간 의존 관계를 처리하기 위한 방법을 제공한다. 특정 모듈의 코드 내에서 참조할 모듈을 직접적으로 생성하여 참조함으로써 참조 모듈간에 tightly-coupled 되지 않도록 하기 위해, 대부분의 Lightweight 컨테이너들과 마찬가지로 DI(Dependency Injection)을 지원하며, 이외에 DL(Dependency Lookup)도 가능하다.

  • DI란 각 클래스 사이의 의존 관계를 설정 정보를 바탕으로 컨테이너가 자동적으로 연결해주는 것을 말한다. 컨테이너가 참조 관계를 자동적으로 연결시켜주기 때문에 개발자들이 컨테이너 API를 이용하여 의존 관계에 관여할 필요가 없게 되므로 특정 컨테이너의 API에 종속되는 것을 줄일 수 있고 개발자들은 단지 설정 파일에 참조 관계가 필요하다는 정보를 추가적으로 정의해 주기만 하면 된다.
  • 또한 DL은 의존 관계에 놓인 특정 모듈을 사용하기 위해 개발자가 해당 모듈의 소스 코드 내에서 리소스들을 관리하는 컨테이너를 통해 직접적으로 찾는 것을 말한다.
  • Dependency InjectionDependency Injection

    • [1] Dependency Injection : 각 서비스 사이의 의존 관계를 속성 파일을 기반으로 컨테이너가 자동 처리
    • [2] Service Registration : 속성 파일을 기반으로 서비스 컨테이너의 서비스 목록에 해당 서비스 등록
    • [3] Service Lookup : 컨테이너에서 제공하는 API를 이용하여 사용하고자 하는 서비스 Lookup
    • [4] Retrieve Service Reference : 컨테이너는 해당 서비스의 인스턴스를 찾아 전달
    • [5] Invoke Methods : 클라이언트에서는 전달받은 인스턴스에 대해 특정 메소드 호출을 통해 원하는 기능 수행

DI와 DL에 대한 비교 및 보다 자세한 내용에 대해서는 Anyframe Core 매뉴얼을 참조하도록 한다.

Aspect Oriented Programming 지원
  • AOP는 어플리케이션 전체에 걸쳐 사용되나 쉽게 분리된 모듈로 작성하기 힘든 로깅, 인증, 권한체크, DB 연동, 트랜잭션, 락킹, 에러처리 등과 같은 공통 기능을 재사용 가능하도록 컴포넌트화 할 수 있는 기법이다. AOP에서는 이러한 공통 기능을 Crosscutting Concerns, 해당 어플리케이션이 제공하는 비즈니스 기능을 Core Concerns라고 지칭한다.
  • 즉, Core Concerns 모듈 내에 필요한 Crosscutting Concerns를 직접 추가하는 대신에 AOP에서는 Weaving이라는 작업을 통해 Core Concerns 모듈의 코드를 직접 건드리지 않고도 Core Concerns 모듈의 사이 사이에 필요한 Crosscutting Concerns 코드가 엮어져 동작되도록 한다. 이를 통해 AOP는 기존의 작성된 코드들을 수정하지 않고도 필요한 Crosscutting Concerns 기능을 효과적으로 적용해 낼 수도 있게 되는 것이다.

Aspect Oriented ProgrammingAspect Oriented Programming

AOP에는 이외에도 새로운 용어가 많이 등장한다. AOP를 이용하여 개발을 수행하기 위해서는 Anyframe Core 매뉴얼을 참조하도록 한다.

Life-cycle 관리

Lightweight 컨테이너는 정의된 모듈의 Life-cycle을 관리하여 해당 모듈들을 초기화시키고 종료시키는 역할을 수행함으로써 개발자가 비즈니스 로직에 집중하여 개발할 수 있게 된다.

신규 기능 추가 용이

XML 기반의 설정을 통해서 간단하게 컨테이너 기반 위에 신규 기능을 추가할 수 있도록 지원한다.

기술 공통 서비스

Anyframe은 자체 개발 또는 오픈 소스 활용 및 확장을 통해 어플리케이션 개발시 용이하게 재사용할 수 있는 Cache, DB 연결, 쿼리문 처리, 트랜잭션 관리, 로깅 등과 같은 다양한 기술 공통 서비스들을 제공한다. 이러한 기술공통 서비스들은 앞서 언급한 Lightweight 컨테이너에서 동작 가능하도록 설계/개발되었으며, 인터페이스와 구현 클래스로 분리되어 구현되어 있으므로, 인터페이스 규약에 맞게 구현 클래스를 추가하거나 제공된 구현 클래스를 확장함으로써 언제든지 해당 어플리케이션의 용도에 맞게 변경이 용이하다.
Anyframe에서 제공하는 주요 기술 공통 서비스는 다음과 같으며 이에 대한 보다 자세한 사항은 Anyframe Core 매뉴얼을 참조하도록 한다.

DataSource 서비스

주어진 데이터베이스에 연결하여 생성된 Connection 객체를 전달해주는 서비스이다.

Query 서비스

쿼리문이나 객체의 입력만으로 데이터베이스 내에 저장된 데이터 조작을 가능하게 하는 서비스이다. Query 서비스는 JDBC(Java Database Connectivity)를 이용한 데이터 액세스 수행 부분을 추상화함으로써 간편한 데이터 액세스 방법을 제공하고, JDBC 사용시 발생할 수 있는 공통 에러를 줄여준다.

ID Generation 서비스

시스템 개발 시 공통적으로 많이 쓰이는 기능 중의 하나로, 해당 항목에 대해 유일한 ID를 생성하기 위해 사용할 수 있는 서비스이다.

Properties 서비스

외부 파일이나 환경 정보에 구성되어 있는 key, value의 쌍을 내부적으로 가지고 있으며, 어플리케이션이 이 특정 key에 대한 value에 접근할 수 있도록 해주는 서비스이다.

Transaction 서비스

Transaction 관리에 대하여 일관성 있는 추상화된 방법을 제공하는 서비스로, Spring 프레임워크에서 제공하는 TransactionManager를 그대로 사용한다. Anyframe 매뉴얼에서는 Spring 프레임워크의 TransactionManager 활용 방법에 대해 가이드하고 있다.

Hibernate 서비스

객체 모델링(Object Oriented Modeling)과 관계형 데이터 모델링(Relational Data Modeling) 사이의 불일치를 해결해 주는 ORM 도구인 Hibernate를 효율적으로 사용할 수 있도록 세부 항목별로 활용 방법을 가이드하고 있다. 또한 Hibernate 기반에서도 입력 조건에 따라 HQL(Hibernate Query Language)을 Dynamic하게 변경할 수 있도록 Velocity와 연계한 DynamicHibernateService를 추가로 제공한다.

Logging 서비스

Logging 서비스는 Log4j를 그대로 이용하며 이를 통해 테스팅 코드와 운영 코드를 동일하게 가져가면서, 로깅을 선언적으로 관리할 수 있고, 운영시 성능 오버헤드를 최소화할 수 있게 한다. Anyframe 매뉴얼에서는 Log4j 활용 방법에 대해 가이드하고 있다. 또한 Log4jdbc3를 이용하여 SQL을 Logging할 수 있는 방법도 제시한다.

Remoting 서비스

클라이언트 어플리케이션과 원격 어플리케이션에서 제공하는 서비스간의 의사소통 기능을 제공하는 서비스이다. Spring Remoting 기능을 그대로 활용하며 Anyframe 매뉴얼에서는 원격 기술 유형(RMI, Hessian/Burlap, HTTP Invoker)별로 활용 방법에 대해 가이드하고 있다.

Web Services

Web Services란 인터넷 네트워크를 통하여 다수의 기존 어플리케이션 시스템을 표준화된 기술로서 상호 작용 시키고, 이러한 표준 기술을 이용하여 모든 비즈니스를 가능하게 한다. Web Services는 언제, 어디에서건 원하는 정보나 서비스를 제공해 주는 역할을 수행하며 기존의 다른 소프트웨어처럼 완벽한 정의를 지정하여 구성하는 것이 아니라, 서로 주고받는 데이터 표준에 대한 정의를 규정함으로써 매우 유연하며 서로의 이질적인 운영시스템, 이질적인 프로그램 언어 간의 커뮤니케이션 차이를 극복해 주는 연결고리 역할을 해 준다.
Anyframe 매뉴얼에서는 이러한 Web Services 기능에 대한 활용 방법에 대해 가이드한다. 또한 Web Services 클라이언트와 서버 구현 시 일관성있게 구동시킬 수 있도록 추가 기능도 제공한다.

오픈소스

Anyframe Core에서 사용하고 있는 주요 오픈소스는 다음과 같다.

[참고] Spring Framework에 관하여

Spring Framework는 Rod Johnson의 "Expert One-on-One J2EE Design and Devlopment"에서 소개된 코드를 기초로 한 JavaEE 기반의 오픈 소스 어플리케이션 프레임워크이며, 2005년 2월에 버전 1.1.5가 릴리스되었다.
Spring은 단어 그대로 유연한 특성을 가지는 프레임워크로써, 내부적으로 Layered Archtecture를 지원하며 JavaEE 기반의 어플리케이션 개발을 쉽게 해 주는 프레임워크이다. 또한 Spring의 Lightweight 컨테이너를 통해 어플리케이션 코드와 Spring API의 의존도를 줄이고, Spring이 관리하는 Bean에 대해서는 POJO(Plain Old Java Object)로 직접 접근할 수 있어 Bean을 사용하는데 따르는 오버로드를 줄인다.

Spring의 실질적인 개발과 컨설팅, 교육을 담당하는 SpringSource에는 Full-time으로 개발과 지원 업무를 수행하는 Leading contributor가 약 40여명이 있다. 또한 Spring의 활용 영역은 점차적으로 확대되어 가는 추세이며 현재 Spring Framework, Spring WebFlow, Spring Security, Spring Dynamic Modules For OSGi(tm) Service Platforms를 포함하여 14개의 프로젝트가 운영 중에 있다.