프로그래밍/DDD

[DDD] 도메인 (Domain)

Victory_HA 2023. 4. 26. 14:35

도메인 주도 설계 철저 입문 서적 참고

도메인

  • 도메인은 영역이란 뜻이다.
  • 소프트웨어 개발에서 도메인은 프로그램이 쓰이는 대상 분야라는 의미로 쓰인다.
    • ex> 회계 시스템을 예로, 회계 분야에는 금전, 장부라는 개념이 등장하는데,
    • 이때 금전, 장부가 회계 시스템의 도메인에 해당한다.
    • ex> 물류 시스템의 도메인 : 창고, 화물, 운송수단 등..

도메인 모델

  • 모델은 현실에서 일어나는 사건, 개념을 추상화 한 것이다.
  • 추상이란, 사물 혹은 어떤 개념에서 성질을 뽑아내서 파악하는 것이다.
  • 하지만 그것의 모든 성질을 뽑아낼 필요는 없다.
  • 도메인에 따라서 해당 성질 중 필요한 것만 뽑아서 추상화시켜야한다.
    • ex> 소설가 관점에서 '펜'은 글자를 쓸 수 있다는 성질이 중요하다.
    • but, 문구점 관점에서 '펜'은 상품으로서 성질이 중요하다.
    • ex> 트럭은 '화물을 나를 수 있다'는 성질만 표현하면 충분하다.
    • but, '차 키를 돌리면 시동이 걸린다'라는 정보까지 나타낼 필요는 없다.
  • 이렇게 사건 혹은 개념을 추상화하는 작업이 모델링이다.
  • 모델링의 결과는 모델이다.
  • 도메인 주도 설계에서는 도메인 개념을 모델링한 모델을 도메인 모델이라고 한다.

도메인 객체

  • 도메인 모델은 어디까지나 개념을 추상화한 지식이다.
  • 도메인 모델은 어떤 매체를 통해 표현돼야만 문제를 해결할 수 있다.
  • 도메인 모델을 소프트웨어 형태의 동작하는 모듈로 나타낸 것이 도메인 객체이다.

도메인 개념 <-> 도메인 모델 <-> 도메인 객체

  • 도메인의 변화가 발생하면 도메인 모델로 그 정보가 반영돼야한다.
    • 도메인 모델은 도메인 개념을 추상화 한것이므로 변화를 반영할 수 있다.
  • 도메인 모델의 변화가 발생하면 도메인 객체로 그 정보가 반영돼야한다.
    • 도메인 객체는 도메인 모델을 구현한 표현이므로, 도메인 모델의 변화를 반영할 수 있다.
  • 반대 순서로도 변화 및 반영을 시킬수도 있다.