해결된 질문
작성
·
316
0
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예
[질문 내용]
도메인 모델 패턴을 사용하면 대부분의 비즈니스 로직이 엔티티에 들어가 있기 때문에, 서비스는 단순히 엔티티에 비즈니스 로직 처리를 위임하게 됩니다.
구글링을 해보니 도메인 모델 패턴의 장점 중 재사용성, 확장성 등 좋은 객체지향의 특성을 대부분 가져가고 있는 것 같아 보이는데요.
실제로 코드를 보면 도메인 모델(엔티티)에 비즈니스 로직이 담겨있고, 엔티티 간의 관계 매핑이 필요하기 때문에 특정 기술에 종속될 수 밖에 없지 않나 생각이 들었습니다.
도메인 모델 패턴이든, 트랜잭션 스크립트 패턴이든 비즈니스 로직을 가지고 있는 쪽은 최대한 순수한 자바 코드로 작성해야 한다고 생각하고 있었는데..Item 엔티티를 예시로 들면 JPA를 사용하여 연관관계 매핑이 되어있어 무수히 많은 애노테이션과 설정들이 들어있습니다. 만약 JPA를 걷어내고 다른 기술을 사용해야 할 경우에는 엔티티 로직에 제법 많은 수정이 필요할 것 같아 보입니다. 비즈니스 로직이 변경되는 경우도 마찬가지구요.
이렇게 저희가 지금 진행하고 있는 예제에서 도메인 모델 패턴이 객체지향을 잘 따르고 있다고 할 수 있는 것인지 긴가민가합니다.
질문이 조금 두서가 없었는데, 결론은
현재 우리의 예제에서 JPA를 사용한 엔티티 객체들을 활용하여 도메인 모델 패턴을 사용할 경우 해당 설계가 객체지향 원칙들을 잘 지키고 있다고 볼 수 있는지? 입니다.
답변 1
1
안녕하세요. 탄이님
JPA와 같은 기술에 의존하는 것이 객체지향 원칙(캡슐화, 상속, 다형성, 객체 참조등)을 위반하는 것은 아닙니다. 오히려 JPA를 사용하면 객체지향 원칙을 더 잘 지키면서 개발할 수 있는 가능성이 증가합니다. 하지만, 고민하신 것 처럼 나중에 다른 기술로 전환할 때 어려움을 겪을 수 있습니다.
대안으로는 도메인 객체와 엔티티 객체를 분리할 수 있는데요. 아마도 이 내용을 알고 계셔서 질문을 한 것으로 이해했습니다.
저번에 다른 질문에서 답을 했던 내용인데 가져와봅니다 🙂
링크: https://www.inflearn.com/questions/924769
모든 아키텍처에는 트레이드 오프가 있습니다.
특히 도메인 객체와 엔티티 객체를 분리하는 것은 매우 큰 트레이드 오프가 있습니다.
장점: 구현을 JPA 대신에 다른 것으로 변경할 때 이점을 얻을 수 있습니다.
단점: JPA가 제공하는 지연로딩을 포함한 수 많은 기능을 사용할 수 없습니다.
이런 트레이드 오프를 생각하고 본인의 프로젝트에 맞는 방법을 적용하는 것이 필요합니다.
제 경험상 대부분의 프로젝트에서 이 둘을 분리하면 얻는 것 보다 잃는 것이 훨씬 많습니다. 특히 생산성 측면에서 비슷한 코드를 계속 작성해야 하고, 또 JPA가 제공하는 수 많은 기능들을 사용할 수 없습니다.
프로젝트에서 엔티티가 아주 단순하고, 구현을 변경해야 할 가능성이 높다면 그때는 분리하는 것의 이점을 얻을 수 있습니다.
도움이 되셨길 바래요.
가려웠던 부분이 시원하게 해결되었습니다. 항상 수업시간 중간에도 트레이드오프에 관해서 말씀해주신게 생각이나네요. 감사합니다!