일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 디자인패턴
- 성능
- notification
- Java
- Push
- 카프카
- graphql
- 카프카 트랜잭션
- kafka
- gcm 푸시 번역
- APNS
- nginx
- 페이스북 번역
- nginx설치
- 푸시
- nginx설정
- git
- 도메인 주도 개발
- 웹사이트 성능
- GCM 번역
- 푸시 번역
- JPA
- ddd
- 웹사이트성능
- Design Pattern
- 자바스크립트
- php
- GCM
- 웹사이트최적화기법
Archives
- Today
- Total
간단한 개발관련 내용
도메인 주도 설계(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. 시스템 전체를 보는 시각
- 바운디드 컨텍스트 간의 연동, 의존성, 데이터 흐름을 이해.
- 분산 시스템 설계에서 API, 메시지 큐, 이벤트 기반 설계의 장단점을 상황에 맞게 활용.
5. 지속적인 학습과 개선
- 도메인에 대한 이해는 프로젝트 진행 중에도 계속 발전합니다.
- 새로운 도메인 지식을 유비쿼터스 언어와 모델에 반영하는 습관을 가지세요.
결론
전략적 설계는 단순히 코드를 작성하는 것을 넘어, 비즈니스 문제를 해결하는 데 초점을 맞춘 소프트웨어 설계 방법론입니다. 백엔드 개발자는 이를 이해하고 실천함으로써 기술적 전문성과 함께 비즈니스 가치를 창출하는 역량을 갖춰야 합니다. 비즈니스를 이해하는 개발자가 되는 것이 성공적인 백엔드 개발자로 성장하는 핵심입니다.
반응형