@EntityListeners(AuditingEntityListener.class)는 JPA 엔티티의 특정 이벤트(저장, 수정 등)가 발생했을 때, 이를 감지하여 자동으로 특정 작업을 수행할 수 있도록 도와주는 기능입니다.
특히 Spring Data JPA의 Auditing(감사) 기능과 함께 사용되며, 엔티티가 생성되거나 수정될 때 자동으로 생성 시간, 수정 시간 등을 기록하는 데 사용됩니다.
@EntityListeners(AuditingEntityListener.class)란?AuditingEntityListener는 Spring Data JPA에서 제공하는 클래스로, 엔티티의 @CreatedDate, @LastModifiedDate, @CreatedBy, @LastModifiedBy 등의 어노테이션이 자동으로 동작할 수 있도록 도와줍니다.@EntityListeners(AuditingEntityListener.class)는 보통 엔티티의 생성/수정 시간 또는 생성자/수정자를 자동으로 기록하고 싶을 때 사용됩니다.
예를 들어, 데이터베이스의 각 테이블에 createdDate, lastModifiedDate와 같은 열이 있을 때, 이런 값을 수동으로 기록하기 번거롭겠죠? 이때 Spring Data JPA의 Auditing 기능을 사용하면, 이러한 작업을 자동으로 처리할 수 있습니다.
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*;
import java.time.LocalDateTime;
@Entity
@EntityListeners(AuditingEntityListener.class) // Auditing 기능 활성화
public class BaseEntity {
@CreatedDate // 엔티티가 처음 생성될 때 자동으로 시간 기록
@Column(updatable = false) // 수정 불가능
private LocalDateTime createdDate;
@LastModifiedDate // 엔티티가 수정될 때 자동으로 시간 기록
private LocalDateTime lastModifiedDate;
// Getter
public LocalDateTime getCreatedDate() {
return createdDate;
}
public LocalDateTime getLastModifiedDate() {
return lastModifiedDate;
}
}
위의 BaseEntity를 다른 엔티티에서 상속받아 사용할 수 있습니다. 이렇게 하면, 생성/수정 시간 기록 기능을 모든 엔티티에 쉽게 적용할 수 있습니다.
@Entity
public class User extends BaseEntity {
@Id
@GeneratedValue
private Long id;
private String username;
}
Spring Data JPA의 Auditing 기능을 사용하려면 @EnableJpaAuditing을 반드시 설정해야 합니다. 보통 Spring Boot의 설정 클래스에 추가합니다.
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
@Configuration
@EnableJpaAuditing // Auditing 기능 활성화
public class JpaConfig {
}
@CreatedDate:
persist())될 때, createdDate 필드에 현재 시간이 자동으로 기록됩니다.@Column(updatable = false)로 설정하면 수정 시 이 필드는 변경되지 않습니다.@LastModifiedDate:
persist())되거나 수정(merge())될 때, lastModifiedDate 필드에 현재 시간이 자동으로 기록됩니다.AuditingEntityListener:
AuditingEntityListener가 JPA 엔티티의 저장/수정 이벤트를 감지하고, 해당 필드에 값을 채워 넣습니다.로그/감사 데이터를 기록할 때:
수동 입력을 줄이고 자동화할 때:
createdDate, lastModifiedDate를 매번 코드에서 수동으로 설정하는 대신, 자동으로 처리할 수 있어 편리합니다.@EntityListeners(AuditingEntityListener.class)는 JPA 엔티티의 저장/수정 이벤트를 감지하여 자동으로 동작할 수 있게 도와주는 리스너를 설정합니다.@CreatedDate와 @LastModifiedDate 등을 통해 엔티티의 생성/수정 시간을 자동으로 기록합니다.