/
JPA Entity와 Core Domain의 관계

JPA Entity와 Core Domain의 관계

헥사고날 아키텍처에서 JPA Entity를 Core Domain에 포함할지 여부는 설계 철학과 프로젝트 요구 사항에 따라 신중히 결정해야 합니다. 이 문서에서는 두 가지 접근 방식의 장단점과 적용 방안을 설명합니다.


1. Core Domain에 JPA Entity 포함

장점:

  1. 데이터 매핑 간소화:

    • JPA Entity를 Core Domain에서 바로 사용하면 데이터베이스와의 매핑 로직이 단순화됩니다.

  2. 빠른 구현:

    • 애플리케이션 초기 개발 단계에서 데이터베이스와의 연동 작업이 빠르게 진행될 수 있습니다.

  3. 재사용성:

    • 동일한 객체를 데이터베이스 작업 및 비즈니스 로직에 사용할 수 있어 코드 중복을 줄입니다.

단점:

  1. 기술 의존성 증가:

    • Core Domain이 JPA에 의존하게 되어 기술 독립성이 약화됩니다.

  2. 순수성 훼손:

    • Core Domain 객체가 JPA 어노테이션(@Entity, @Id 등)으로 오염되며, 순수 비즈니스 로직만 포함해야 한다는 원칙이 무너질 수 있습니다.

  3. 테스트 어려움:

    • JPA Entity가 포함된 Core Domain은 데이터베이스가 없는 환경에서 테스트하기 어렵습니다.


2. JPA Entity를 Core Domain에서 분리

접근 방식:

  • Core Domain에서는 순수 도메인 객체를 사용하고, JPA Entity는 Outbound Adapter에서 관리합니다.

  • Core Domain 객체와 JPA Entity 간 변환기를 사용하여 데이터를 주고받습니다.

장점:

  1. 기술 독립성 유지:

    • Core Domain은 특정 기술(JPA)에 의존하지 않으므로, 기술 교체나 변경이 용이합니다.

  2. 도메인 객체의 순수성 보장:

    • 비즈니스 로직과 데이터베이스 관련 로직이 분리되어 유지보수성이 향상됩니다.

  3. 테스트 용이성:

    • 데이터베이스 없이도 순수 도메인 객체를 테스트할 수 있습니다.

단점:

  1. 변환 비용 증가:

    • Core Domain 객체와 JPA Entity 간 변환 로직을 추가로 구현해야 합니다.

  2. 개발 속도 저하:

    • 초기 설계 및 구현 단계에서 추가 작업이 필요합니다.

예시:

Core Domain 객체

public class NotificationConfig { private String name; private boolean isActive; // Getter, Setter, 비즈니스 로직 }

JPA Entity

@Entity public class NotificationConfigEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private boolean isActive; // Getter, Setter }

변환기

public class NotificationConfigMapper { public static NotificationConfig toDomain(NotificationConfigEntity entity) { NotificationConfig config = new NotificationConfig(); config.setName(entity.getName()); config.setActive(entity.isActive()); return config; } public static NotificationConfigEntity toEntity(NotificationConfig config) { NotificationConfigEntity entity = new NotificationConfigEntity(); entity.setName(config.getName()); entity.setActive(config.isActive()); return entity; } }

적용 시 고려사항

  1. 프로젝트 규모:

    • 작은 프로젝트나 프로토타입 단계에서는 JPA Entity를 Core Domain에 포함하는 것이 효율적일 수 있습니다.

    • 대규모 프로젝트에서는 기술 독립성과 유지보수성을 고려해 JPA Entity를 분리하는 것이 적합합니다.

  2. 팀 역량:

    • 팀이 헥사고날 아키텍처의 철학과 설계 원칙에 익숙하지 않다면, 단순한 구조로 시작한 뒤 점진적으로 분리하는 접근이 유리합니다.

  3. 도메인 복잡성:

    • 도메인 로직이 단순하면 JPA Entity를 Core Domain에 포함해도 무방하지만, 복잡할수록 분리하는 것이 권장됩니다.


결론

JPA Entity를 Core Domain에 포함할지 여부는 프로젝트의 요구사항, 복잡성, 팀 역량에 따라 다르게 접근해야 합니다. 기술 독립성과 도메인 순수성을 중요하게 여긴다면 JPA Entity를 Core Domain에서 분리하는 것이 권장됩니다. 반면, 간소화된 설계가 필요하다면 JPA Entity를 포함하는 것도 현실적인 선택일 수 있습니다. 두 가지 접근 방식을 상황에 맞게 조합하여 최적의 설계를 구현하세요.

Related content

JPA 기반 추가 고려사항
JPA 기반 추가 고려사항
More like this
카테고리
카테고리
More like this
고객센터 정책
고객센터 정책
More like this
프로모션 정책
프로모션 정책
More like this
회원 정책
회원 정책
More like this