Spring/jpa
[spring data jpa] spring data jpa - common2
kwon92
2020. 12. 17. 15:36
도메인 이벤트
스프링 데이터가 제공하는 이벤트 퍼블리싱 기능
도메인 이벤트 퍼블리싱?
도메인 , 엔티티 클래스가 변할때 이벤트로 발생을 시켜서
이벤트를 리스닝 하는 리스너가 변화를 감지하고 어떤 이벤트 기반의 프로그래밍을 할 수 있는것
스프링에서 어플리케이션 컨텍스트가 이벤트 퍼블리셔를 상속받고 있다.
ApplicationEvent 를 상속받아서 Event 를 만들었고
이렇게 이벤트를 던지면
이 이벤트 리스너에서 받아서 사용을 할 수 있다.
이런식으로 이벤트 리스너가 동작을 한다
그런데, JPA 에서 리포지토리에서 save 를 할 때 이벤트 자동 퍼블리쉬 기능을 해준다.
쌓여있던 이벤트를 save 하는 순간 다 이벤트를 퍼블리쉬한다.
@DomainEvents 라는 어노테이션을 가지고 있는 메소드에서 이벤트를 모아 놓고
다 보내고
@AfterDomainEventPublication이 쌓여있던 이벤트를 비워줘야 하는데 메모리를 자동으로 비워준다.
저걸 원래는 둘 다 구현해줘야 하지만
AbstractAggregationRoot 를 사용하면 이미 구현이 되어있어서
가져다 쓰면된다.
이걸 쓰면 위처럼 이벤트를 직접 날리는게 아니라
save 할때 이벤트를 만들어서 넣으면 된다.
QueryDSL
이런식으로 쿼리를 쓸 수 있는게 QueryDSL 이다
이런게 있다만 알고 넘어가자