Anyframe Core 소개
JavaEE는 방대한 양의 다양한 툴들과 Framework들을 가진 매우 강력한 개발 플랫폼 이지만, 이런
방대한 양의 지원이 오히려 개발자의 관점에서 보면 증가된 복잡성으로 개발이 더 어려운 실정이다.
Anyframe Core는 Spring을 중심으로 다양한 오픈소스를 통합/확장한 best-of-breed JavaEE
구성하여 JavaEE 기반 어플리케이션 개발시 겪게 되는 복잡성을 해소하고 좀 더 빠르게 개발할 수
있도록 도와주는 어플리케이션 프레임워크이다.
Anyframe Core의 특징
- 순수 객체 중심의(POJO) 어플리케이션 개발 지원:
프레임워크로 인해서 기본 설계와 상세 설계가 이중으로 진행되거나, 개발 시 설계 모델이 구현체와 불일치 되는 것을 줄이기 위해
순수 객체 중심의(POJO) 어플리케이션 개발을 지원한다.
- Dependency Injection을 통한 의존 관계 처리:
인터페이스 중심의 개발을 가이드하고 객체나 컴포넌트간의 참조 관계는 Dependency Injection을 통해 처리함으로써
구현체의 변경에 따른 영향력을 최소화한다.
- 개발자는 비즈니스 로직에만 집중하여 구현:
로깅, 트랜잭션, 예외처리 등과 같은 비기능 영역에 대한 코드가 업무 기능 개발 영역에서 분리될 수 있도록 함으로써,
개발자는 비즈니스 로직에만 집중하여 구현하도록 한다.
- 재사용 가능한 기술 공통 서비스 제공:
DB 접근 및 SQL 처리, 캐쉬, WAS와 연동 등과 같은 중요 기능에 대해 재사용 가능한 기술 공통 서비스를 제공함으로써 보다
빠르고 안정적인 개발을 지원한다.
- 선언적으로 트랜잭션 통제:
Java EE 환경과 독립적으로 JTA이나 JDBC 데이터 소스에 대해 별도의 트랜잭션 처리를 위한 코딩없이 간단한 설정만으로 선언적으로
트랜잭션을 통제할 수 있는 기능을 지원한다.
- Singleton, Factory 패턴 등 유용한 패턴 실행 지원:
직접적인 패턴 구현 없이도 Singleton, Factory 패턴 등의 실행을 지원함으로써, 어플리케이션 개발시 인스턴스의 생성 관리,
데이터 무결성 확보 등을 위해 유용한 패턴 등을 직접 구현하는 어려움을 해결해준다.
- 개발 지원 툴 활용:
Anframe Core 기반으로 어플리케이션을 개발할 때 코드 자동 생성, DB I/O 처리 등의 개발 지원 툴을 활용하여 개발 및 테스트를
수행함으로써 사전에 오류 발생을 감지할 수 있다.
Anyframe Core의 주요기능
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 Injection : 각 서비스 사이의 의존 관계를 속성 파일을 기반으로 컨테이너가 자동 처리
- Service Registration : 속성 파일을 기반으로 서비스 컨테이너의 서비스 목록에 해당 서비스 등록
- Service Lookup : 컨테이너에서 제공하는 API를 이용하여 사용하고자 하는 서비스 Lookup
- Retrieve Service Reference : 컨테이너는 해당 서비스의 인스턴스를 찾아 전달
- Invoke Methods : 클라이언트에서는 전달받은 인스턴스에 대해 특정 메소드 호출을 통해 원하는 기능 수행
DI와 DL에 대한 비교 및 보다 자세한 내용에 대해서는 본 매뉴얼 >> Spring >> IoC >> Dependencies
를
참조하도록 한다.
- 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 기능을 효과적으로 적용해 낼 수도 있게 되는 것이다.

AOP에는 이외에도 새로운 용어가 많이 등장한다. AOP를 이용하여 개발을 수행하기 위해서는 본 매뉴얼 >> Spring >> AOP
를 참조하도록 한다.
- Life-cycle 관리
Lightweight 컨테이너는 정의된 모듈의 Life-cycle을 관리하여 해당 모듈들을 초기화시키고 종료시키는 역할을 수행함으로써
개발자가 비즈니스 로직에 집중하여 개발할 수 있게 된다.
- 신규 기능 추가 용이
XML 기반의 설정을 통해서 간단하게 컨테이너 기반 위에 신규 기능을 추가할 수 있도록 지원한다.
기술 공통 서비스
Anyframe은 자체 개발 또는 오픈 소스 활용 및 확장을 통해 어플리케이션 개발시 용이하게 재사용할 수 있는 Cache, DB 연결, 쿼리문
처리, 트랜잭션 관리, 로깅 등과 같은 다양한 기술 공통 서비스들을 제공한다. 이러한 기술공통 서비스들은 앞서 언급한 Lightweight
컨테이너에서 동작 가능하도록 설계/개발되었으며, 인터페이스와 구현 클래스로 분리되어 구현되어 있으므로, 인터페이스 규약에 맞게
구현 클래스를 추가하거나 제공된 구현 클래스를 확장함으로써 언제든지 해당 어플리케이션의 용도에 맞게 변경이 용이하다.
Anyframe에서 제공하는 주요 기술 공통 서비스는 다음과 같으며 이에 대한 보다 자세한 사항은 본 매뉴얼 >>
Tech. Service
를
참조하도록 한다.
오픈소스
Anyframe Core에서 사용하고 있는 주요 오픈소스는 다음과 같다.
이외, 오픈소스 목록은 Anyframe Core 라이브러리와 함께 배포되는
readme.txt
파일의
6. 외부 오픈 소스 라이센스 정책 내에 제시된 오픈소스 목록을 참고하도록 한다.