💡 핵심 인사이트
MDA(Model Driven Architecture)는 코딩(Java, C#)에 의존하지 않고, UML 같은 '시각적 모델(도면)'을 먼저 완벽하게 그려놓으면, 도구가 알아서 특정 플랫폼(Spring, .NET)에 맞는 소스 코드로 자동 변환해 주는 소프트웨어 개발 패러다임입니다.
핵심은 비즈니스 로직(PIM)과 기술 플랫폼(PSM)을 완벽히 분리하여 플랫폼 종속성을 극복하는 것입니다.
Ⅰ. MDA의 등장 배경 (플랫폼 종속성의 문제)
소프트웨어의 수명 주기에서 '비즈니스 핵심 로직(예: 은행의 이자 계산 방식)'은 10년이 지나도 잘 바뀌지 않습니다. 반면, 이를 구현하는 'IT 기술 플랫폼(OS, 언어, 프레임워크)'은 EJB ➔ Spring ➔ 클라우드/MSA 등으로 3~4년마다 급격히 변합니다.
과거에는 코드를 짤 때 비즈니스 로직과 기술 플랫폼(예: Java/Spring 종속 코드)이 스파게티처럼 얽혀 있었습니다. 그래서 플랫폼이 구형이 되어 시스템을 차세대(Next) 플랫폼으로 옮기려면 처음부터 코드를 다 다시 짜야 했습니다. OMG(Object Management Group)는 이 문제를 해결하기 위해 **"기술(플랫폼)에 독립적인 순수한 모델만 잘 만들어두면 코드는 툴이 알아서 찍어내게 하자"**는 MDA 개념을 창안했습니다.
Ⅱ. MDA의 핵심 3계층 (CIM ➔ PIM ➔ PSM)
MDA는 추상화 수준에 따라 모델을 3단계로 변환하며 코드로 나아갑니다.
1. CIM (Computation Independent Model, 연산 독립 모델)
- 개념: 가장 최상위 모델입니다. IT 시스템이나 컴퓨터의 개입을 전혀 고려하지 않고, 비즈니스 도메인 전문가와 사용자가 이해할 수 있는 비즈니스 요구사항과 업무 프로세스만을 모델링합니다. (예: 요구사항 정의서, 유스케이스 다이어그램)
2. PIM (Platform Independent Model, 플랫폼 독립 모델)
- 개념: MDA의 가장 핵심입니다. CIM을 바탕으로 소프트웨어 시스템의 논리적 구조를 설계하되, 구체적인 기술(Java, C++, Oracle 등)을 전혀 포함하지 않고 '순수한 비즈니스 로직과 데이터 구조'만을 UML로 모델링한 것입니다.
- 장점: PIM 하나만 잘 만들어두면 향후 10년, 20년 동안 기술이 어떻게 변하든 재사용할 수 있습니다.
3. PSM (Platform Specific Model, 플랫폼 종속 모델)
- 개념: PIM을 특정 플랫폼(예: Spring Boot REST API, 관계형 DB 테이블)에 맞게 맵핑(변환)한 상세 설계 모델입니다.
- 자동화: MDA 도구는 PIM을 입력받아 개발자가 지정한 규칙(Transformation Rule)에 따라 PSM으로 자동 변환하고, 최종적으로 이 PSM을 기반으로 실제 소스 코드(.java, .cs 파일)를 생성해 냅니다.
[ 업무 전문가 ] CIM (업무 프로세스)
▼
[ 시스템 분석가 ] PIM (기술에 구애받지 않는 순수 객체 모델)
▼ ◀── (MDA 변환 도구 / 플랫폼 특성 주입)
[ 개발자/도구 ] PSM (Java/Spring 전용 모델)
▼ ◀── (Code Generator)
[ 최종 결과물 ] Source Code (실행 가능한 코드)
Ⅲ. MDA의 장단점
- 장점:
- 상호 운용성과 이식성: 플랫폼 기술(Java ➔ C#)이 바뀌어도 PIM은 그대로 둔 채 변환 규칙(Transformation Rule)만 바꾸면 새로운 코드를 얻을 수 있습니다.
- 생산성 증가: 반복적인 코딩(Getter/Setter, DB 접근 코드 등)을 도구가 자동으로 생성해 주므로 개발 시간이 단축됩니다.
- 단점:
- 이를 완벽하게 지원하는 상용 MDA 변환 도구(Tool)가 매우 비싸고 무겁습니다.
- 개발자가 UML 모델링에 대한 고도의 전문 지식을 갖추고 있어야 하므로 진입 장벽이 높습니다.
📢 섹션 요약 비유: MDA는 **"붕어빵 틀(PIM) 기계"**입니다. 밀가루 반죽만 넣을지, 팥을 넣을지(비즈니스 로직) 완벽한 틀(PIM)만 깎아두면, 가스불로 굽든 전기 오븐(플랫폼 PSM)으로 굽든 기계가 알아서 똑같은 모양의 맛있는 붕어빵(소스 코드)을 대량으로 찍어냅니다.