도메인 모델링은 소프트웨어 개발에 있어 복잡하고, 이해하기 어려운 부분들을
이해적인 측면에서 쉽게 다가가기 위해 추상화하는 과정이다.
전체 영역을 나타내는 하나의 거대한 도메인.
해결하고자 하는 전체 비즈니스를 표현한다.
비즈니스 도메인의 하위 도메인.
전체 비즈니스에서 해결하고자 하는 영역을 구분지어 나눈 비즈니스를 표현한다.
말 그대로 문맥의 경계를 나타낸다.
여러 서브 도메인들간에, 같은 문맥이지만 다른 의미로 통용되는 경우가 발생할 수 있다.
이 때 서로의 이해를 돕고 충돌을 최소화하려는 도메인 모델링의 목적과 불일치한다.
이러한 문제들을 해결하기 위해 문맥의 경계를 정해 모델을 구분짓는다.
바운디는 컨텍스트는 하나 또는 하나 이상의 모델을 가진다.
보편적으로 사용할 언어를 정의한다.
바운디드 컨텍스트로 문맥의 경계를 나눈 뒤, 경계 안에는 여러 이해 관계자들이 존재한다.
여러 이해 관계자들이 한 개념에 대해서 각자의 다른 용어로 표현한다면, 매우 복잡한 문제들이 발생할 것이다.
이를 해결하기 위해 동일한 개념과 용어로 정의하여 사용해야 한다.
고유 식별자를 지닌 객체. 속성과 비즈니스 로직을 포함한다.
고유 식별자가 없고, 값으로만 비교되는 객체. 주로 엔티티의 속성을 표현
여러 객체를 하나로 묶은 논리적인 단위
하나의 엔티티를 Aggregate root로 설정하면 그 엔티티는 한 단위의 대표가 된다.
Aggregate root를 통해서만 단위 안으로 접근할 수 있다.
엔티티 내부에서 선언하기 애매한 비즈니스 로직을 선언. 주로 개념상의 행위
엔티티 내부에서 선언된 비즈니스 로직으로 인해 발생. 다른 객체들과 연계 발생.
도메인 모델링에 대해서 알아봤는데, 이렇게 글만 보면 잘 이해되지 않는다.
실제로 한 번 도메인 모델링을 해보자!
도메인 모델링은 UML 다이어그램으로 표현하기도 하고, 코드로 표현하기도 한다.
이번에 해볼 것은 아직 익숙하지 않으니 글로 먼저 표현하고, UML 다이어그램으로 표현해볼 것이다.
| 국문 | 영문 | 설명 |
|---|---|---|
| 이벤트 | Event | 서비스 내 선착순으로 진행되는 모든 이벤트를 통칭. |
| 시작일시 | StartedAt | 이벤트의 시작일과 시간을 나타낸다. |
| 종료일시 | EndedAt | 이벤트의 종료일과 시간을 나타낸다. |
| 참여 | Participation | 이벤트를 조회하고 참여버튼을 클릭하여 이벤트의 당첨/낙첨을 확인하는 행위. |
| 당첨 | Win | 이벤트에 특정 순위까지 선착순으로 참여하는 행위를 의미한다. |
| 낙첨 | Lose | 이벤트에 특정 순위 이후 참여하는 행위를 의미한다. |
| 사용자 | User | 서비스에 접근 가능한 자를 통칭한다. |
| 회원 | Member | 서비스에 가입한 사용자를 회원이라 통칭한다. |
| 관리자 | Admin | 이벤트를 생성하고 관리하는 권한을 가진 사용자를 통칭한다. |
| 권한 | Role | 회원과 관리자를 구분하는 권한 값을 의미한다. |
| 참여자 | Participant | 이벤트에 참여한 회원을 통칭한다. |
| 당첨자 | Winner | 이벤트에 참여 시 당첨된 회원을 통칭한다. |
| 낙첨자 | Loser | 이벤트에 참여 시 낙첨된 회원을 통칭한다. |
Event Aggergate
Event - Root
이벤트 속성 : 이벤트 id, 당첨 순위, 시작일시, 종료일시
이벤트 행위 : 규칙
- 이벤트 생성() : 당첨 순위, 시작일시, 종료일시가 존재해야 한다.
시작일시는 현재시간보다 빠를 수 없다.
시작일시는 종료일시보다 늦을 수 없다.- 이벤트 조회() : 생성된 이벤트를 목록으로 확인할 수 있다.
- 이벤트 변경() : 이벤트 시작전에만 당첨 순위, 시작일시, 종료일시 변경 가능하다.
- 이벤트 취소() : 이벤트 시작전에만 가능하다.
Participation
참여 속성 : 참여 id, 회원 id, 중복 여부, 결과
참여 행위 : 규칙
- 참여하기() : 회원이 된 사용자만 참여 가능하다.
한 이벤트에 2회 이상 참여할 수 없다.
이벤트의 시작일시 전에는 이벤트에 참여할 수 없다.
이벤트의 종료일시 후에는 이벤트에 참여할 수 없다.
User Aggregate
User - Root
사용자 속성 : 사용자 id, 권한
사용자 행위 : 규칙
- 사용자 생성() : 권한(1: 회원, 2: 관리자)이 존재해야 한다.
Member
회원 속성 : 회원 id, 사용자 id, 권한 =1, 이름, 이메일, 비밀번호
회원 행위 : 규칙
- 회원 가입() : 권한 == 1인 사용자만 가입 가능하다.
이름, 이메일, 비밀번호가 존재해야 한다.- 이벤트에 참여가 가능하다.
- 이벤트 생성, 변경, 취소가 불가능하다.
Admin
관리자 속성 : 관리자 id, 사용자 id, 권한 =2, 이름, 이메일, 비밀번호
관리자 행위 : 규칙
- 관리자 위임() : 권한 == 2인 사용자만 위임 가능하다.
이름, 이메일, 비밀번호가 존재해야 한다.- 이벤트에 참여가 불가능하다.
- 이벤트 생성, 변경, 취소가 가능하다.