도메인 특화 모델링

**도메인 특화 모델링**(domain-specific modeling, **DSM**)은 컴퓨터 소프트웨어와 같은 시스템을 설계하고 개발하는 소프트웨어 공학 방법론이다. 이 방법론은 도메인 특화 언어를 체계적으로 사용하여 시스템의 다양한 측면을 나타낸다. 도메인 특화 모델링 언어는 범용 모델링 언어보다 높은 수준의 추상화를 지원하는 경향이 있으므로, 주어진 시스템을 지정하는 데 더 적은 노력과 낮은 수준의 세부 정보가 필요하다.
# 개요
도메인 특화 모델링은 종종 코드 생성의 개념, 즉 도메인 특화 언어 모델에서 실행 가능한 소스 코드 생성을 자동화하는 것을 포함한다. 소스 코드의 수동 생성 및 유지 관리로부터 자유로워진다는 것은 도메인 특화 언어가 개발자 생산성을 크게 향상시킬 수 있음을 의미한다.Kelly, S. and Tolvanen, J.-P., (2008) Domain-Specific Modeling: Enabling Full Code Generation, John Wiley & Sons, New Jersey. 수동 코딩에 비해 자동 생성의 신뢰성은 결과 프로그램의 결함 수를 줄여 품질을 향상시킬 것이다. 도메인 특화 언어는 1980년대의 CASE 도구나 1990년대의 UML 도구에서 시도된 이전의 코드 생성 시도와는 다르다. 이 두 가지 모두에서 코드 생성기와 모델링 언어는 도구 공급업체에 의해 구축되었다. 도구 공급업체가 도메인 특화 언어 및 생성기를 만들 수 있지만, 도메인 특화 언어가 하나의 조직 내에서 발생하는 것이 더 일반적이다. 한두 명의 전문 개발자가 모델링 언어와 생성기를 만들고, 나머지 개발자가 이를 사용한다. 모델링 언어와 생성기를 사용할 조직이 구축하면, 해당 도메인의 정확한 요구 사항에 밀접하게 부합하고 도메인 변경에 대응할 수 있다. 도메인 특화 언어는 일반적으로 특정 도메인에 대한 다양한 추상화 수준을 포괄할 수 있다. 예를 들어, 휴대폰용 도메인 특화 모델링 언어는 사용자가 사용자 인터페이스에 대한 고수준 추상화를 지정할 뿐만 아니라 전화번호나 설정과 같은 데이터 저장에 대한 저수준 추상화를 지정할 수 있게 해준다. 마찬가지로, 금융 서비스용 도메인 특화 모델링 언어는 사용자가 클라이언트에 대한 고수준 추상화를 지정할 뿐만 아니라 주식 및 채권 거래 알고리즘 구현을 위한 저수준 추상화를 지정할 수 있게 해준다.
# 주제

## 도메인 특화 언어 정의
언어를 정의하려면 정의를 작성할 언어가 필요하다. 모델의 언어는 종종 메타모델이라고 불리므로, 모델링 언어를 정의하기 위한 언어는 메타-메타모델이다. 메타-메타모델은 두 그룹으로 나눌 수 있다: 기존 언어에서 파생되거나 사용자 정의된 언어와 특히 메타-메타모델로 개발된 언어이다. 파생된 메타-메타모델에는 개체-관계 모델, 형식 언어, EBNF, 온톨로지 언어, XML 스키마, 그리고 메타 오브젝트 퍼실리티 (MOF)가 포함된다. 이 언어들의 강점은 원본 언어의 친숙함과 표준화에 있다. 도메인 특화 모델링의 정신은 특정 작업을 위한 새로운 언어의 생성을 선호하므로, 메타-메타모델로 설계된 새로운 언어가 있다는 것은 놀라운 일이 아니다. 이러한 언어 중 가장 널리 사용되는 계열은 OPRRR.J. Welke. The CASE Repository: More than another database application. In W.W. Cotterman and J.A. Senn, editors, Proceedings of 1988 INTEC Symposium Systems Analysis and Design: A Research Strategy, Atlanta, Georgia, 1988. Georgia State University. [http://www.dsmforum.org/papers/CASE_Repository.html Smolander, K., (1992) OPRR - A Model for Modeling Systems Development Methods. In: Next Generation CASE Tools (eds. K. Lyytinen, V.-P. Tahvanainen) IOS Press, Amsterdam, Netherlands, pp. 224-239.GOPRRKelly, S., Lyytinen, K., and Rossi, M., "MetaEdit+: A Fully Configurable Multi-User and Multi-Tool CASE Environment," Proceedings of CAiSE'96, 8th Intl. Conference on Advanced Information Systems Engineering, Lecture Notes in Computer Science 1080, Springer-Verlag, pp. 1-21, 1996. (in [http://www.metacase.com/stevek.html Ph.D. thesis as 3metools.pdf) 및 GOPPRR이며, 이들은 최소한의 노력으로 모델링 언어에서 발견되는 것을 지원하는 데 중점을 둔다.
## 도메인 특화 언어에 대한 도구 지원
많은 범용 모델링 언어는 이미 CASE 도구의 형태로 도구 지원을 제공하고 있다. 도메인 특화 언어는 맞춤형 CASE 도구를 처음부터 구축하기에는 시장 규모가 너무 작은 경향이 있다. 대신, 도메인 특화 언어에 대한 대부분의 도구 지원은 기존 도메인 특화 언어 프레임워크를 기반으로 하거나 도메인 특화 언어 환경을 통해 구축된다. 도메인 특화 언어 환경은 메타모델링 도구, 즉 모델링 도구 또는 CASE 도구를 정의하는 데 사용되는 모델링 도구로 생각할 수 있다. 결과 도구는 도메인 특화 언어 환경 내에서 작동하거나, 덜 일반적으로는 별도의 독립 실행형 프로그램으로 생성될 수 있다. 더 일반적인 경우, 도메인 특화 언어 환경은 기존 CASE 도구에 비해 추가적인 추상화 계층을 지원한다. 도메인 특화 언어 환경을 사용하면 도메인 특화 언어에 대한 도구 지원을 얻는 비용을 크게 낮출 수 있다. 잘 설계된 도메인 특화 언어 환경은 도메인 특화 편집기, 브라우저 및 구성 요소와 같이 처음부터 구축하기에 비용이 많이 드는 프로그램 부분의 생성을 자동화하기 때문이다. 도메인 전문가는 도메인 특화 구성 요소 및 규칙만 지정하면 되며, 도메인 특화 언어 환경은 대상 도메인에 맞춤화된 모델링 도구를 제공한다. 대부분의 기존 도메인 특화 언어는 MetaEdit+ 또는 Actifsource와 같은 상용, GEMS와 같은 오픈 소스, 또는 GME와 같은 학술 도메인 특화 언어 환경에서 이루어진다. 도메인 특화 언어의 인기가 높아짐에 따라 EMF 및 GMF를 포함하는 Eclipse Modeling Project (EMP) 또는 Microsoft의 소프트웨어 팩토리용 DSL Tools와 같이 기존 IDE에 도메인 특화 언어 프레임워크가 추가되었다.
# 도메인 특화 언어 및 UML
통합 모델링 언어 (UML)는 소프트웨어 집약적인 시스템을 위한 범용 모델링 언어로, 주로 객체 지향 프로그래밍을 지원하도록 설계되었다. 결과적으로, 도메인 특화 언어와는 달리 UML은 광범위한 도메인에 걸쳐 다양한 목적으로 사용된다. UML이 제공하는 기본 요소는 객체 지향 프로그래밍의 것이지만, 도메인 특화 언어는 해당 도메인의 모든 실무자에게 익숙한 의미론을 가진 기본 요소를 제공한다. 예를 들어, 자동차공학 도메인에서는 ABS 또는 스티어링 휠 등의 속성을 나타내는 소프트웨어 모델이 있을 것이다. UML은 특정 도메인 및 플랫폼에 대해 제한하고 사용자 정의할 수 있는 프로파일 메커니즘을 포함한다. UML 프로파일은 스테레오타입, 스테레오타입 속성(UML 2.0 이전에는 태그 값으로 알려짐), 및 제약 조건을 사용하여 UML의 범위를 특정 도메인으로 제한하고 확장한다. 특정 도메인에 대해 UML을 사용자 정의한 가장 잘 알려진 예는 시스템 공학을 위한 도메인 특화 언어인 SysML이다. UML은 소스 코드, 문서, 테스트 등과 같은 기술적 아티팩트가 도메인 모델에서 알고리즘적으로 생성되는 다양한 모델 기반 개발 접근 방식에서 널리 사용된다. 예를 들어, 법률 문서 표준 Akoma Ntoso의 애플리케이션 프로파일은 UML 클래스 객체에서 법률 개념 및 온톨로지를 표현함으로써 개발될 수 있다.language=en