개발지식/[하루한개념]

[하루한개념] DDD (Domain Driven Design) 정리

코찔이_suj 2022. 3. 8. 21:45
728x90

개요

안녕하세요. 코찔이입니다...!

드디어 개강을 하게되었는데요.. 4학년으로 복학하고 과의 마지막 꽃이라는 팀프로젝트 강의를 들으며 서비스를 기획,개발하게 되었습니다.... 어쩌다 운좋게 정말 대단한 분들과 팀플을 하게되었는데,,, 제가 너무 부족한것 같아서 오늘은 사전 회의에서 들었던 개념들을 미리 공부하는 시간을 보냈습니다...

저한테 최적화된 공부방식은 마인드맵을 이용하는 건데요... 개념을 공부할때 A4용지를 하나 꺼내 조사하면서 배운 내용을 하나하나 연결지어 마인드맵을 만들어 공부를 하면 기억에 오래 남아서 자주 이용하는 편입니다.

제 책상은 아닙니다... 항상 말하듯 구글검색으로 나온 사진만 사용해요,,,!

공부를 하고나면 이 종이들은 그냥 책상 한 켠에 쌓여있다가 쓰레기통으로 사라졌는데요.

그냥 버리기 아깝기도 하고 인터넷에 올려놓으면 종이를 잃어버려도 다음에 또 볼 수 있을 것 같아 공부했던 마인드맵 종이를 올려두는 저만의 사소하고 작은 컨텐츠(?)를 해볼까 합니다.

그 이름이 바로 [하루한개념]인데요. 아직 아이패드도,,, 갤럭시탭도 없는 비루한 대학생이라 A4용지에 개념을 적어 공부한 내용을 찍어 올리고, 중요한 키워드를 몇개 페이지에 적어두려고 합니다.

 

본론

오늘 공부한 개념은 DDD(Domain Driven Design)입니다.

사전회의에서 ...디디디로 갑시다 라는 말을 듣고,,, 응?? 뭐로 간다고??? 싶어 적어뒀던 아래 필기에서 시작했습니다.

 

DDD의 정의

간단히 소개 드리면 DDD는 어플리케이션을 유사한 업무별로 나눠 설계/개발하는 것을 말합니다.

 

DDD의 목표

  1. 모듈간의 의존성을 낮추고(Loosing Coupling), 
  2. 응집성은 높이는 것입니다(High Cohesion).

 

Strategic Design [개념설계]

DDD는 Strategic Design를 기본으로 수행하지만 더 깊고 구체적으로 설계하고자 할 때는 tactical design을 추가로 수행합니다. 그래서 Strategic Design을 위주로 적고, tactical design은 레이어의 구분과 결과물만 적었어요.

 

- keyword로 보는 DDD

  • Event Storming
    • Design Thinking 
      • Design Thinking
        • 명확하게 정리되지 않은 사용자의 니즈를 이해하고 이를 해결할 수 있는 기회를 찾아내기 위해 공감적 태도를 활용하는 일종의 복잡한 문제 해결에 대한 논리 추론적 접근법.
      • Domain Event
        • 비즈니스 도메인 내에서 발생하는 모든 이벤트를 과거형으로 기술한 것. (주황색 포스트잇을 사용)
      • Command
        • 행동, 결정 등의 값들에 대한 정의를 현재형으로 작성한 것 (파란색 포스트잇을 사용)
      • Actor
        • 사용자, 페르소나, 스테이크 홀더 등 UI를 통해 데이터를 소비하고 명령을 실행하여 시스템과 상호작용하는 대상 (노란색 포스트잇 사용)
      • External System
        • 외부 시스템, 시스템 호출을 암시(REST) (분홍색 포스트잇 사용)
      • Policy
        • 업무 정책, 이벤트에 대한 반응, 비즈니스 룰 등 (보라색 포스트잇 사용)
      •  Entity
        • 데이터 객체 그룹핑의 결과물

출처 : http://www.msaschool.io/operation/design/design-three/ 

  • Domain
    • DDD에서의 Domain은 유사한 업무의 집합을 의미합니다.
    • Sub Domain
      • 각 도메인을 한번 더 분해한 것.
  • Business Domain Context
    • 비즈니스가 어떻게 돌아가고 있는지
  •  Context
    • 상황, 정황
  • Bounded Context
    • Context의 집합
    • 비즈니스 도메인의 사용자, 프로세스, 정책을 고유한 비즈니스 목적별로 그룹핑한 것.
  • Context Map
    • bounded Context간의 관계를 도식화한 것.
  • Domain Model
    • 도메인 분리도(subDomain들을 타입에 맞춰 나눈것) + Context Map
    • Strategic Design의 결과물
  • Micro service
    • 독립적인 최소구성요소
    • 최소한 하나의 bounded context로 구성

 

 

Tactical Design [구체적 설계]

개발을 위한 구체적인 설계도를 만드는 과정으로 Layered Architecture에 맞게 구성한다.

 

- Layered Architecture

  1. Presentation Layer - ui관련 계층을 의미
  2. Service Layer - Control과 Interface부분에 관한 계층을 의미
  3. Domain Layer - Business Logic부분에 관한 계층을 의미
  4. Data Layer - DB와 CRUD하는 부분에 관한 계층을 의미

 

- Result (모든걸 꼭 다 낼 필요는 없다)

  • Userstory
    • 사람 중심의 요구사항 명세서
  • Usecase diagram
    • 시스템과 사용자의 상호작용을 표현한 다이어그램
  • Sequence Diagram
    • 특정 행동이 어떠한 순서로 어떤 객체와 어떻게 상호작용하는지 표현한 다이어그램
  • Class Diagram
    • 시스템을 구성하는 클래스들 사이의 관계를 표현한 다이어그램
  • Data Model
    • 데이터의 관계, 접근과 그 흐름에 필요한 처리과정에 관한 추상화된 모형
  • Storyboard
    • 화면을 어떻게 구성할지에 대한 설계서를 의미한다.
  • API 설계서 
    • API의 구현을 위한 설계서를 의미한다.

 

 

 

공부하면서 쓴 종이는 이렇습니다.

 

결론

그냥 사진만 올리려다가도,,, 하나만 더 적을까 하는 마음으로 다 올리게 되었네요.... 아직 인강이 남았는데 ㅠㅠㅠㅠ 빨리 가야겠습니다. 그럼 좋은 밤 보내세요!!