전략적 설계

모델 통합의 중요성

모델의 일관성을 유지하는 것이 매우 중요합니다. 모델 내의 모든 용어가 일관된 의미를 가져야 하며, 통합되지 않은 모델은 무의미하며, 논리적으로 일관된 모델만이 의미를 가집니다. 이상적인 세상에서는 기업 전체의 도메인을 아우르는 하나의 모델이 존재해야 합니다. 이 모델은 용어의 중복이나 정의의 충돌 없이 통일되어야 합니다. 그러나 대규모 시스템 개발에서는 이러한 통합을 유지하는 것이 실질적으로 어려울 수 있습니다. 따라서 여러 모델이 서로 다른 부분에서 개발되는 것을 허용하면서도, 중요한 부분에서는 모델 통합을 유지해야 합니다.

실질적인 모델 통합 관리

  1. 경계 명확화 (Bounded Context) 각 모델이 적용되는 범위를 명확히 정의해야 합니다. 팀 조직, 코드 기반, 데이터베이스 스키마 등을 기준으로 경계를 설정하고, 모델을 일관되게 유지합니다. 경계 내에서는 모델을 논리적으로 통일시키고, 외부 경계와의 혼동을 피해야 합니다.

  2. 연속 통합 (Continuous Integration) 팀 간의 커뮤니케이션을 증진시키고 모델의 일관성을 유지하기 위해 지속적으로 통합 테스트를 수행합니다. 자동화된 테스트를 통해 모델의 일관성을 검증하고, 스플린터(모델 간의 불일치)가 발생하면 빠르게 수정합니다. 높은 빈도의 코드 통합과 자동화된 테스트는 모델의 일관성을 유지하는 데 필수적입니다.

  3. 공유 커널 (Shared Kernel) 두 팀이 공유하는 도메인 모델의 일부를 지정하여 함께 사용하고 유지 관리합니다. 이 공유 커널은 양 팀이 변경할 때마다 통합 테스트를 실행하여 모델의 일관성을 유지합니다. 공유 커널은 CORE DOMAIN이나 GENERIC SUBDOMAINS를 포함할 수 있으며, 양 팀 간의 중복을 줄이고 통합을 쉽게 만듭니다.

  4. 고객/공급업체 팀 (Customer/Supplier Teams) 상위 시스템과 하위 시스템 간의 명확한 고객/공급업체 관계를 설정합니다. 하위 팀이 상위 팀의 고객 역할을 하여 요구사항을 전달하고, 자동화된 수용 테스트를 함께 개발하여 상위 팀의 테스트 스위트에 추가합니다. 이를 통해 상위 팀은 하위 팀의 요구사항을 충족시키는 동시에 코드 변경에 대한 두려움 없이 작업할 수 있습니다.

  5. 순응자 (Conformist) 상위 팀의 모델에 맞추어 하위 팀의 모델을 조정합니다. 이는 통합 복잡성을 줄이고 일관된 언어를 공유하여 커뮤니케이션을 용이하게 합니다. 이 결정은 하위 팀의 독립성을 제한할 수 있지만, 통합의 복잡성을 크게 줄일 수 있습니다.

  6. 반부패 계층 (Anti-Corruption Layer) 두 시스템 간의 모델 차이를 번역하는 계층을 두어 각 시스템의 모델을 보호합니다. 번역 계층을 통해 모델의 혼동을 방지하고 데이터의 일관성을 유지합니다. 이 계층은 두 모델 간의 개념적 객체와 행위를 변환하며, 시스템 간의 인터페이스를 단순화합니다.

모델 통합 전략

통합의 필요성에 따라 경계를 설정하고, 통합의 복잡성을 최소화하기 위한 전략을 선택합니다. 시스템 간의 통합 필요성이 적다면 경계를 명확히 하고 독립적인 모델을 유지하는 것이 좋습니다. 통합이 필요한 경우에는 공유 커널이나 고객/공급업체 팀 등의 패턴을 사용하여 모델 간의 일관성을 유지합니다. 통합이 불가피한 경우 반부패 계층을 도입하여 각 모델을 보호하고 번역합니다.

경계의 명확화

경계를 명확히 정의함으로써 두 팀은 한 모델을 일관되게 유지해야 한다는 것을 명확히 이해하게 됩니다. 경계 밖의 팀은 독립적으로 작업할 수 있으며, 불필요한 혼동을 피할 수 있습니다. 경계 간 통합은 번역이 필요하며, 이를 명시적으로 분석할 수 있습니다.

경계의 정의와 관리

경계를 정의하는 것은 프로젝트의 일관성을 유지하는 데 필수적입니다. 각 팀은 명확히 정의된 경계 내에서 모델을 일관되게 유지하고, 경계 간의 상호 작용을 명확히 이해해야 합니다. 이를 통해 혼동을 피하고, 불필요한 중복 작업을 줄일 수 있습니다. 경계의 정의는 코드, 데이터베이스 스키마, 팀 조직 등을 기준으로 명확히 해야 하며, 이를 통해 모델의 일관성을 유지할 수 있습니다.

연속 통합의 중요성

연속 통합은 모델의 일관성을 유지하는 데 중요한 역할을 합니다. 팀 간의 커뮤니케이션을 증진시키고 모델의 변경 사항을 지속적으로 통합하여 일관성을 유지합니다. 자동화된 테스트를 통해 모델의 일관성을 검증하고, 문제 발생 시 빠르게 수정할 수 있습니다. 높은 빈도의 코드 통합과 자동화된 테스트는 모델의 일관성을 유지하는 데 필수적입니다.

공유 커널의 활용

공유 커널은 두 팀이 공유하는 도메인 모델의 일부를 지정하여 함께 사용하고 유지 관리하는 방법입니다. 공유 커널은 양 팀이 변경할 때마다 통합 테스트를 실행하여 모델의 일관성을 유지합니다. 공유 커널은 CORE DOMAIN이나 GENERIC SUBDOMAINS를 포함할 수 있으며, 양 팀 간의 중복을 줄이고 통합을 쉽게 만듭니다. 공유 커널을 통해 모델의 일관성을 유지하면서도 각 팀의 독립성을 보장할 수 있습니다.

고객/공급업체 팀의 관계 설정

고객/공급업체 팀 관계를 설정하여 상위 시스템과 하위 시스템 간의 명확한 역할을 정의합니다. 하위 팀이 상위 팀의 고객 역할을 하여 요구사항을 전달하고, 자동화된 수용 테스트를 함께 개발하여 상위 팀의 테스트 스위트에 추가합니다. 이를 통해 상위 팀은 하위 팀의 요구사항을 충족시키는 동시에 코드 변경에 대한 두려움 없이 작업할 수 있습니다. 고객/공급업체 팀 관계를 통해 각 팀의 역할을 명확히 하고, 모델의 일관성을 유지할 수 있습니다.

순응자의 역할

순응자는 상위 팀의 모델에 맞추어 하위 팀의 모델을 조정하는 역할을 합니다. 이는 통합 복

잡성을 줄이고 일관된 언어를 공유하여 커뮤니케이션을 용이하게 합니다. 순응자 패턴은 하위 팀의 독립성을 제한할 수 있지만, 통합의 복잡성을 크게 줄일 수 있습니다. 상위 팀의 모델에 맞추어 하위 팀의 모델을 조정함으로써 통합의 복잡성을 줄이고, 일관된 언어를 공유할 수 있습니다.

반부패 계층의 도입

반부패 계층은 두 시스템 간의 모델 차이를 번역하는 계층을 두어 각 시스템의 모델을 보호합니다. 번역 계층을 통해 모델의 혼동을 방지하고 데이터의 일관성을 유지합니다. 반부패 계층은 두 모델 간의 개념적 객체와 행위를 변환하며, 시스템 간의 인터페이스를 단순화합니다. 반부패 계층을 도입하여 각 모델을 보호하고 번역함으로써 시스템 간의 통합을 용이하게 할 수 있습니다.

모델 통합 전략의 적용

모델 통합 전략을 적용하여 시스템 간의 통합 필요성을 평가하고, 경계를 설정하며, 통합의 복잡성을 최소화합니다. 시스템 간의 통합 필요성이 적다면 경계를 명확히 하고 독립적인 모델을 유지하는 것이 좋습니다. 통합이 필요한 경우에는 공유 커널이나 고객/공급업체 팀 등의 패턴을 사용하여 모델 간의 일관성을 유지합니다. 통합이 불가피한 경우 반부패 계층을 도입하여 각 모델을 보호하고 번역합니다.

Last updated