Edapt으로 GMF 모델 마이그레이션 구현
초록
본 논문은 Eclipse 기반 모델 변환 도구인 Edapt을 활용해 TTC 2011의 GMF 모델 마이그레이션 사례를 해결한 방법을 제시한다. 메타모델 변화 이력을 기록하고, 재사용 가능한 결합 연산과 사용자 정의 연산을 조합해 모델을 자동으로 이전 버전에서 최신 버전으로 옮긴다. 주요 결과는 대부분의 변화를 재사용 연산으로 처리하고, 복잡한 두 단계만을 Java 기반 사용자 정의 연산으로 구현함으로써 간결하고 유지보수 가능한 마이그레이션을 달성한 점이다.
상세 분석
Edapt은 메타모델의 진화와 모델 마이그레이션을 하나의 연속적인 작업 흐름으로 다루는 도구이다. 핵심 개념은 ‘결합 연산(coupled operation)’으로, 메타모델 변경과 그에 따른 모델 변환을 동시에 정의한다. 이 논문에서는 GMF(Graph)와 GMF(Map) 두 메타모델에 대해 버전 1.0부터 2.1까지의 진화 과정을 재현한다. 먼저 EMF Compare를 이용해 인접 버전 간 차이를 추출하고, 차이에 해당하는 Edapt의 재사용 가능한 연산을 자동 매핑한다. 재사용 연산은 60여 개가 사전 정의돼 있으며, 예를 들어 ‘Enumeration to Sub Classes’, ‘Make Reference Containment’, ‘Extract Super Class’ 등이 있다. 논문에 제시된 표 1·2는 각 메타모델 별로 사용된 연산 종류와 적용 횟수를 상세히 보여준다. 대부분의 변형은 이러한 재사용 연산으로 해결되며, 이는 Edapt이 실제 프로젝트에서 메타모델 진화를 효과적으로 캡처할 수 있음을 증명한다.
복잡한 변환이 필요한 경우에는 사용자 정의 연산(custom coupled operation)을 Java 코드로 구현한다. GMF(Graph)에서는 두 개의 사용자 정의 연산이 필요했는데, 첫 번째는 새로 추가된 ‘typedFigure’ 참조가 null인 경우 기본값을 설정하고, 두 번째는 ‘FigureHandle’ 객체가 참조하던 ‘referencingElements’를 분리해 재사용 가능한 ‘FigureDescriptor’와 ‘ChildAccess’ 구조로 재구성한다. 이 두 연산은 각각 21줄과 90줄의 코드로 구현되었으며, Edapt이 제공하는 API(Instance, Model, Metamodel 등)를 활용해 모델 요소를 탐색·생성·연결한다.
다중 파일 모델에 대한 지원도 강조된다. Edapt은 파일 간 참조를 자동으로 해석해 필요한 파일을 로드하고, 사용자가 명시적으로 여러 파일을 동시에 마이그레이션하도록 지정할 수도 있다. 또한 메타모델이 다른 메타모델을 참조하는 경우, 해당 메타모델이 플러그인 형태로 Eclipse 워크벤치에 로드되어 있어야 함을 언급한다.
품질 평가 측면에서는 테스트 모델을 이용해 마이그레이션 결과를 EMF Compare로 검증하였다. 레퍼런스 순서 차이는 무시했으며, 이는 GMF 모델에서 순서가 의미가 없다는 전제에 기반한다. 결과적으로 모든 테스트 모델이 기대 결과와 일치했으며, 마이그레이션 스크립트는 비교적 짧고 명료했다. 유지보수성 측면에서도 히스토리 모델이 작은 결합 연산 단위로 구성돼 있어 개별 연산을 되돌리거나 수정하기 쉽다. 향후 DSL 기반 사용자 정의 연산을 도입하면 더욱 간결한 스크립트를 기대할 수 있다.
전체적으로 Edapt은 메타모델 진화와 모델 마이그레이션을 통합적으로 관리함으로써, 복잡한 변환 로직을 최소화하고 재사용성을 극대화한다는 점에서 모델 기반 개발 환경에 유용한 솔루션임을 확인한다.
댓글 및 학술 토론
Loading comments...
의견 남기기