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 이다

이런게 있다만 알고 넘어가자