모듈형 DSL 개발을 위한 MontiCore 프레임워크

모듈형 DSL 개발을 위한 MontiCore 프레임워크

초록

MontiCore는 텍스트 기반 도메인 특화 언어(DSL)의 구성 요소를 독립적으로 정의하고 재사용할 수 있도록 하는 프레임워크이다. 구문 정의를 구체적(concrete)과 추상적(abstract) 양식으로 중복 없이 표현하고, 문법 상속과 임베딩이라는 두 가지 모듈성 메커니즘을 제공한다. 이를 통해 기존 DSL을 확장하거나 새로운 DSL을 조합식으로 설계하면서도 일관된 툴 체인을 자동 생성할 수 있다.

상세 분석

본 논문은 DSL 설계·구현 과정에서 발생하는 복잡성, 진화 관리, 오류 검증 문제를 해결하기 위한 구조적 접근법을 제시한다. 핵심 아이디어는 ‘문법 기반 정의’를 추상 구문 트리(AST)와 구체 구문 트리(CST)를 동시에 기술하는 단일 소스에 두어, 두 표현 사이의 불일치를 최소화하는 것이다. 이를 위해 MontiCore는 ‘연관(association)’과 ‘상속(inheritance)’ 개념을 문법에 직접 삽입함으로써 메타모델 수준의 그래프 구조를 자연스럽게 생성한다. 이러한 확장된 문법은 전통적인 BNF/EBNF 형태를 유지하면서도 객체 지향적인 관계를 표현할 수 있어, DSL 사용자에게 친숙한 모델링 언어와 동일한 표현력을 제공한다.

모듈성 측면에서는 두 가지 조합 연산자를 도입한다. 첫 번째인 ‘문법 상속(grammar inheritance)’은 기존 문법을 기반으로 새로운 문법이 기존 규칙을 그대로 물려받고, 필요에 따라 규칙을 오버라이드하거나 추가할 수 있게 한다. 이는 언어 확장(예: 기본 DSL에 도메인 특화 기능을 더하는 경우)에서 코드 중복을 크게 줄이고, 변경 전파를 자동화한다. 두 번째인 ‘임베딩(embedding)’은 완전한 서브문법을 다른 문법 안에 삽입하는 메커니즘으로, 서로 독립적인 DSL을 하나의 통합 언어로 결합할 때 유용하다. 임베딩은 삽입 지점에서 토큰 충돌을 방지하기 위해 별도의 파서 조합 전략을 제공한다.

툴 지원 측면에서는 MontiCore가 자동으로 파서, AST 클래스, 방문자(Visitor) 패턴 기반의 변환·분석기, 그리고 Eclipse 플러그인 형태의 편집기 등을 생성한다. 이러한 자동 생성물은 모듈화된 문법 정의와 일관성을 유지하므로, 새로운 DSL을 정의할 때마다 툴 체인을 일일이 구현할 필요가 없다. 또한, 문법 상속·임베딩에 의해 생성된 복합 언어는 각각의 서브문법이 제공하는 검증 로직을 그대로 활용하므로, 오류 검출 능력이 향상된다.

실험 사례에서는 기존에 존재하던 상태 기계 DSL에 데이터베이스 접근 DSL을 임베딩하고, 또 다른 사례로는 기본 UML 시퀀스 다이어그램 DSL을 상속해 도메인 특화 시퀀스 DSL을 만든다. 두 경우 모두 코드 라인 수가 크게 감소하고, 유지보수 비용이 낮아지는 효과가 입증되었다.

결론적으로 MontiCore는 DSL 개발을 ‘조합식 프로그래밍’ 패러다임으로 전환시켜, 언어 설계자와 도메인 전문가가 협업하기에 적합한 환경을 제공한다. 문법 기반의 추상·구체 통합 정의, 객체 지향적 관계 확장, 그리고 두 단계의 모듈성 메커니즘은 복잡한 도메인 요구사항을 체계적으로 관리할 수 있게 한다.