프로필사진
DevOps 부트캠프 기록일지
DevOps_04_김재환
2023.05.04(도메인 주도 설계 실습)
2023.05.04(도메인 주도 설계 실습)

2023. 5. 4. 17:55부트캠프/DevOps (TIL)

업무 개요

중앙방역대책본부에는 다양한 팀(DDD의 관점에서는 Actor)이 있지만, 대중에게 가장 잘 알려진 다음의 네 팀의 업무만을 이해해 보도록 합시다.

💡 주의: 이하 안내하는 코로나19 대응 지침은 정부 자료를 바탕으로 한 가상의 약식 운영 지침입니다. 따라서, 현재 운영 중인 정부의 지침과는 다를 수 있습니다. 이 안내를 실제 코로나19 대응 지침으로 오해하거나 적용하지 마세요.

환자관리팀

  • 재택치료제도를 통해 환자를 치료해야 합니다.
  • 환자가 n일 이후에 격리해제 기준에 부합하는지 확인해야 합니다.
    • 무증상이고, 호전되는 경우 격리 해제가 가능합니다.
    • 유증상이고, 증상이 호전되지 않을 경우 PCR 검사를 다시 진행해야 합니다.

역학조사팀

  • 전자출입명부 및 카드 승인 내역을 기반으로 확진자의 동선을 조사하고, 밀접 접촉자를 확인합니다.

격리관리팀

  • 확진자에게 격리 및 격리 해제를 통지하고, 자가격리자가 격리 중에 있는지, 또는 격리 위반을 했는지 확인합니다.

진단검사운영팀

  • 선별진료소를 운영하고 PCR 검사를 통해 확진 여부를 파악합니다.

도메인 주도 설계의 주요 용어

  1. 도메인 이벤트: 발생한 사건
  2. 커맨드: 도메인 이벤트를 트리거하는 명령
  3. 외부 시스템: 도메인 이벤트가 호출하거나 관계가 있는 레거시 또는 외부 시스템
  4. 액터: 개인 또는 조직의 역할
  5. 핫스팟: 의문사항, 결정하기 힘든 사항
  6. 애그리거트: 도메인 이벤트와 커맨드가 처리하는 데이터, 상태가 변경되는 데이터
  7. 정책: 이벤트 조건에 따라 진행되는 결정, “이벤트”가 발생할 때, “커맨드”를 실행한다
  8. 정보: 액터에게 제공되는 데이터, 결정을 내리는데 영향을 주는 정보

액터 별 도메인 모델 생성 예

 

 

스토리
1. A씨가 증상을 보임
2. 선별 진료소에 감
3. 진료소에서 신청서 작성
4. 검사
5. 판정(양성, 음성)
6. 양성(확정통보, 격리통보, 격리대상)
7. 역학조사
8. 동선을 파악
9. 접촉자 및 방문 시설 통보
10. 방역
11. 격리 기간 재검사
12. 무증상시 격리해제
13. 유증상시 추가 격리
격리 (격리관리팀)
○ aggregate
- 격리자
○ command
- 격리물품 지원
- 격리 여부확인
○ domain event
- 격리 통보
- 격리됨
- 격리해제됨
- 격리규칙 위반
○ system
- 확진자지원 시스템
검사(진단검사운영팀)
○ command
  - 감염의심자 선별진료소 안내
  - PCR 검사
○ aggregate
  - 검사 대상자
○ domain event
- 감염의심자 선별진료소 안내 완료
- 환자 선별 진료 감염 검사 완료
- 환자 양성 판정됨
- 환자 음성 판정됨
○ system
- 감염검사 시스템
조사(역학관리팀)
○ aggregate
- 추적 대상자
○ command
- 동선 파악
- 방역 진행
○ domain event
- 환자 동선 파악됨
- 밀첩접촉자 파악
- 방문시설 방역 진행됨
○ system
- 전자출입명부 시스템
- 카드내역 사용 확인 시스템
- 방역 시스템
중앙관리본부
○ aggregate
  - 통합 환자 정보 관리
○ command
  - 통보
  - 일일 보고
○ domain event
  - 보고됨
  - 통보됨
○ system
  - 브리핑 시스템
  - 통보 시스템
관리 (환자관리팀)
○ aggregate
  - 환자
○ command
  - 치료
  - 증상 확인
○ domain event
  - n일 이후 무증상
    ㅡ> 격리 해제
  - n일 이후 유증자(호전되지 않는 경우
    ㅡ> 추가 검사

이를 바탕으로 만든 바운디드 컨텍스트 정의

처음에는 4개의 팀에서 시작을 했다가 통보을 어느쪽에 둬야할지에 대해 고민을 많이 했었습니다. 그러다가 종합적으로 관리를 해주는 중앙관리본부 모델을 세우고 추가하여 완성했습니다.

 

컨텍스트 매핑