작성
·
54
·
수정됨
0
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)
[질문 내용]
안녕하세요 김영한님,
강의 잘 듣고 있습니다.
실무에서 Spring Data JPA를 사용하는데 궁금한 부분이 있어서 질문드립니다.
@Entity 애노테이션이 달린 JPA Entity를 Domain처럼 비즈니스 로직을 넣고 사용하는 것과
@Entity는 순수 DB 매핑만 하고 도메인 객체는 별도로 분리해서 설계하는 방법 두가지가 있는 것 같다고 생각이 듭니다.
전자는 JPA의 기능들 (영속성 컨텍스트, Dirty Checking)을 잘 사용할 수 있을 것이고, 후자는 JPA 종속성 제거등의 이점이 있을 것 같습니다.
강의에서는 주로 비즈니스 로직을 넣고 사용하는 형태로 (changeTeam() 메서드 등) 개발을 했었다고 생각됩니다.
두 방법 다 장점과 단점이 있을 것 같은데, 실무에서는 주로 어떤 방식을 더 많이 사용해서 개발 하는지 궁금합니다!
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. khc4190님,
Spring Data JPA를 사용하면서 엔티티와 도메인 객체의 경계를 설정하는 방법에 대한 좋은 질문을 주셨습니다. 실무에서 이 경계를 설정하는 데는 여러 가지 고려사항이 있으며 각각의 방법은 나름의 장점과 단점을 가지고 있습니다.
1. JPA Entity에 비즈니스 로직 포함:
이 방법의 장점은 JPA의 여러 기능을 활용할 수 있다는 것입니다. 특히 영속성 컨텍스트와 Dirty Checking, 연관관계 설정 등을 통해 데이터베이스와의 상호작용을 더욱 간편하게 처리할 수 있습니다. 하지만, 이는 JPA에 대한 의존성이 강해지므로, 테스트 시 JPA 의존을 줄이는 방향으로 설계하기 어려울 수 있습니다.
2. JPA Entity와 도메인 객체 분리:
이 방법은 JPA에 대한 종속성을 줄일 수 있어 테스트 용이성과 코드의 유연성을 확보할 수 있다는 것이 장점입니다. 즉, 도메인 로직을 별도로 분리하면 좀 더 순수한 도메인 모델을 유지하는데 도움이 됩니다. 다만, JPA의 기능을 직접적으로 활용하기 힘들고, 코드의 복잡성이 증가하는 단점이 있습니다.
실무에서는 프로젝트의 성격과 요구사항에 따라 두 방법 중 적절한 것을 선택해야 합니다. 대규모 프로젝트나 장기 유지보수가 필요한 프로젝트에서는 JPA에의 종속성을 줄이고 테스트 용이성을 고려하여 엔티티와 도메인 객체를 분리하는 방식이 유리할 수 있습니다. 반면에, 단기 프로젝트이거나 빠른 개발이 필요한 경우에는 JPA의 강력한 기능을 활용하여 빠르게 개발하는 것이 효과적일 수 있습니다.
관련해서 김영한 강사님의 다른 답변도 도움이 될 것입니다:
- domain과 repository 구현 상세를 분리하고자 할 때 entity 디자인
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.