UML 스테레오타입으로 모델에 도메인 의미를 담는 법

UML Stereotype과 Profile, Tagged Value, Constraints를 활용해 도메인 규칙을 모델·코드·문서 생성 흐름에 연결하는 방법

2026-08-14 · 최초 발행 2025-10-31

표준 UML을 바꾸지 않고 설계 언어를 확장하는 방식

UML 모델은 범용 메타모델만으로도 구조를 표현할 수 있지만, 특정 조직이나 도메인의 규칙까지 담기에는 부족할 수 있다. Stereotype은 Class, Component, Association 같은 UML 메타클래스를 확장해 그 요소에 도메인 특화 의미를 부여하는 메커니즘이다.

이 확장은 UML Profile 안에서 선언한다. Stereotype에 태그 값과 제약을 결합하면 단순한 라벨을 넘어 정책, 속성, 검증 규칙까지 모델에 담을 수 있다.

사회심리학에서 말하는 고정관념과는 구별해야 한다. UML에서 Stereotype은 모델의 의미를 확장하는 장치다. 코드의 Annotation이나 JSON 메타데이터와 비슷한 목적을 갖지만, 표준 메타모델 자체를 변경하지 않는다는 점이 다르다.

Profile은 도메인별 확장을 묶어 재사용하고 버전을 관리하는 단위다. Stereotype은 적용할 메타클래스와 태그 값을 정의하며, Tagged Value는 속성·정책·메타데이터를 키-값 형태로 전달한다. Constraints는 OCL 또는 도구 규칙을 통해 모델의 무결성을 확인한다.

규칙을 모델에 남기고 검증 흐름으로 연결하기

Profile 기반 확장은 표준 UML 스펙을 유지하면서 조직별 의미를 분리하고 모듈화한다. 조직 표준 Profile을 배포하면 모델마다 다른 표기와 해석이 생기는 문제를 줄일 수 있다.

태그 값은 보존기간=3년, PII=true처럼 정책을 명시하는 데 쓰인다. OCL이나 룰 엔진으로 값의 범위와 적용 조건을 검증하면 설계 단계에서 규칙 위반을 발견할 수 있다.

XMI와 XMI+Profile을 사용하면 모델을 내보내고 가져올 수 있어 도구 간 이동성도 확보할 수 있다. 다만 벤더별 확장 기능이 존재하므로, 표준 준수와 벤더 락인 사이의 균형은 별도로 관리해야 한다.

Stereotype은 코드와 다른 산출물 생성에도 연결된다. 언어별 Annotation 또는 Attribute로 매핑하면 코드 생성을 자동화할 수 있고, Swagger, IaC, 정책 문서 같은 문서·스키마 산출물도 함께 만들 수 있다. 이를 운영하려면 중앙 Profile 리포지토리, 버전 정책, 변경 심의 절차가 필요하며, CI 단계의 모델 검증으로 규정 위반을 차단할 수 있다.

도메인 모델에서 배포 정책까지

DDD 모델에서는 AggregateRoot, Entity, ValueObject Stereotype을 정의할 수 있다. 코드 생성 시 이를 @AggregateRoot, @Embeddable 등으로 매핑하면 계층 간 일관성을 유지할 수 있다.

데이터 거버넌스와 보안 모델에서는 Class나 Attribute에 PII, RetentionPolicy, MaskingRule을 적용한다. 스키마 생성 과정에서 컬럼 단위 마스킹·암호화 정책을 반영하는 방식이다.

마이크로서비스 모델에는 Service, ExternalService, SagaParticipant, CircuitBreaker를 사용해 런타임 특성을 선언할 수 있다. 배포 템플릿이나 헬름 차트를 만들 때 리소스, 헬스체크, 리트라이 정책을 자동으로 주입하는 데 연결된다.

API 설계에서는 Idempotent, RateLimited, Deprecated Stereotype이 활용된다. OpenAPI 생성 시 헤더, 429 응답, Sunset 헤더 등을 포함하도록 만들 수 있다.

DevSecOps 위협모델링에는 STRIDE 기반의 SpoofingTarget, TamperSensitive를 정의할 수 있다. 파이프라인에서 사전 정책을 점검하고 보완 대책 체크리스트를 생성하는 흐름으로 이어진다.

프로파일 설계부터 검증 리포트까지의 흐름

입력은 도메인 요구사항, 규제·보안 정책, 조직 설계 가이드와 표준 UML 메타모델, 도구 제약사항이다.

처리 단계에서는 먼저 Profile의 범위, 명명 규칙, 버전 전략을 정한다. 이후 적용 대상 메타클래스, 태그 값 스키마, OCL 또는 룰 제약을 정의한다. 어디에, 언제, 누가 적용할지 RACI로 문서화하고 모델 린트, 태그 기본값, 금지 조합을 검증 파이프라인에 포함한다. 마지막으로 매핑 규칙과 템플릿을 구성해 코드와 문서를 생성한다.

산출물은 검증된 모델(XMI+Profile), 생성된 코드·스키마·문서, 검증 리포트다. 태그 값이 지정되지 않았을 때는 기본값을 적용하거나 빌드를 실패시킬 수 있다. 제약 위반은 오류 목록과 위치, 수정 가이드로 알려야 한다. 충돌하는 Stereotype 조합에는 우선순위 규칙 또는 상호 배타 제약이 필요하다. 도구 불일치에 대비해서는 최소 공약수 Profile과 변환 스크립트를 유지한다.

통과실패입력: 요구/정책/가이드프로파일 설계스테레오타입/태그/제약 정의모델 요소에 적용검증(룰/OCL)아티팩트생성(코드/스키마/문서)수정 피드백배포/리포트

의미 확장 방식별 선택 기준

메커니즘 표현력/확장성 일관성/검증 안정성/이식성 운영 편의 성능 영향
UML Stereotype 높음(메타모델 확장) 높음(프로파일+OCL) 중간(XMI 이식성, 벤더 차이) 중간(도구 의존) 낮음(설계시점)
언어 Annotation/Attribute 중간(언어 범위 내) 중간(컴파일/런타임 체크) 높음(언어 생태계) 높음(IDE/빌드 통합) 낮음
JSON/YAML 메타데이터 중간(스키마 의존) 중간(JSON Schema) 높음(텍스트 기반) 높음(간편 편집) 낮음
OWL/온톨로지 클래스 매우 높음(추론 가능) 높음(일관성 검사) 중간(툴/러닝커브) 낮음(복잡도) 중간(추론 비용)
상속/구성(코드) 낮음(타입 의존) 중간(컴파일 타임) 높음(범용성) 중간(리팩토링 부담) 낮음

UML Stereotype을 Java Annotation으로 매핑하기

JDK 17 이상과 표준 javac·java를 사용한다.

파일: Stereotypes.java

import java.lang.annotation.*;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface AggregateRoot {
    String boundedContext();
    String repository() default "";
}

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.METHOD})
@interface PII {
    String policy() default "mask";
}

파일: Order.java

@AggregateRoot(boundedContext = "Sales", repository = "OrderRepository")
public class Order {
    @PII(policy = "encrypt")
    private String customerEmail;

    private int amount;

    public static void main(String[] args) throws Exception {
        Class<?> cls = Order.class;
        AggregateRoot ar = cls.getAnnotation(AggregateRoot.class);
        System.out.println("AR.bc=" + ar.boundedContext() + ", repo=" + ar.repository());
        var field = cls.getDeclaredField("customerEmail");
        System.out.println("PII.policy=" + field.getAnnotation(PII.class).policy());
    }
}

컴파일과 실행은 다음 명령으로 진행한다.

  • javac Stereotypes.java Order.java
  • java Order
  • 출력 예: AR.bc=Sales, repo=OrderRepository / PII.policy=encrypt

이 예제는 UML의 «AggregateRoot», «PII» Stereotype과 태그 값을 언어 Annotation으로 옮긴다. 모델→코드 생성기에서 Annotation을 주입하면 설계와 구현의 일치를 유지할 수 있다.

모델 규칙을 개발 흐름에 정착시켰을 때

설계 규정 위반을 사전에 차단하면 리뷰 소요를 2035% 절감할 수 있다. 코드와 스키마를 자동 생성하면 반복 작업은 3050% 감소하며, 프로파일을 준수하는 조직에서는 아키텍처 일탈 건수가 분기당 25% 이상 감소할 수 있다.

도메인 언어를 명시하면 팀 간 의사소통이 개선된다. PII와 보존정책 같은 컴플라이언스 요구사항도 모델에서 더 명확하게 확인할 수 있고, 모델·코드·문서의 동기화는 온보딩을 가속한다.

Stereotype은 Profile, 태그 값, 제약으로 설계 규칙을 형상화하고 검증·생성 파이프라인에 연결하는 도구다. DDD, 데이터 거버넌스, 마이크로서비스, DevSecOps에서 활용할 수 있으며, 도구 간 이식성과 벤더별 확장을 고려해 최소 공약수 Profile과 거버넌스 절차를 함께 마련해야 한다.

UML스테레오타입소프트웨어 모델링도메인 모델코드 생성