티스토리 뷰
패키지 사이에 의존성을 낮추는 방법
- 절차지향 로직
- 사용할 패키지에 인터페이스를 만들고 구현은 도메인에 해당하는 패키지에서 구현
- 도메인 이벤트 퍼블리싱
도메인 이벤트 퍼블리싱이란?
- 패키지 사이에 결합도를 낮추기 위해 사용
- 도메인이 이벤트를 생성하면 이벤트 디스패처가 리스너에게 전달
- 어떤 동작 이후에 연관된 동작을 요청할 때 사용
- ex) 식사를 마친 테이블에 계산이 끝나면 테이블 상태를 변경한다.
구현 방법
- Spring Framework에서 제공하는 기능으로 구현하는 방법
- Spring Data JPA에서 제공하는 기능으로 구현하는 방법
Spring Data JPA의 이벤트 구현 예제 & 전체 소스
Publisher
// 이벤트로 전달할 형식
public class SpringEventPublisher {
private final String message;
public SpringEventPublisher(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
}
Listener
// 도메인으로부터 전달 받은 이벤트를 실행한다.
@Component
public class SpringEventListener {
@EventListener
public void listener(SpringEventPublisher eventPublisher){
System.out.println("==================================");
System.out.println("Receive message : " + eventPublisher.getMessage());
System.out.println("==================================");
}
}
Domain
// AbstractAggregateRoot 상속 받고 registerEvent로 이벤트를 등록한다.
@Entity
public class SpringEvent extends AbstractAggregateRoot<SpringEvent> {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
protected SpringEvent() {
}
public SpringEvent sendMessage(){
registerEvent(new SpringEventPublisher("event message"));
return this;
}
}
참고
[우아한테크세미나] 190620 우아한객체지향 by 우아한형제들 개발실장 조영호님
https://www.daddyprogrammer.org/post/14797/springboot-domainevent/
[Spring] 스프링 데이터 AbstractAggregateRoot 를 통해 도메인 이벤트 등록하고 테스트 하기
'Framework > Spring Data JPA' 카테고리의 다른 글
JDBC batch 크기 제한 문제 해결 (0) | 2024.12.29 |
---|---|
우아한테크캠프 Pro 5기 - Spring Data JPA (0) | 2022.11.24 |
[JPA/Hibernate] 프록시와 연관관계 관리 (0) | 2021.06.29 |
[JPA/Hibernate] 고급 매핑 (0) | 2021.06.28 |
[JPA/Hibernate] 연관관계 매핑 기초 (0) | 2021.05.25 |
댓글