Domain / TIL

Domain

Featured image

Domain


도메인은 지식, 영향력 또는 활동 영역을 말하며, 개발 분야에서는 소프트웨어로 해결하려는 문제의 영역을 의미한다.

도메인을 표현하는 대표적인 사례 : 객체 지향 프로그래밍

도메인 주도 설계 (Donaim Driven Design)


보편 언어 (ubiquitous language)


한정된 맥락 (bounded context)


DDD를 실천하기에 딱 맞는 마이크로서비스 아키텍처를 도입하려면,

  1. 도메인 지식을 가진 엔지니어가 팀 마다 있어야 자연스럽게 기능 조직이 아니라 목적 조직화 된다.
  2. 여러 서비스가 잘 결합할 수 있게 디자인해야 한다. 하지만, 동시에 다른 서비스에 지나치게 의존해서도 안된다.
  3. 서비스를 오케스트레이션 해야한다. 오케스트레이터는 각 서비스가 죽는지 안죽는지 여부, 트래픽이 수용 가능한지 아닌지 여부, 인프라 유지보수 (업그레이드, 패치 등) 업무 등에만 집중한다.

따라서 마이크로서비스로 소프트웨어를 작성할 때에는, 소프트웨어 작성에 앞서 팀의 일하는 방식을 보다 독립적으로 만들어내야 한다. 반대로 마이크로서비스 아키텍처를 통해, 팀의 일하는 방식이 보다 독립적으로 만들어질 수 있다. 즉, 문화로서의 DevOps를 실천해야만 가능하다.


DDD 주요 용어


DDD 제작 순서

  1. 도메인 이벤트 찾기
  2. 외부 시스템/외부
  3. 프로세스 찾기
  4. 커맨드 찾기
  5. 액터 찾기
  6. 애그리거트 정의
  7. 바운디드 컨텍스트 정의
  8. 컨텍스트 매핑

예시로 DDD를 만들어 보았다.

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


관리 (환자 관리 팀)

Actor : 환자

Aggregate : 증상 여부

Command :

Domain event

격리 (격리 관리팀)

Actor : 격리 관리 팀

Aggregate : 격리 여부

Command

Domain event

System


조사 (역학조사팀)

Actor : 역학 조사 팀

Aggregate : 접촉자 확진 여부


검사 (진단검사운영팀)

Actor : 진단검사운영팀

Aggregate

Command

Domain event


아직 헷갈리는 것이 많아 미흡하지만 miro를 이용해 이정도로 작성해보았다.