{{위키데이터 속성 추적}}
'''모델 구동형 아키텍처'''(Model Driven Architecture, MDA)는 객체 컴포넌트 표준 그룹인 [[객체 관리 그룹]](OMG)에서 내세운 모델 중심의 IT 구조로서 모델을 구조적 선택과 기술적 목표에서 독립시킴으로써 모델의 부가 가치를 강조하는 기술이다. 구조 관련 정보는 모델 분리, 모델 변환 규칙, 생성 규칙, 모델링, 기존 구조에 대한 발전 지침을 통해서 표현되며, 플랫폼 선택의 독립으로 모델 주도형 구조(MDA) 기반의 응용 프로그램들은 상호 운용성, 진취성, 재사용에 유리할 뿐 아니라 새로운 기술을 빠르게 받아들일 수 있다. 모델링을 위한 UML, 모델 교환을 위한 [[XML]]/XMI(XML Metadata Interchange), 기본 비즈니스 모델(금융, 의료, e-커머스), 기본 구조 모델(지속성, [[트랜잭션]], 분배, 보안) 등 OMG가 기존 개발한 표준에 기반을 두고 있으며, MDA 사용은 현재의 시스템에 새로운 응용 프로그램을 통합하는 환경을 제공한다.
 

== 정의 ==
* 소프트웨어가 구동되는 특정 인프라 스트럭처나 플랫폼에 한정되지 않고 개발될 수 있도록 UML을 기반으로 한 플랫폼에 독립적인 모델을 만들고 이를 원하는 특정 플랫폼에 맞도록 변환해서 사용하는 차세대 SW 개발 기술
* OMG가 그동안 만들어낸 플랫폼 기술과 표준 모델링 언어(UML)를 이용하여 구현된 여러 산업의 표준안을 결합한 모델 방식의 새로운 SW 아키텍처

== 탄생 ==
OMG의 중심이 CORBA에서 UML로 넘어가는 시점에 OMG 내부에서는 MDA에 대한 구상을 의논하는 그룹들이 생겨나기 시작했다. UML의 시장주도적인 힘을 바탕으로 CORBA가 이뤄내지 못했던 이기종 플랫폼 및 언어독립성을 비교적 받아들이기 쉬운 방법으로 제시하려는 노력들이 모여서 MDA가 탄생하게 되었다. MDA는 2001년 3월 OMG의 CEO인 리차드 솔리(Richard M. Soley)가 ‘OMG Model Driven Architecture’라는 제목의 프리젠테이션을 통해 공식적으로는 처음 세상에 알려지게 되었다. 이 발표를 시작으로 MDA에 대한 구체적인 규격을 논의하기 시작해서 2003년 6월에 공식적인 ‘MDA Guide v 1.0’이 공개되었다.

== 배경 ==
* 기술의 복잡화(상호운영성 결여, 소프트웨어 개발의 어려움, 이식성 부족)
* 서비스 환경의 다양화
* 기술의 급격한 변화
 
=== 시작은 OMA에서 ===
OMG는 1989년 OMA(Object Management Architecture)을 발표한다. OMA에서 가장 중요한 역할을 하는 것이 CORBA이다. CORBA는 다양한 프로그래밍 언어 간의 상호운용성을 위해 IDL(Interface Definition Language)이라는 것을 도입했으며, 플랫폼 독립적인 프로토콜을 위해 IIOP(Internet Inter-Operable Protocol)와 같은 프로토콜 표준안을 제시한다.

OMA는 크게 분산 객체 명세와 객체간 원격 호출의 신뢰성, 상호운용성, 이식성 등을 보장하는 ORB가 그 핵심에 있다. ORB를 통해 객체(컴포넌트, 서비스 등으로 대치시켜도 무방하다)를 배포할 수 있었고 배포된 객체는 실행 환경에서 (재)사용된다.
OMA에서는 비즈니스 처리에 도움을 주는 편의 기능인 퍼실리티(CORBA Facility)를 준비하고 있다. 퍼실리티는 특정 도메인(금융권, 국방, 행정, 모바일)에서 자주 쓰이는 수직적(vertical) 퍼실리티와 소프트웨어 개발시에 일반적으로 사용할 수 있는([[데이터 압축]], 룰 처리, 워크플로우 처리, 컬렉션 등) 수평적(horizontal) 퍼실리티가 있다. 이로써 개발자들은 일반적으로 사용하는 수평적 편의 기능들과 현재 산업 도메인의 표준으로 정의된 모델인 수직적 편의 기능을 조합해 자신의 애플리케이션에 맞게 최적화, 특화해 개발하게 된다.
 
== MDD(Model Driven Development) ==
플랫폼 독립적인 SW 모델로부터 플랫폼 종속적인 SW 모델로 자동 변환하고, 소스코드를 자동 생성하는 방법으로서 원하는 플랫폼에 맞는 SW를 쉽고 빠르게 개발 가능하다.

== MDD SW 개발의 핵심 요소 기술 ==
* 플랫폼 독립 모델(PIM: Platform Independent Model) 생성 기술
* 플랫폼 종속 모델(PSM: Platform Specific Model) 생성 기술
* 기술 매핑 자동화 기술
* MOF(Meta Object Facility) 기반 정보 저장소 기술
 
== 목표 ==
* 개발을 위한 최대한의 플랫폼을 준비해 놓고 각 도메인 전문가들이 완성한 표준 모델들을 제공하여 개발에 필요한 최대한의 생산성을 극대화시킨다.
* MDA는 이제 CORBA만을 고집하지 않고 J2EE, 닷넷, 웹 서비스 등 다른 플랫폼을 아키텍처에 포함시켰다.
* OMA에서의 개발 프로세스와 매우 유사한 방법으로 개발 가능하다.
* MDA 산업 도메인 모델을 기반으로 현 시스템이 필요한 모델들을 추출한 후, 최적화시킬 부분을 커스터마이징 한다.
* 도메인 모델에 표현되지 않은 특화시켜 추가 개발해야 할 모델들을 모델링하므로 PIM(플랫폼 독립적인 모델: Platform Independent Model)을 완성한다.
* MDA 프로세스에 따라 PSM(플랫폼 의존적인 모델: Platform Specific Model)으로 모델 전이(Model Transform)를 하고 해당 플랫폼에 대한 소스코드를 생성한다.
 
== 전형적인 방법론 접근법이 이입된 MDA ==
* RUP 모델
* MDA 모델
* 플랫폼 독립
* 호환 범위
* Business Model
* PIM
* O
* 비즈니스 도메인
* Analysis Model
* PIM
* O
* 플랫폼
* Design Model
* PSM
* X
* 시스템
* Code
* Code
* X
* X

== MDA 개발 프로세스를 단계별 스텝 ==
# 애플리케이션에 대한 비즈니스 요구사항을 수집한다.
# 도메인 모델에 대한 UML 다이어그램을 작성한다. 먼저 J2EE, 닷넷, CORBA와 같은 특정 기술에 종속적이지 않은 모델을 먼저 만든다. 이렇게 작성된 UML 모델은 핵심 비즈니스 서비스와 컴포넌트를 나타내게 되는데, 예를 들자면 가격 결정 엔진이라든지 쇼핑 카트 모델이라든지 주문 모델 같은 것들이 될 것이다. 이러한 UML 모델을 PIM이라고 한다.
# 애플리케이션에 대한 특정 기술과 관련한 UML 모델을 작성한다. 이와 같이 특정 기술에 종속적인 UML 모델을 PSM이라고 한다. PSM은 직접 작성할 수도 있고 MDA 지원 툴을 이용해서 PIM에서 자동으로 만들어내거나 또는 만들어진 모델을 수정하는 방식으로 작업한다.
# 마지막으로 MDA 툴을 이용해서 애플리케이션 코드를 만들어낸다. 현재 이미 J2EE의 경우에는 MDA 툴들이 대부분의 서블릿, JSP, EJB와 관련한 코드를 자동을 생성해준다. 그 다음에 만들어진 코드를 바탕으로 수정과 최적화 과정을 거쳐서 프로젝트를 완성한다.

== 단계 ==
=== 내용 ===
* 1단계
UML을 이용해 구현 독립적인 모델(PIM)을 작성, 기본 서비스나 각 문제 영역에 관련된 모델을 이용하여 작성
* 2단계
자동화 도구(Mapping Tool)를 이용해 구현 PIM을 PSM UML 로 변환
* 3단계
자동화 도구(Code Generation Tool)를 활용, 구현환경에 적합한 프로그램을 만들어 내며 구체적인 기능 등은 직접 프로그래밍

== 구성 요소 ==
* MOF (Meta Object Facility)
** 모델정보에 대한 표준적인 저장소를 제공하고 표준화된 방식으로 모델 정보를 접근하는 구조를 정의
* UML (Unified Modeling Language)
** 객체 및 컴포넌트 시스템을 표현하기 위한 언어
* XML (XML Metadata Interchange)
** UML로 기술된 모델정보의 XML 표현에 대한 표준
* CWM (Common Warehouse Metamodel)
** 데이터 저장소 통합에 대한 표준을 정의하고 데이터베이스 모델과 스키마 변화 모델, OLAP, 데이터 마이닝 모델에 대한 표준화된 방법을 제공

== MDA 적용의 장점 ==
=== 기술 플랫폼 및 기능 변화에 대한 신속한 대응 ===
MDA에서는 PIM과 PSM을 분리했기 때문에 PIM을 변경하지 않고도 기술 플랫폼의 변화나 요구사항 변화에 발 빠르게 대처할 수 있다. 새로운 플랫폼에 대한 애플리케이션을 배포해야 하는 경우 PIM에는 수정이 필요 없으므로 단지 PIM을 이용해서 새로운 플랫폼에 대한 PSM을 자동으로 만들어내고, 이를 수정해서 코드를 다시 생성하는 과정을 통해 쉽게 새로운 기술 플랫폼에 대한 대응이 가능하다.
=== 시스템의 지속성  ===
플랫폼 의존적인 시스템은 기존의 아키텍처가 새로운 요구사항을 만족시키지 못하는 경우가 많이 발생한다. MDA를 이용하면 기능과 아키텍처를 분리해서 정의하기 때문에 아키텍처의 변화가 있더라도 변환 과정을 거쳐 구현 과정으로 쉽게 진행할 수 있기 때문에 기능과 요구사항 변화에 의한 아키텍처 변경에 비교적 자유롭다. 이런 장점은 시스템의 생명주기를 연장시키며 더 안정된 시스템 유지를 가능하게 한다.
=== 개발 생산성 증진 ===
MDA는 모델의 자동화와 변환을 통해 여러 플랫폼을 쉽게 지원하고 시간을 많이 잡아먹는 코드 작성 부분을 줄일 수 있으며 쉽게 유지보수가 되도록 함과 동시에 빨리 버그를 잡을 수 있다. 한 번 작성된 PIM의 경우 비즈니스 핵심 부분에 대한 모델이기 때문에 향후 다른 시스템에서도 쉽게 이용될 수 있으며 재사용성이 높아지게 된다. 
=== 용이한 문서 작성 ===
MDA에서는 모델과 코드, 문서가 항상 동기화되기 때문에 이러한 문서 작업에 필요한 일의 양을 줄여준다.
=== 품질 관리 비용의 감소 ===
MDA 모델 자동화와 테스트 툴을 이용하면 개발자들이 애플리케이션을 모델 수준에서 테스트할 수 있기 때문에 디자인의 문제점이나 애플리케이션 로직의 에러를 빨리 잡을 수 있다. 이를 통해 품질 관리에 들어가는 비용도 감소한다.
=== 양질의 시스템 구축 ===
PIM의 단순함은 양질의 시스템 구축을 가능하게 한다. 모델링은 팀 멤버들 사이의 의사소통을 원활하게 만들고 동시에 결점이 있을 때 이를 빨리 제거할 수 있도록 도와준다. 또한 MDA의 자동화 도구들은 잘 정리된 코딩 패턴을 모델에 적용하기 때문에 손으로 직접 작성한 코드에 비해 결점이 적을 가능성이 많다.
 
== 향후 전망 ==
* 외부 아웃소싱 개발업체보다 기업의 현업 담당자가 직접 분석 및 설계도를 만들고 개발 업체에 제공해 호환성을 갖춘 IT 시스템을 개발하는 것이 옳다는 인식이 확산
* 다양한 컴포넌트 플랫폼에 맞는 SW를 자동으로 생산할 수 있도록 SW 모델 자동매핑과 변환기술을 중심으로 MDD 방법의 중요성 부상
* OMG에서 작업 중인 영역별(전자상거래, 재무, 의료, 생산, 통신, 교통, 우주항공 등) 7개 분야 아키텍처 표준화 작업도 MDD를 채택하여 진행 중
* 미국: 국가 IT개발 프로젝트에서 모델 주도형 SW 생산 기술을 주요 분야로 채택
* 유럽: SW 공학 연구 분야에서 MDE(Model Driven Engineering) 프로젝트
== 같이 보기 ==
* [[자동 프로그래밍]]
* [[도메인 주도 설계]]
* [[메타 오브젝트 퍼실리티]]
* [[메타모델링]]
* [[모델 기반 개발]]
* [[통합 모델링 언어]]
* [[QVT]]
* [[웹 공학]]

{{전거 통제}}

[[분류:시스템 공학]]