@EntityListeners
🧷 @EntityListeners
정의
@EntityListeners는 JPA 엔티티의 생명주기 이벤트에 반응하는 콜백 클래스를 연결하는 애너테이션이다. 엔티티가 저장, 수정, 삭제될 때 특정 메서드를 실행할 수 있다.
엔티티에 직접 로직을 넣지 않고 생명주기별 처리 로직을 분리할 때 유용하다.
🧩 역할
- 엔티티 생명주기 이벤트를 감지한다
- 저장, 수정, 삭제 시점에 별도 로직을 실행한다
- 감사 로그, 초기값 세팅, 변경 추적에 활용할 수 있다
- 엔티티와 부가 로직을 분리해 가독성을 높인다
🛠 사용법
엔티티에 리스너 연결
import javax.persistence.*;
@Entity
@EntityListeners(AuditListener.class)
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
}
리스너 클래스 구현
import javax.persistence.*;
public class AuditListener {
@PrePersist
public void beforeSave(Object obj) {
System.out.println("객체가 저장되기 전: " + obj);
}
@PostPersist
public void afterSave(Object obj) {
System.out.println("객체가 저장된 후: " + obj);
}
}
주요 콜백 메서드
| Callback | 호출 시점 |
|---|---|
@PrePersist |
영속화 직전 |
@PostPersist |
영속화 직후 |
@PostLoad |
조회 후 |
@PreUpdate |
수정 직전 |
@PostUpdate |
수정 직후 |
@PreRemove |
삭제 직전 |
@PostRemove |
삭제 직후 |
⚠️ 주의사항
- 콜백 로직은 짧고 명확하게 유지하는 것이 좋다.
- 리스너에서 다른 엔티티를 무리하게 조작하면 예기치 않은 부작용이 생길 수 있다.
- 감사 기능을 쓸 때는
@EnableJpaAuditing과 함께 구성하는 경우가 많다. - 엔티티 내부 로직과 리스너 로직이 섞이지 않도록 역할을 분리하는 것이 좋다.
📌 정리
@EntityListeners는 엔티티 생명주기 이벤트에 반응하는 콜백 연결 애너테이션이다.- 저장, 수정, 삭제 시점의 부가 로직을 분리해서 관리할 때 유용하다.
- 감사 기능이나 변경 추적 기능과 함께 자주 사용된다.
댓글남기기