도메인과 엔티티의 차이점을 묻는다면 답변할 수 있는가? 나는 없었다. 같다고 생각한다고 틀린 답은 아니지만, 맞는 답도 아니니 차이점을 알아보자.
애플리케이션의 비즈니스에 관련된 모든 개념 모델을 뜻한다. 유스케이스의 경우는 도메인의 동적 측면을 나타낸다면 도메인은 정적 구조를 나타낸다.
객사오 저자 조영호님의 말을 빌리자면, 소프트웨어를 개발하는 대상 영역 정도로 생각해도 된다. 도메인 모델이란 도메인을 모든 사람이 동일한 관점에서 이해할 수 있고 공유할 수 있도록 단순화시킨 것.
도메인 내에서 식별 가능한 개별적인 객체 또는 개념을 뜻한다. 보통 엔티티는 구체화라고 표현하며 DB에선 테이블로 표현된다.
엔티티는 도메인의 핵심 데이터를 캡슐화하고 처리하기 위해 사용된다.
도메인은 비즈니스 영역을 추상적으로 나타내는 개념이고, 엔티티는 도메인 내에서 실제 개별 객체나 개념을 나타낸다.
예를 들어 음식 배달을 해야 한다면
도메인은 음식 주문, 메뉴 관리, 배달 관리가 될 것이고,
엔티티는 고객 엔티티, 음식 엔티티, 주문 엔티티, 배달 엔티티등이 될 것이다.
즉 도메인은 서비스를 대표하는 개념이고 엔티티는 도메인 내에 식별 가능한 객체를 뜻한다.
기존 프로젝트에서 도메인과 엔티티가 다른지 몰랐기 때문에 구분 없이 사용해왔다.
도메인과 엔티티를 분리하기도 한다는데 이건 이해가 안되는 영역이다.
-> 스터디때 대화를 하면서 사용 사례를 들었는데, 엔티티는 실체화된 도메인이기 때문에, DB와의 통신을 위한 객체로 사용하고, 도메인이라는 순수한 자바 객체를 만들어 비즈니스(서비스)와 맞닿게 한다. 따라서 엔티티는 저장, 읽기 용도로만 사용되고 도메인으로 컨버팅 하여 관련 로직을 수행하도록 사용 하고 있다고 한다.
이걸 들으면서 예전에 들었던 풍부한 도메인 객체와 빈약한 도메인 객체와 관련이 깊다는 생각이 들었다. 엔티티와 도메인을 분리하면서 생기는 장점은 여기 적혀있다.