2011년 5월 23일 월요일

EJB 기반 컴포넌트 가변성 설계 기법

재사용을 높이기 위해서 컴포넌트 내의 가변적인 부분의 모델링과 이 가변성을 특화 시킬 수 있는 기법을 알아본다. EJB 플랫폼은 컴포넌트 특화를 위한 장치를 제공하지 않기 때문에 이를 지원하기 위한 기법이 필요하다.

선택형 기법

선택형 기법은 컴포넌트 내부의 가변치를 이용해서 컴포넌트를 클라이언트의 요구에 맞도록 특화한다. 컴포넌트 내부의 가변치를 사용하는 기법은 어플리케이션에 따라 변할 수 있는 가변치를 미리 식별하여 컴포넌트 내부에 설계함으로써 컴포넌트의 사용자가 특화시에 빈 내부의 가변치 중에서 선택하여 사용할 수 있다.

제1단계 - 가변점이 있는 함수 선언
1단계에서는 컴포넌트 내에 가변점이 있는 함수를 선언한다. 가변점이 있는 함수에서는 가변치 선택값을 가지고 있는 객체에 접근하여 가변치 선택 정보를 얻는다. 해당 가변치 선택값을 이용하여 선택값에 알맞은 알고리즘을 수행한다. 이는 선택값에 따른 로직의 변화가 가
능하도록 프로그램의 조건문을 사용하여 설계할 수 있다. 가변점이 있는 foo1() 함수에서 정적 클래스인 Variation에 저장된 가변치 선택값을 loanVar변수를 통해 얻어와 switch 문을 이용하여 해당 가변치 선택값에 알맞은 알고리즘을 수행한다.

제2단계 - 가변치 설정 함수와 가변치 저장소 선언
2단계에서는 가변치를 설정하기 위한 함수와 가변치에 대한 정보를 유지하는 저장소를 선언한다. 첫째 외부에서 설정한 선택값 정보를 이용하여 여러 가변치 중 하나를 선택하는 가변치 설정 함수를 선언한다. VariabilityBean의 select1() 함수는 엔터프라이즈 빈의 비즈니스 로직을 수행하기 위한 함수가 아니다. 이는 사용자의 가변치 선택값을 설정하는 역할을 담당한다. 가변치를 설정하는 함수는 비즈니스 로직을 설정하는 함수와 별도의 엔터프라이즈 빈으로 설계하는데 이는 비즈지스 로직의 수행과 컴포넌트 특화의 책임을 분리하여 응집도를 높이기 위함이다. 둘째 가변치 저장소를 선언한다. 가변치 설정 함수에서 설정한 가변치 선택값을 영구적으로 보관하기 위해 사용된다. 가변치 선택값이 변경되지 않는 동안에는 해당 가변치 선택값을 지속적으로 유지해야 한다. 가변치 저장소는 가변치 값을 효율적으로 제공하기 위해 static변수를 사용한다. 엔터프라이즈 빈은 풀링(Pooling) 되기 때문에 static 변수를 사용하여 값을 저장할 수 없다.

제3단계 - Customize 인터페이스 정의
3단계는 Customize 인터페이스를 선언하는 작업이다. 컴포넌트 사용자에게 가변치 설정 함수를 제공하기 위해 선언한다. 컴포넌트의 특화를 위한 Customize 인터페이스는 컴포넌트 내부에 가변치 선택을 위한 세션빈의 컴포넌트 인터페이스를 이용해 설계한다. 선택형 기법에서는 가변치 선택값을 특화 시에 전달한다. Variability는 Customize 인터페이스이다. 가변치 설정 함수를 별도의 엔터프라이즈 빈에 설계하였기 때문에 Customize 인터페이스는 비즈니스 로직을 가진 인터페이스로부터 독립될 수 있다. 이를 통해, 컴포넌트를 특화할 때만 Customize 인터페이스를 공개하고 컴포넌트의 사용시점에는 해당 정보를 공개하지 않을 수 있다.

제4단계 - 가변치 설정
가변치 설정을 위해서 EJB의 컴포넌트 인터페이스를 이용하여 설계된 Customize 인터페이스를 통해서 컴포넌트 내부의 가변치를 선택한다. Customize 인터페이스에서 정의된 select()함수에서 가변치를 선택하게 되면 일반 자바 객체인 Variation 클래스의 static 필드인 loanVar 변수에 가변치의 선택 정보를 저장한다. 컴포넌트의 실행 시 loanVar 변수의 가변치 정보를 참조하여 선택된 로직을 수행함으로써 특화된 정보를 이용한다.

플러그인 기법
플러그인 기법은 컴포넌트 내부에 있는 가변점에 외부에서 가변치를 할당하여 컴포넌트를 특화한다. 컴포넌트 외부의 가변치를 설정하는 기법은 변화 지점인 가변점을 미리 별하였지만 한정된 가변치를 가지지 않거나 가변치를 미리 식별하는 것이 불가능 한 경우 이를 컴포넌트를 사용하는 클라이언트가 어플리케이션의 목적에 맞는 가변치를 설정하여 컴포넌트를 특화할 수 있다.

제1단계 - 가변점이 있는 함수 선언
1단계에서는 컴포넌트 내에 가변점이 있는 함수를 선언한다. 가변점이 있는 함수는 가변치를 저장하고 있는 객체에 접근하여 플러그인 된 정보를 얻는다. 가변점이 있는 함수에서는 플러그인된 가변치를 저장하고 있는 객체에 접근하여 가변치의 정보를 얻는다. 얻은 정보의 플러그인된 알고리즘을 이용하여 컴포넌트가 특화된다. 가변점이 있는 foo1() 함수에서 정적 클래스 Variation의 var1에 저장되어있는 플러그인된 객체를 얻어와 해당 객체의 알고리즘을 수행한다. 이는 객체의 동적 바인딩 속성을 이용한 기법이다.

제2단계 - 가변치 설정 함수와 가변치 저장소 선언
2단계에서는 플러그인된 가변치를 설정하는 함수와 해당 가변치에 대한 정보를 유지하는 저장소를 선언한다. 첫째 외부에서 플러그인된 가변치를 컴포넌트 내부에 설정하는 가변치 설정 함수를 선언한다. 가변치 설정 함수에서는 외부에서 플러그인된 객체를 가변치 저장소에 저장하는 역할을 담당한다. 선택형 기법과 같이 가변치 설정 함수는 VariabilityBean에 정의된다. 가변치 설정 함수 plugin1()은 플러그인된 가변치를 가변치 저장소에 설정한다. 둘째 가변치 저장소를 선언한다. 가변치 설정 함수에서 설정한 가변치를 영구적으로 보관하기 위해 사용된다. 선택형 기법과 같이 새로운 가변치를 플러그인해서 컴포넌트를 다시 특화하기 이전까지 해당 가변치 정보를 저장하고 있는다. 가변치 저장소는 static 필드로 플러그인 될 객체의 슈퍼타입에 해당하는 변수를 가지고있는다. 이는 플러그인 되는 정보가 무엇이던지 해당 타입의 서브클래스이면 업캐스팅(up-casting)해서 정보를 사용할 수 있게 해준다.

제3단계 - Customize 인터페이스 정의
3단계는 선택형 기법과 같이 Customize 인터페이스를 정의하는 작업이다. 컴포넌트 사용자에게 가변치 설정 함수를 제공하기 위해 선언한다. Customize 인터페이스의 정의 방법은 선택형 기법에서와 같이 가변치 설정 함수를 포함하고 있는 엔터프라이즈 빈의 컴포넌트 인터페이스를 통해 정의한다. 플러그인 기법에서는 플러그인 될 가변치를 해당하는 객체의 슈퍼타입으로 업캐스팅해서 전달한다. 플러그인 될 객체의 슈퍼타입인Variant를 인자로 전달한다.

제4단계 - 가변치 설정
4단계는 컴포넌트 사용자가 플러그인 될 객체를 생성해서 Customize 인터페이스를 이용하여 가변치를 설정하는 단계이다. 가변치를 설정하기 위해서는 먼저 플러그인 될 객체를 설계하여야 한다.컴포넌트가 포함하고 있는 플러그인의 슈퍼클래스를 상속받아 플러그인 될 객체를 설계한다. 플러그인 될 객체를 설계한 후 배포된 컴포넌트를 어플리케이션의 요구사항에 맞게 특화하기 위해서 플러그인 될 객체를 생성하고 컴포넌트의 Customize 인터페이스를 통해 이를 전달한다.

외부 프로파일 기법
외부 프로파일 기법은 컴포넌트 내부에 있는 가변점을 가변치를 명세한 외부 프로파일을 이용해서 컴포넌트를 특화한다. 외부 프로파일은 XML 형식의 파일 사용이 가능하다. 외부 프로파일에 가변치를 명세한다. 명세된 외부 프로파일을 컴포넌트에서 분석하고, 해당 가변치를 컴포넌트 내부에서 반영구적으로 기억하여 컴포넌트를 특화시킨다. 외부 프로파일에 작성된 컴포넌트의 가변치를 변경하면 동적으로 컴포넌트를 특화 시킬 수있다.

제1단계 - 가변점이 있는 함수 선언
1단계에서는 컴포넌트내에 가변점이 있는 함수를 선언한다. 컴포넌트에서 가변치를 읽어 들인 후에는 플러그인 기법과 유사하다. 가변점이 있는 함수에서는 이미 가변치를 저장하고 있는 객체에 접근하여 가변치의 정보를 얻는다. 얻은 정보를 이용하여 컴포넌트가 특화된다. 가변점이 있는 foo1() 함수에서 정적 클래스 Variation의 var1 변수에 저장된 정보를 이용하여 foo1()의 로직을 수행한다.

제2단계 - 가변치 설정 함수와 가변치 저장소 선언
2단계에서는 가변치를 외부 프로파일에서 분석하는 부분과 분석된 가변치를 저장하는 장소를 선언한다. 첫째 가변치를 외부에서 읽어들이는 가변치 설정 함수를 선언한다. 가변치 설정함수에서는 외부 프로파일에 설정된 가변치를 XML 파서등을 사용하여 분석한다. setVar1() 함수는 엔터프라이즈 빈의 비즈니스 로직을 수행하는 함수가 아니다. 가변치 설정 함수가 가변점 foo1()이 호출 될 때 마다 XML파일을 읽는 부분이호출되면 안 된다. 해당 가변점 함수가 처음 호출되기 전에 한번만 가변치 설정 함수를 호출한다. 사용자가 Customize 인터페이스를 통해 한번만 setVar1()을 호출 할 수 도 있다. 또 다른 방법은 엔터프라이즈 빈의 ejbCreate()와 같은 콜백 메소드에서 아직 가변치가 설정이 안된 경우에만 자동으로 호출하는 방법이 있다. 다른 방법으로는 setVar1(filexml) 오퍼레이션에 가변치를 설정한 XML 파일을 전달하여 가변치를 분석할 수도 있다. 둘째 가변치 저장소를 선언한다. 가변치 설정 함수에
서 분석된 가변치를 영구적으로 보관하기 위해 사용된다. 역시 다른 가변성 기법과 같이 가변치가 변경되기전까지는 가변치 저장소는 한번만 설정되는 것이 효율적이다. 가변치값을 효율적으로 제공하기 위해 static 변수를 사용한다.

제3단계 - Customize 인터페이스 정의
3단계는 선택형과 플러그인 기법과 같이 Customize인터페이스를 선언하는 작업이다. 컴포넌트 사용자에 의해 가변치 설정함수가 호출되는 경우에는 존재하지만, ejbCreate()와 같은 콜백 함수를 통해 가변치 설정 함수가 호출된다면, 외부 프로파일 기법에서는 customize인터페이스가 필요 없을 수 있다.

제4단계 - 가변치 설정
4단계는 컴포넌트 사용자가 XML 파일에 가변치를 선언하는 작업이다. EJB에서는 환경 변수를 설정하기위한 XML형식의 디플로이먼트 디스크립터를 제공한다. <env-entry> 엘리먼트를 이용하여 선언이 가능하다. <env-entiry-name>에 설정된 값을 이용하여 <env-entry-type>에 설정된 데이타 형식으로<env-entry-value>에 선언된 값을 읽을 수 있다.
외부 프로파일 기법에서의 주요 특징은 XML 형식의 텍스트 파일에 가변치를 기술하는 것이다. 선언된 가변치가 선택형 기법에서와 같이 이미 구현된 가변치를 선택하기 위한 가변치의 설정 값을 넣을 수 있고, 플러그인 기법과 같이 가변치를 직접 선언할 수 있다. ModelDriven Architecture(MDA) 에서 사용하는 액션 의미 언어(Action Semantic Language)와 같은 알고리즘을 기술하는 언어를 사용하여 가변적 로직을 선언 할 수도
있다.
참고자료 : EJB 기반 컴포넌트의 가변성 맞춤과 기법(정보과학회논문지)

댓글 없음:

댓글 쓰기

ETL 솔루션 환경

ETL 솔루션 환경 하둡은 대용량 데이터를 값싸고 빠르게 분석할 수 있는 길을 만들어줬다. 통계분석 엔진인 “R”역시 하둡 못지 않게 관심을 받고 있다. 빅데이터 역시 데이터라는 점을 볼때 분산처리와 분석 그 이전에 데이터 품질 등 데이...