명령과 조회의 모델(도메인객체) 구분, 조회용(노출용) 모델을 따로 만들때는 DTO를 추천
명령모델 데이터가 변경되는 시점에 조회모델 생성/저장 → 비정규화된 데이터 그 자체를 그대로 조회에 이용(적은 수정 & 많은 조회 모델에서 효과 극대화)
이벤트 소싱 패턴
변경된 상태 이벤트 퍼블리싱
분리된 어플리케이션에서 이벤트를 소비하여 조회모델 생성
조회모델 설계하기
변경 감지 대상 선정과 이벤트 선정
각 감지 대상 엔티티마다 interface 구현하도록 강제함
감지 대상 엔티티 지정
데이터 변경 감지하기
JPA EntityListeners
Hibernate EvnetListener(기본)
SessionFactoryImpl → SessionFactoryServiceRegistry → EventListenerRegistry
26가지 디테일한 상황에 콜백
보다 상세한 정보 전달(변경된 프로퍼티)
모든 엔티티 변경 사항이 전달됨(원하는 엔티티 즉, 변경감지 대상 엔티티만 걸러주는 작업이 필요함)
Hibernate Interceptor
Spring AOP(delete bulk Query처럼 엔티티매니저 라이프사이클 타지 않을때 예외적으로 사용)
더 나은 설계 구조