Chapter 2: 바운디드 컨텍스트 및 보편언어와 전략적 설계
💡 책에서 기억하고 싶은 내용
DDD는
바운디드 컨텍스트내에서보편언어를 모델링하는 것에 대한 것이다
바운디드 컨텍스트
바운디드 컨텍스트는 의미적으로 동일한 컨텍스트의 범위를 표현한다그 범주 내에서 소프트웨어 모델의 각 컴포넌트는 특정한 의미를 갖고, 특정한 일을 수행한다는 의미다
바운디드 컨텍스트 컨텍스트 내에 존재하는 컴포넌트들은 컨텍스트에 특화되어 있으며, 컨텍스트 안에서 의미가 살아난다
바운디드 컨텍스트 는 모델이
구현 되는 곳이고, 바운디드 컨텍스트마다각각 분리된 소프트웨어 산출물이 나온다각각의 바운디드 컨텍스트는
단일 팀에만 할당되어야 하고, 각 바운디드 컨텍스트마다독립적인 소스 코드 레파지토리가 있어야 한다한 팀은 다수의 바운디드 컨텍스트에 대해 일을 할 수 있지만, 다수의 팀이 하나의 바운디드 컨텍스트를 수행할 수는 없다
보편언어를 나눈 것과 같은 방법으로, 바운디드 컨텍스트마다
Source code와DB Schema도 명확히 분리한다하나의 바운디드 컨텍스트를 한 팀이 수행한다는 것은 특히 중요한데, 이는 다른 팀이 소스 코드를 변경할 때 문제가 발생할 가능성을 완전히 제거할 수 있기 때문이다
각 팀은 각자의 소스 코드와 데이터베이스를 소유하고,
공식 인터페이스를 정의해서바운디드 컨텍스트를 다른 팀이 사용할 수 있게 허용한다이것이 DDD 사용의 이점이다!
DDD는 서로 다른 개념들을 각기 다른
바운디드 컨텍스트안으로 분리해 놓음으로써개념간 차이를 더욱 중시한다각기 다른 언어와 그에 따른 기능이 존재하는 것을 인정하는 것이다
바운디드 컨텍스트는 한 덩어리로 뭉쳐 있지 않기 때문에
테스트를 하나의 모델에 집중할 수 있다테스트 양이 적어지고, 더 빨리 테스트를 수행할 수 있다는 장점이 있다
보편언어
바운디드 컨텍스 안에서 사용되는 언어는 팀 구성원들이 이야기 할 때 사용되고, 소프트웨어 모델 안에 구현되기 때문에
보편언어라고 부른다보편언어는 엄격하고, 정확하고, 엄중하며, 단호해야 한다팀의 누군가가
보편언어표현을 사용하면, 팀 모두가 그 표현이 가진 제약사항과 정확한 의미를 이해한다그 표현은 개발되고 있는 소프트웨어 모델을 정의하는 모든 언어처럼 팀 내에서 보편적이기 때문이다
핵심 도메인
바운디드 컨텍스트가 조직의 핵심 전략적 계획으로 개발되고 있을 때, 이를
핵심 도메인이라고 한다핵심 도메인은 가치 있는 것들을 달성하는수단이 되기 때문에 가장 중요한 소프트웨어 모델 중 하나다무엇이
핵심도메인이어야 하고, 어떤 것을 제외시켜야 하는지 현명하게 선택해야 한다
기본적인 전략적 설계를 하려면
바운디드 컨텍스트는
전략적 계획의 핵심이 되는모든 개념들을 밀접하게 유지하면서 표용해야하고,나머지는 모두 제외시켜야 한다엄격하게 핵심만 걸러낸 후 살아남은 개념들은 해당 바운디드 컨텍스트를 소유하는 팀의
보편언어 일부가 된다경계는 그 엄격함을 강조한다
필수적인 두 가지 그룹 (
도메인 전문가와소프트웨어 개발자)을 하나로 묶어서로 협업하는 팀을 만들어야 한다도메인 전문가도메인 전문가는 당연히 비즈니스 문제에 좀 더 집중할 것이다그들의 생각은 비즈니스가 동작하는 방법에 대한 비전에 의미를 둔다
도메인 전문가는 다양한 비즈니스 영역들마다 존재한다이것은 직책이 아니라,
비즈니스에 중점을 두는 사람들을 의미한다
팀의 보편언어의 토대는 비즈니스를 바탕으로 한 도메인 전문가들의 멘탈 모델이다
개발자개발자는 소프트웨어 개발에 중점을 둔다
DDD 프로젝트를 수행하는 개발자는
핵심 전략 목표의 비즈니스 초점을 받아들이지 못하는 기술 중심의 주장을 하지 않도록 조심해야 한다즉, 개발자는
근거 없는 간결성은 피하고, 해당 팀의 바운디드 컨텍스트 안에 팀이 점진적으로 개발하는보편언어를 수용할 수 있어야 한다
DDD를 사용하는 이유는
비즈니스 모델의 복잡도가 높기 때문이다그렇다고 해서 모델이 가지는 복잡도 이상으로 복잡한 모델을 만들 이유는 없다
프로젝트의
기술적 축면보다비즈니스 모델이 더 복잡하기 때문에 DDD를 사용한다이것이 바로 개발자가
도메인 전문가와 함께 비즈니스 모델을 파고들어야 하는 이유다!
개발자와 도메인 전문가 모두 문서로만 소통하는 상황을 피해야 한다
최고의 보편언어는 서로 협업하며 나오는
거듭된 피드백에 의해 만들어지며, 이 과정에서 팀의화합된 멘탈 모델을 만들 수 있다
보편언어 개발하기
핵심 도메인을 명사에만 제한시킬 필요가 없다핵심 도메인이 도메인 모델에 나타난 개념에 대한
구체적인 시나리오들을 나타낼 수 있게 만들어야 한다
거듭해서 모델을 개선할 방법을 찾는 것이 필요하다코드가 모델이고, 모델이 코드다
시나리오 안의 개념에 이름을 붙이거나 구별할 수 있는 정체성을 부여하는 것이 도움이 될 때만, 별도의 이름과 구분짓는 특성을 부여하자
아키텍처
포트와 어댑터아키텍처 다이어그램을 보면, 바운디드 컨텍스트가도메인 모델 이상의 다양한 요소들로 구성되는 것을 확인할 수 있다이런 레이어들은 거의 모든 바운디드 컨텍스트 내에 존재한다
Input Adapter사용자 인터페이스 컨트롤러
REST endpoints
Message listener
Application ServiceUse case를 조율하고 트랜잭션을 관리한다
Domain Model우리가 중점을 두는 도메인 모델
Output Adapter영속성 관리(Persistence management)
Message sender
포트와 어댑터는 초기 아키텍처에서도 사용할 수 있지만, 이들이 DDD와 함께 사용할 수 있는 고유한 것은 아니다필요하다면 포트와 어댑터뿐만 아니라
다른 아키텍처나 아키텍처 패턴도 목적에 따라 조합해서 사용할 수 있다Event Driven Architecture
CQRS: Command Query Responsibility Segregation
반응 및 액터 모델
REST: Representational State Transfer
서비스 지향 아키텍처 (SOA)
Chapter 2 요약
너무 많은 것을 하나의 모델에 넣는 것과 큰
진흙 덩어리를 만드는 것과 관련된 몇가지 중요한 위험 요소들DDD
전략적 설계의 적용바운디드 컨텍스트와보편언어의 사용가정들에 대한 분석과
멘탈 모델을 통합하는 방법보편언어를 개발하는 방법바운디드 컨텍스트내에서 발견할 수 있는 아키텍처 컴포넌트DDD를 실행 방안에 넣는 것이 전혀 어려운 일이 아니라는 것!
Last updated
Was this helpful?