본문 바로가기
JPA

JPA - @EntityListeners 엔티티의 생명주기 이벤트 리스닝

by 지민재 2024. 7. 17.
반응형
SMALL

EntityListeners란 무엇일까?

오늘은 JPA(EntityListeners)에 대해 알아볼까 한다. EntityListeners는 엔티티의 생명주기 이벤트를 처리하기 위해 사용하는 기능이다. 이 기능을 사용하면 엔티티가 생성되거나 업데이트될 때 특정 로직을 실행할 수 있다.

EntityListeners의 기본 개념

EntityListeners는 엔티티 클래스에 리스너를 등록해서 엔티티의 상태 변화에 따라 특정 메서드를 호출하는 방식으로 동작한다. 예를 들어, 엔티티가 저장되기 전에, 저장된 후에, 삭제되기 전에, 삭제된 후에 등 다양한 시점에 원하는 작업을 수행할 수 있다.

주요 애노테이션

  • @EntityListeners: 엔티티 클래스에 리스너 클래스를 지정할 때 사용
  • @PrePersist: 엔티티가 저장되기 전에 호출
  • @PostPersist: 엔티티가 저장된 후에 호출
  • @PreUpdate: 엔티티가 업데이트되기 전에 호출
  • @PostUpdate: 엔티티가 업데이트된 후에 호출
  • @PreRemove: 엔티티가 삭제되기 전에 호출
  • @PostRemove: 엔티티가 삭제된 후에 호출
  • @PostLoad: 엔티티가 로드된 후에 호출

예제

그럼 간단한 예제를 통해서 EntityListeners를 어떻게 사용하는지 알아보자. 먼저, User 엔티티 클래스를 만들어보자.

@Entity
@EntityListeners(UserEntityListener.class)
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    private String email;

    // getters and setters
}

 

리스너 클래스

이제 UserEntityListener 클래스를 만들어보자. 이 클래스에서 User 엔티티의 생명주기 이벤트를 처리

public class UserEntityListener {

    @PrePersist
    public void prePersist(User user) {
        System.out.println("Before saving user: " + user.getName());
    }

    @PostPersist
    public void postPersist(User user) {
        System.out.println("After saving user: " + user.getName());
    }

    @PreUpdate
    public void preUpdate(User user) {
        System.out.println("Before updating user: " + user.getName());
    }

    @PostUpdate
    public void postUpdate(User user) {
        System.out.println("After updating user: " + user.getName());
    }

    @PreRemove
    public void preRemove(User user) {
        System.out.println("Before deleting user: " + user.getName());
    }

    @PostRemove
    public void postRemove(User user) {
        System.out.println("After deleting user: " + user.getName());
    }

    @PostLoad
    public void postLoad(User user) {
        System.out.println("After loading user: " + user.getName());
    }
}​

마무리

이렇게 EntityListeners를 사용하면 엔티티의 생명주기 이벤트에 맞춰 다양한 로직을 추가할 수 있다. 특히 로깅, 감사 기능, 데이터 검증 등 여러 상황에서 유용하게 사용할 수 있다. 한번 직접 구현해보고 다양한 상황에 맞게 활용해보자!


 

댓글