반응형
Notice
Recent Posts
Recent Comments
관리 메뉴

간단한 개발관련 내용

도메인 주도 설계(DDD) - 전략적 설계 본문

Computer Science/Architechture & Design Patterns

도메인 주도 설계(DDD) - 전략적 설계

vincenzo.dev.82 2024. 12. 23. 19:11
반응형

도메인 주도 설계(DDD) - 전략적 설계 요약

도메인 주도 설계의 전략적 설계(Strategic Design)는 도메인의 큰 그림을 이해하고 관리 가능한 하위 도메인으로 나누어 비즈니스와 기술의 복잡성을 효과적으로 관리하는 방법론입니다. 이 과정에서 바운디드 컨텍스트(Bounded Context), 유비쿼터스 언어(Ubiquitous Language), 그리고 도메인 간 협력 패턴을 정의합니다.


1. 전략적 설계의 핵심 개념


1.1 비즈니스 도메인 분석

  • 비즈니스 도메인: 기업이 고객에게 제공하는 주요 활동 영역.
  • 하위 도메인: 비즈니스 활동을 세분화한 영역.
    • 핵심 하위 도메인: 경쟁 우위를 제공하며 복잡성과 변동성이 높음.
    • 일반 하위 도메인: 모든 회사에서 동일하게 수행하는 활동 (로그인, 인증 등).
    • 지원 하위 도메인: 비즈니스를 지원하지만 경쟁 우위를 제공하지 않음 (CRM, 보고서 생성 등).

하위 도메인 비교

특성 핵심 일반 지원
경쟁 우위 높음 없음 낮음
복잡성 높음 보통 낮음
변동성 높음 보통 낮음
솔루션 전략 내부 개발 상용 솔루션 사용 외주 가능

1.2 도메인 지식과 유비쿼터스 언어

  • 도메인 지식: 도메인 전문가의 멘탈 모델에서 얻어지는 비즈니스 로직과 요구사항.
  • 유비쿼터스 언어: 비즈니스 도메인과 기술적 설계를 잇는 공통 언어.
    • 모든 팀원(개발자, 도메인 전문가)이 일관된 용어를 사용.
    • 테스트, 문서화, 소스 코드에 반영되어야 함.
    • 모호한 용어동의어 사용 금지.

1.3 바운디드 컨텍스트

  • 정의: 하나의 유비쿼터스 언어가 적용되는 명확한 경계를 가진 영역.
  • 목적: 서로 다른 컨텍스트 간 모델 충돌을 방지하고 관리 가능성을 높임.
  • 하위 도메인과의 관계:
    • 하위 도메인은 비즈니스 영역에서 식별되고,
    • 바운디드 컨텍스트는 소프트웨어 설계에서 이를 기술적으로 구현.

바운디드 컨텍스트 설계 시 고려사항

  • 컨텍스트 간 의존성 최소화.
  • 도메인 전문가의 멘탈 모델에 기반한 유비쿼터스 언어.

1.4 도메인 간 협력 패턴

바운디드 컨텍스트 간의 협력 방식은 다음과 같은 패턴으로 정의됩니다.

협력형 패턴

  • 파트너십:
    • 두 컨텍스트가 동등한 관계로 협력.
    • API 호출, 메시지 큐, 이벤트 기반 통신 등 사용.
    • 장점: 독립성과 확장성.
    • 단점: 통신 비용, 장애 전파 가능성.
  • 공유 커널:
    • 공통 모델이나 코드를 공유.
    • 장점: 중복 제거, 통합 용이.
    • 단점: 높은 의존성과 낮은 독립성.

사용자 패턴

  • 순응주의자: 다운스트림 컨텍스트가 업스트림의 모델에 적응.
    • 예: 산업 표준 API 채택.
  • 충돌 방지 계층(ACL): 업스트림 모델을 다운스트림 요구에 맞게 변환.
    • 다운스트림 컨텍스트가 핵심 하위 도메인을 포함할 때 적합.
  • 오픈 호스트 서비스(OHS): 업스트림 컨텍스트가 사용자 모델 번역을 담당.

분리형 노선

  • 서로 간의 협력이 불필요하거나 불가능할 때 각자 독립적으로 동작.

2. 전략적 설계의 실질적 효과

  1. 복잡성 관리: 도메인을 바운디드 컨텍스트로 분리하여 명확히 정의.
  2. 유연성 확보: 각 컨텍스트는 독립적으로 발전 가능.
  3. 효율적 커뮤니케이션: 유비쿼터스 언어로 팀 간 지식 공유.
  4. 비즈니스 가치 극대화: 핵심 하위 도메인에 집중하고 일반/지원 도메인은 효율적 관리.

백엔드 개발자로서 가져야 할 자세

1. 비즈니스 이해를 위한 적극적 자세

  • 비즈니스 도메인과 핵심 가치를 이해하려는 노력을 기울이세요.
    • 도메인 전문가와의 협업을 통해 문제를 깊이 파악.
    • 유비쿼터스 언어를 코드에 일관되게 반영.

2. 기술과 비즈니스 간의 연결자 역할

  • 소프트웨어는 비즈니스 문제를 해결하는 도구입니다.
    • 기술적 솔루션을 설계할 때, 항상 비즈니스의 목표를 기준으로 삼으세요.
    • 핵심 도메인에는 최대한의 품질과 유연성을, 일반/지원 도메인에는 효율성을 추구하세요.

3. 커뮤니케이션 역량 강화

  • 도메인 전문가, 다른 개발자, 비즈니스 이해관계자들과 효과적으로 소통.
    • 기술 용어 대신 비즈니스 언어로 설명할 수 있도록 연습하세요.

4. 시스템 전체를 보는 시각

  • 바운디드 컨텍스트 간의 연동, 의존성, 데이터 흐름을 이해.
    • 분산 시스템 설계에서 API, 메시지 큐, 이벤트 기반 설계의 장단점을 상황에 맞게 활용.

5. 지속적인 학습과 개선

  • 도메인에 대한 이해는 프로젝트 진행 중에도 계속 발전합니다.
    • 새로운 도메인 지식을 유비쿼터스 언어와 모델에 반영하는 습관을 가지세요.

결론

전략적 설계는 단순히 코드를 작성하는 것을 넘어, 비즈니스 문제를 해결하는 데 초점을 맞춘 소프트웨어 설계 방법론입니다. 백엔드 개발자는 이를 이해하고 실천함으로써 기술적 전문성과 함께 비즈니스 가치를 창출하는 역량을 갖춰야 합니다. 비즈니스를 이해하는 개발자가 되는 것이 성공적인 백엔드 개발자로 성장하는 핵심입니다.

반응형