강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

우으어으님의 프로필 이미지
우으어으

작성한 질문수

서비스 계층에서 도메인(개념)객체 vs JPA 엔티티

작성

·

6

0

안녕하세요, productService에서 findProduct의 경우는 productFinder를 통해 JPA 엔티티가 아닌 개념객체를 반환하여 사용하는 거 같습니다!

CouponService의 경우에는 서비스에서 couponFinder를 따로 쓰지 않고, 레포지터리를 사용해서 JPA엔티티를 활용하도록 구현이 되어있습니다.

finder같은 도구 클래스를 통해 도메인 객체를 가져오는 것과 JPA 엔티티를 가져와서 처리하는 판단 기준이 따로 있으실까요?

서비스에서 개념객체를 가져와서 활용하는 것과 JPA엔티티를 사용했을 때 각각 장단이 있을 거 같은데 관련해서 어떻게 생각하시는지도 궁금합니다!

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.
우으어으님,

서비스 계층에서 개념 객체와 JPA 엔티티를 사용하는 것에는 각각의 장단점이 있습니다. 이 두 가지를 사용하는 기준 및 장단점을 이해하는데 도움을 드리겠습니다.

  1. 도메인(개념) 객체를 사용하는 이유:

    • 분리된 책임: 개념 객체를 통해 비즈니스 로직을 분리하여 관리할 수 있습니다. 이는 비즈니스 로직을 더욱 명확하게 하고 테스트하기 쉽게 만듭니다.
    • 유연성: 개념 객체는 데이터베이스 설계에 독립적이기 때문에, 비즈니스 로직에 따라 객체 설계를 손쉽게 변경할 수 있습니다.
    • 단순화: 복잡한 JPA 엔티티의 상태 관리를 피하고, 필요한 데이터와 로직만을 담을 수 있습니다.
  2. JPA 엔티티를 사용하는 이유:

    • 일관성: JPA 엔티티는 기본적으로 데이터베이스와 직접적인 매핑을 하여 데이터의 일관성을 유지합니다.
    • 성능: 데이터베이스와의 직접적인 매핑으로 인해, 데이터를 가져오고 저장하는 것이 더 직관적일 수 있습니다.
    • 기능적 이점: JPA는 자동으로 SQL을 생성하는 등 다양한 기능을 제공하여 개발을 더욱 편리하게 만들어줍니다.
  3. 판단 기준:

    • 복잡성: 비즈니스 로직이 복잡하다면 개념 객체를 통해 로직을 분리하는 것이 바람직할 수 있습니다.
    • 성능 고려 사항: 성능이 중요한 상황에서는 직접 JPA 엔티티를 사용하는 것이 더 효율적일 수 있습니다.
    • 재사용성: 여러 서비스에서 동일한 로직을 사용할 경우, 개념 객체로 공통 로직을 추출하여 재사용성을 높입니다.
    • 변경 가능성: 비즈니스 요구가 자주 변경되거나 변화 가능성이 높다면 개념 객체를 사용하여 유연성을 확보할 수 있습니다.

이와 관련된 더 많은 정보는 필요하시다면 Spring Data JPA와 Spring Data JDBC 문서에서 참고하실 수 있습니다:
- Spring Data JDBC와의 비교
- Spring Data JPA의 기본적인 웹 지원

이러한 기준들을 고려하여 해당 프로젝트의 요구 사항에 맞는 접근 방식을 선택하시면 됩니다. 도움이 되셨길 바랍니다!

우으어으님의 프로필 이미지
우으어으

작성한 질문수

질문하기