인프런 커뮤니티 질문&답변
도메인 객체와 엔티티 객체 사용
작성
·
6
0
안녕하세요, 강의랑 유튜브 너무 잘 보고있습니다.
강의를 보면서 여러 인사이트를 얻었습니다!
궁금한 점은 코틀린이 아닌 자바를 사용할 경우엔 엔티티 객체를 도메인 객체로 변환해서 return 해줄 때 코드가 다소 지저분해지는데요 ㅠㅠ
어떤 방식이 가장 유효할지 의견 부탁드립니다!
엔티티 객체에 toDomain() 과 같은 도메인 객체 변환 메서드 생성
core-db 와 같은 데이터 접근 레이어에 Mapper 클래스 생성 (ex. ProductMapper.toDomain(entity))
추가적으로 도메인 객체를 사용한다면, 엔티티 -> 도메인 -> 클라이언트 응답 DTO 와 같은 변환 과정을 거의 필수적으로 거쳐가야하는데, 이 부분에 대해서 도메인 객체와 엔티티 객체의 분리 시점이 재미니님은 있으신건가요?
아니면 프로젝트 시작부터 도메인과 엔티티는 구분해서 사용할 것이다! 라고 정하고 시작하시는 편이신가요?
물론 프로젝트의 규모와 도메인의 복잡도 등에 따라 유연하게 변해야 한다고 생각하지만, 해당 경험이 없다시피 하다보니 어떤 주관이나 팀을 설득할 수 있는 논리가 부족하다고 생각해서 명확한 이점과 트레이드 오프를 재미니님은 어떻게 생각하시는지 궁금합니다!
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. educrinity5님.
귀하의 질문은 도메인 객체와 엔티티 객체의 변환 및 사용에 관한 고민으로서, 자바를 사용할 때의 코드 간결성 및 유지보수를 고려한 접근 방식에 대한 것입니다. 또한, 도메인 객체와 엔티티 객체의 구분 시점에 관한 질문인데요. 이 주제는 소프트웨어 설계와 코드 아키텍처의 핵심 부분입니다.
1. 엔티티 객체에서 도메인 객체로 변환하는 방식
방법 1: 엔티티 객체에 변환 메서드 생성
- 설명:
toDomain()과 같은 메서드를 엔티티 객체에 생성하여 도메인 객체를 반환하게 하는 방식입니다. 엔티티 객체가 도메인 객체의 구조를 이해하고 있어야 하기 때문에 객체 간 의존성이 생깁니다.
- 장점: 간편한 접근, 메서드 체이닝 등으로 쉽게 변환 가능.
- 단점: 코드의 의존성이 커져 엔티티 객체가 도메인 로직을 지나치게 알고 있을 수 있습니다.
방법 2: 외부 Mapper 클래스 생성
- 설명: 데이터 접근 레이어에
Mapper클래스를 두어 변환을 담당하게 만드는 방식입니다. 예를 들어,ProductMapper.toDomain(entity)와 같은 형태로.
- 장점: 객체 간의 역할이 명확해지고, 변환 로직이 필요한 곳(Mapper)에 응집됩니다.
- 단점: 변환될 객체가 계속 늘어나면 Mapper가 방대해질 수 있습니다.
2. 도메인 객체와 엔티티 객체의 분리 시점
설계 초기 결정: 프로젝트의 시작 시점에서 도메인과 엔티티를 명확히 구분하는 것은 각 객체의 역할을 명확히 하고, 코드의 응집성을 높이는 데 도움이 됩니다.
프로젝트 규모와 복잡도에 따른 유연성: 초기 설계에서 모든 것을 구분할 경우, 복잡도가 높은 프로젝트에서는 지나치게 많은 코드가 생길 수 있습니다. 따라서, 프로젝트의 일정, 팀의 역량, 요구사항의 변경 가능성 등을 고려해 유연하게 접근하는 것이 좋습니다.
주관 및 논리
주관적 선택의 중요성: 도메인 객체와 엔티티 객체의 구분은 결국 소프트웨어의 변경 용이성, 유지보수성에 영향을 미칩니다. 프로젝트의 지속적인 변경 사항이 예상될 경우, 객체를 분리하여 변화에 대한 저항력을 유지하는 것이 좋습니다.
팀 설득 논리: “도메인 객체를 사용함으로써 전체적인 코드의 읽기 쉬운 수준과 변경에 대한 안전성을 확보할 수 있다”는 점을 강조하는 것이 좋습니다. 또한, 객체의 변화가 독립적으로 이루어진다면 다른 부분에 영향 없이 수정이 용이할 수 있다는 점도 추가적인 설득 요소가 될 수 있습니다.
관련한 결정의 기준은 프로젝트 복잡도 및 유지보수 필요성에서 기인한다는 점을 팀에 설명하시면 논리가 설득력 있을 것입니다.
저는 질문자님의 이해를 돕고자 기존의 답변들에서 유사한 내용을 참고하여 설명을 드립니다. 이 답변이 만족스럽지 않을 수 있는 점 양해 부탁드리며, 추가적으로 궁금한 점이 있으시면 언제든지 이어서 질문해 주세요. 곧 지식공유자께서도 답변해 주실 것입니다. 🙏
관련해서 아래의 참고 내용을 확인해 보시기 바랍니다:
- 도메인 계층에서 Page 사용 질문
- 어떤 경우 도메인(개념) 객체를, 어떤 경우 JPA 엔티티를 활용하나요?
Tag: #코틀린 #백엔드 #소프트웨어설계 #도메인모델 #엔티티모델




