0. 서론
Entity - VO, DTO에 대해 포스팅하려고 공부를 하는데,
도메인에 대해서도 정의를 못내리고 있는 저를 발견했습니다.
비슷한 개념의 용어도 많고 비슷한 이름을 가진 용어도 많긴 하죠.
이걸 뭉뚱그려서 알고있다보니 소프트웨어 공학에서의 도메인은 뭐지? 하니 구체적인 대답이 나오지 않았습니다.
잘 알지도 못하면서 VO와 Entity에 대해 얘기할 수 없으니,
소프트웨어 공학의 관점에서 도메인에 대해 정리 및 공부겸 포스팅을 작성했습니다.
1. 도메인
💡소프트웨어로 해결하고자 하는 문제 영역
다른말로는 ‘개발할 대상’이라고도 할 수 있습니다.
‘온라인 쇼핑몰’을 개발해야 한다면 도메인은 ‘온라인 쇼핑몰’이 될 수 있습니다.
또한 ‘온라인 쇼핑몰’도메인은 ‘주문’, ‘결제’, ‘상품등록’, ‘회원가입’등과 같은 기능들을 하위 도메인으로 가질 수 있습니다.
2. 도메인 모델
💡도메인 설계를 통해 도출된 모델
도메인을 이해하기 위한 개념 모델입니다.
클래스다이어그램, 상태다이어그램과 같은 UML기법뿐만아니라,
다양한 방식을 통해 표현할 수 있습니다.
참고로, 도메인 모델은 엄밀히 말하면 소프트웨어 공학과는 별개의 개념입니다.
왜냐하면, 코드나, 도표, 다이어그램과 같은 실체적인 자료뿐만 아니라,
머릿속으로 생각하고 있는 것도 도메인 모델이라고 할 수 있기 떄문입니다.
3. 도메인 객체 모델
도메인 모델에서 도출된 객체 모델은 크게 Entity, Value Object로 나눌 수 있습니다.
3-1. Entity
💡변별할 수 있는 사물 (Peter Chen, 1976)
💡정보를 저장할 수 있는 어떤것 (James Martin, 1989)
💡정보를 저장할 수 있는 사람, 장소, 물건, 사건 그리고 개념 등(Thomas Bruce, 1992)
쉽게 얘기하면 데이터를 저장하고 관리하기 위한 객체입니다.
다음과 같은 특징을 지니고 있습니다.
- 실제 DB테이블과 매핑되는 핵심 객체
- 비즈니스 로직을 포함할 수 있다.
- Identifier(식별자)로 구분된다
3-2. Value Object(VO)
💡값 그 자체인 객체
도메인에서 한 개 또는 그 이상의 속성들을 묶어서 특정 값을 나타내는 객체입니다.
다음과 같은 특징을 지니고 있습니다.
- 비즈니스 로직을 포함할 수 있습니다.
- 모든 속성값이 같다면 같은 객체로 취급합니다.
- 불변성 보장을 위해 생성자 사용이 권장됩니다.
개념에 대한 이해는 쉬워도 설명은 정말 어려운것 같네요.
다음 포스팅은, 원래 작성하고자 했던 Entity - VO의 차이와 DTO에 대해 포스팅하도록 하겠습니다.
참고 자료
https://martinfowler.com/eaaCatalog/domainModel.html
https://hudi.blog/domain-domain-model-domain-object/
https://tecoble.techcourse.co.kr/post/2021-05-16-dto-vs-vo-vs-entity/