/
JPA 기반 추가 고려사항

JPA 기반 추가 고려사항

  1. Entity

    • JPA에서 사용하는 도메인 엔티티 클래스.

    • 애너테이션(@Entity, @Table 등)을 사용하여 데이터베이스와 매핑.

    • 일반적으로 Domain 계층에 포함되지만, 명확한 분리를 원하면 별도로 관리.

  2. Repository

    • JPA Repository 인터페이스.

    • Spring Data JPA의 기본 Repository 인터페이스를 확장하거나, 커스텀 메서드 정의.

  3. Specification/Criteria

    • 복잡한 쿼리를 생성하기 위한 JPA의 Criteria API 또는 Specification 클래스.

    • 데이터 검색 로직을 깔끔하게 분리.

  4. Entity Listener

    • JPA 엔티티와 관련된 이벤트(@PrePersist, @PostLoad 등)를 처리하는 리스너 클래스.

  5. Mapping Layer

    • 도메인 객체(Entity)와 DTO 간 변환.

    • MapStruct와 같은 라이브러리 또는 수동 매핑 구현.

    • 명확한 책임 분리를 위해 도메인 계층 외부에 위치.


구조 예시

src ├── adapter │ ├── persistence │ │ ├── repository (JpaRepository 확장) │ │ ├── entity (JPA Entity 클래스) │ │ └── criteria (Specification, Criteria API 관련) │ ├── api │ └── messaging ├── application │ ├── service (Application 서비스) │ └── usecase (유스케이스별 클래스) ├── domain │ ├── entity (도메인 엔티티 - JPA 의존성 제거 가능) │ ├── valueobject │ └── service (도메인 서비스) ├── dto ├── port │ ├── inbound │ └── outbound (Repository 인터페이스 포함) ├── configuration ├── event ├── exception ├── mapper ├── utils └── test

 


주요 포인트

  1. JPA Entity 분리:
    JPA Entity는 Domain에 포함될 수 있지만, 데이터베이스 중심 설계와 도메인 중심 설계를 분리하려면 AdapterPersistence 디렉터리에 위치시킬 수 있습니다.

  2. Repository와 Port 연결:
    JPA Repository는 Outbound Port의 구현체로 위치하며, 도메인 서비스에서 Repository 인터페이스만 의존하도록 설계합니다.

  3. Entity Listener 및 이벤트:
    JPA의 @EntityListeners를 활용하여 영속성 관련 이벤트를 처리할 수 있습니다.

  4. Specification 사용:
    복잡한 쿼리를 작성해야 하는 경우, JPA의 Specification 또는 Criteria API를 별도의 클래스로 구성해 Repository 로직을 깔끔하게 유지합니다.

 

Related content

카테고리
카테고리
More like this
JPA Entity와 Core Domain의 관계
JPA Entity와 Core Domain의 관계
More like this
JPA를 통한 데이터베이스 상호작용을 위한 Port와 Adapter라면, 비즈니스 로직 외의 기능을 포함하는 것은 부적절
JPA를 통한 데이터베이스 상호작용을 위한 Port와 Adapter라면, 비즈니스 로직 외의 기능을 포함하는 것은 부적절
More like this
BackendCore
BackendCore
More like this
NodeType
NodeType
More like this