프로그래밍

헥사고날 아키텍쳐 - 도메인 헥사곤

일태우 2024. 8. 4. 20:18

도메인 헥사곤

실 세계 문제를 이해하고 모델링하는 활동

스타트업 같은 개발자나 도메인 전문가 모두 시스템의 목적에 대한 명확한 비전을 갖고 있지 않거나,

문제 영역이 존재하고 도메인 전문가들이 분명하게 알고 있는 상황에서 문제 영역을 엔티티, 값 객체로의 변환 방법을 파악하지 못하면 잘못된 가정을 기반으로 구축되게 될 것이다.

이러한 점은 소프트웨어가 간단하게 시작해서, 기반 코드가 커짐에 따라 기술 부채가 누적되고 유지 보수가 더 어려워지는 이유 중 하나로 여겨진다.

엔티티

  • 식별자 (Identifier): 엔티티는 고유한 식별자를 가지고 있으며, 이 식별자를 통해 다른 엔티티와 구분된다. 동일한 엔티티는 시간이 지나도 동일한 식별자를 유지한다.
  • 변경 가능성 (Mutability): 엔티티는 시간이 지남에 따라 상태가 변할 수 있다. 이는 엔티티의 특성이 변할 수 있다는 것을 의미한다.
  • 생명 주기 (Lifecycle): 엔티티는 생성되고, 변경되며, 소멸되는 생명 주기를 가진다.

예) 사용자 엔티티는 사용자 ID와 같은 고유 식별자를 가지며, 이름, 이메일과 같은 변하는 속성을 지닌다. 시간이 지남에 따라 사용자의 특성이 변할 수 있다.

값 객체

객체의 정체성보다 속성에 관심을 갖는 경우 코드의 표현력을 보완하는데 도움을 준다.

  • 식별자가 없음 (No Identifier): 값 객체는 고유한 식별자를 가지지 않는다. 자체 속성 값으로 동일성 판단을 한다.
  • 불변성 (Immutability): 값 객체를 사용해 엔티티를 구성할 수 있으므로 도메인 전체에서 예상치 못한 불일치를 방지 하기 위해 불변으로 해야한다.
  • 동등성 (Equality by Value): 두 값 객체가 동일한 속성 값을 가지면, 두 값 객체는 동일한 것으로 간주한다.