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

user님의 프로필 이미지
user

작성한 질문수

실전! 스프링 데이터 JPA

클린 아키텍처에서 JPA

작성

·

1.2K

1

클린 아키텍처 (및 헥사고날) 설계 시 JPA 영속성 계층을 어디에 두어야하는지 궁금합니다.

일반적으로 해당 아키텍처에선 영속성 계층을 도메인 계층에서 분리시켜야 한다고 주장하던데 (육각형 안 Entity는 POJO이며, JPA Entity는 바깥의 Adapter에 구현하고 Mapper로 변환하는 형식), 이렇게 되면 JPA가 제공하는 lazy loading이나dirty checking 등의 이점은 포기해야 되는것일까요?

도메인 모델에 JPA 코드를 사용하자니 이러한 아키텍트 원칙에 위배되는거 같고, 그렇다고 이걸 분리해놓으면 따로 구현해야될게 많아지니 고민입니다..

타협을 한다면 어느 방식으로 하는게 좋을까요? 애초에 이러한 아키텍트 방식과 JPA는 (지향점이 다르기에) 어울리지 않는 것일까요?

 

답변 2

2

POJO인 엔티티 객체에 @Entity를 붙여놓으면

Persistence Adapter의 Output Port에 해당하는 EntityManager를 통해 JPA 기능들을 사용할수 있을텐데요..

어노테이션은 말그대로 주석일 뿐 실제 JPA 기능구현은 엔티티 밖에서 이뤄진다고 생각합니다.

2

안녕하세요, user 님. 공식 서포터즈 y2gcoder 입니다.

아키텍처에 대한 고민은 저도 많이 공감합니다. 헥사고날 아키텍처뿐만 아니라 DDD를 접목하면서 도메인 계층을 POJO로 유지하려고 하기만 해도 아마 똑같은 고민에 빠지실 수 있을 것 같습니다. 말씀하신 것처럼 JPA의 Lazy Loading이나 Dirty Checking과 같은 기능은 영속성 계층에 의존하는 기능입니다. 따라서 도메인 계층과 영속성 계층을 분리하는 헥사고날 아키텍처에서는 사용할 수 없습니다.

이 부분은 JPA의 Lazy Loading이나 Dirty Checking과 같은 강력한 기능 VS헥사고날 아키텍처를 통해 Entity와 영속성 어댑터를 완전히 분리함으로써 얻는 이점과 비교하면서 선택해야 하는 문제라고 생각합니다. 이는 프로젝트의 요구사항, 규모, 자원 등에 따라 완전히 다른 판단이 나올 수 있기 때문에 뭐가 좋다고 말씀드리기 어려울 것 같습니다.

감사합니다.

user님의 프로필 이미지
user

작성한 질문수

질문하기