JPA에서 엔티티와 관련된 이벤트를 처리하거나 발행하는 기능은 도메인 이벤트(Domain Event)와 연관됩니다. 엔티티에서 이벤트를 발행하는 기능은 도메인 주도 설계(DDD)에서 중요한 패턴 중 하나로, 도메인 모델이 특정 상태 변화나 중요한 비즈니스 이벤트가 발생했을 때 이를 외부로 알릴 수 있도록 합니다.
Spring Data JPA는 도메인 이벤트를 쉽게 처리할 수 있는 메커니즘을 제공합니다. 이를 통해 엔티티 내부에서 이벤트를 발행하고, 이를 처리하는 리스너를 통해 특정 작업을 수행할 수 있습니다. 이 방법을 사용하면 애플리케이션의 모듈성을 높이고, 비즈니스 로직과 부가 작업(예: 이메일 알림, 로그 기록 등)을 분리할 수 있습니다.
먼저, 이벤트를 표현하는 클래스를 정의합니다.
import org.springframework.context.ApplicationEvent;
public class EmployeePromotedEvent extends ApplicationEvent {
private final Long employeeId;
private final String newPosition;
public EmployeePromotedEvent(Object source, Long employeeId, String newPosition) {
super(source);
this.employeeId = employeeId;
this.newPosition = newPosition;
}
public Long getEmployeeId() {
return employeeId;
}
public String getNewPosition() {
return newPosition;
}
}
이 클래스는 직원이 승진되었을 때 발행되는 이벤트를 표현합니다. employeeId
와 newPosition
필드를 통해 승진된 직원의 정보를 포함합니다.