Today I Learned

[도메인 주도 설계] 01. 지식 탐구 본문

도메인 주도 설계

[도메인 주도 설계] 01. 지식 탐구

하이라이터 2021. 10. 22. 01:13
728x90
  • 초기 모델 설계는 개발자와 도메인 전문가 간의 논의를 통해 발전한다.
  • 개발자는 도메인을 이해하며 모델을 설계하고, 도메인 전문가는 설계된 모델 이해하고 피드백하며 양방향으로 소통한다.

효과적인 모델링의 요소

1. 모델과 구현의 연계

2. 모델을 기반으로 하는 언어 정제

3. 풍부한 지식이 담긴 모델 개발

4. 모델의 정제

5. 브레인스토밍과 실험

 

지식 탐구

  • 폭포수 개발 방식
    • 업무전문가가 분석가에게 설명 → 분석가가 이해한 내용을 바탕으로 추상화해서 프로그래머에게 요청
    • 프로그래머가 도메인에 관심이 없다면 눈에 보이는 수행만 구현
    • 지식은 한방향으로만 흐르고 축적되지 않는다.
  • 프로그래머가 처음부터 추상화된 모델로 구현할 수도 있다.
    • 하지만 기초적인 역할만 수행 가능하고 도메인 전문가의 사고방식과 긴밀하게 연결되지는 않는다.
  • 모든 구성원이 함께 모델을 만들어 나가면 팀 구성원 간의 상호작용이 바뀐다.
    • 개발자는 도메인 모델의 지속정인 정제를 토대로 업무의 중요 원칙들을 배운다.
    • 도메인 전문가들은 스스로 이해하는 바를 자주 정제하고, 소프트웨어 프로젝트에서 요구하는 개념적 엄밀함을 이해하게 된다.
    • 모델은 명료하게 조직화되고 추상화될 수 있으며, 구현을 더 용이하게 만들어준다.
    • 심층적인 업무 지식을 반영하고, 추상화된 개념은 참된 업무 원칙에 해당한다.
    • 모델이 점점 향상되면서 프로젝트 내내 흘러가는 정보들을 조직화하는 도구로 자리잡게 된다.
    • 선순환을 통해 도메인에 대한 팀 구성원의 통찰력을 심화시켜주며, 더 높은 수준의 정제된 모델로 이어진다.

지속적인 학습

  • 소프트웨어를 작성하기 시작할 때 우리는 충분히 알지 못한 상태에서 시작한다.
  • 지식은 단편적이고, 흩어져 있으며, 다른 정보들과 섞여있다.
  • 조직과 사람이 바뀌면서 지식도 흩어진다.
  • 전형적인 설계 방법으로는 지식이 코드와 문서에서 유용한 형태로 표현되지 못하므로 쉽게 사라진다.
  • 생산성이 뛰어난 팀은 지속적인 학습을 바탕으로 의식적으로 지식을 함양하고, 현재 종사하는 도메인에 관해 학습한다.

풍부한 지식이 담긴 설계

  • 모델에 포함되어 있는 지식은 단순한 "명사 찾기" 이상
  • 어떠한 도메인에도 다양한 범주의 개념이 존재하는데, 지식탐구는 이러한 통찰력을 반영하는 모델을 만들어낸다.
  • 업무 규칙간에 실제 모순되는 부분이 있을 수도 있지만 소프트웨어는 명확한 규칙을 가져야한다.
  • 협업하에 진행되는 지식탐구를 통해 규칙을 명확히 하고, 구체화하며 조정하거나 배제해야 한다.

  • ex) 해운 산업의 "초과예약"이라는 관행
    • 도메인에 대해 이해하고 있다면, "10% 초과예약 허용"이라는 요구사항에 대해
      • 단순히 불분명한 계산으로 남겨둘 것인가?
      • 별개의 중요한 업무 규칙으로 분리할 것인가?

심층 모델

  • 유용한 모델은 겉으로 드러나 있는 경우가 거의 없다.
  • 도메인과 애플리케이션의 요구사항을 이해하게 되면서 문제의 핵심을 관통하는 추상화가 나타나기 시작한다.
  • ex)  컨테이너 해운 시스템
    • 화물을 예약하는 행위로 선적이 시작되므로 화물, 운송일정 등을 설명해줄 수 있는 모델로 만듦
    • 하지만 도메인 전문가는 만족 X → 화물 취급이나 물리적인 하역 작업은 주로 하도급자나 회사의 운영팀에서 수행
    • 운송일정 같은 세부계획보다 각 주체(해운업자, 운송업자, 화물인수자 등) 사이의 책임 이동이 더 중요
    • 운항 일정 객체를 제거하는 것으로 이어지는 것은 아니지만 모델은 근본적으로 바뀜
    • 해운 업무를 바라보는 시각이 장소간 컨테이너 이동에서 화물에 대한 책임 이동으로 바뀜

 

728x90
Comments