@EntityListeners(AuditingEntityListener.class)란?

예린·2024년 11월 18일

SpringBoot

목록 보기
1/3

@EntityListeners(AuditingEntityListener.class)는 JPA 엔티티의 특정 이벤트(저장, 수정 등)가 발생했을 때, 이를 감지하여 자동으로 특정 작업을 수행할 수 있도록 도와주는 기능입니다.

특히 Spring Data JPA의 Auditing(감사) 기능과 함께 사용되며, 엔티티가 생성되거나 수정될 때 자동으로 생성 시간, 수정 시간 등을 기록하는 데 사용됩니다.


1. @EntityListeners(AuditingEntityListener.class)란?

  • JPA 엔티티의 변경 이벤트를 감지하여, 특정 동작(예: 시간 자동 기록)을 수행하는 리스너(listener)를 연결하는 데 사용됩니다.
  • AuditingEntityListener는 Spring Data JPA에서 제공하는 클래스로, 엔티티의 @CreatedDate, @LastModifiedDate, @CreatedBy, @LastModifiedBy 등의 어노테이션이 자동으로 동작할 수 있도록 도와줍니다.

2. 언제 사용하는가?

@EntityListeners(AuditingEntityListener.class)는 보통 엔티티의 생성/수정 시간 또는 생성자/수정자를 자동으로 기록하고 싶을 때 사용됩니다.

예를 들어, 데이터베이스의 각 테이블에 createdDate, lastModifiedDate와 같은 열이 있을 때, 이런 값을 수동으로 기록하기 번거롭겠죠? 이때 Spring Data JPA의 Auditing 기능을 사용하면, 이러한 작업을 자동으로 처리할 수 있습니다.


3. 예제 코드

1) 엔티티 클래스에 적용

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;
    }
}

2) 다른 엔티티에서 상속받아 사용

위의 BaseEntity를 다른 엔티티에서 상속받아 사용할 수 있습니다. 이렇게 하면, 생성/수정 시간 기록 기능을 모든 엔티티에 쉽게 적용할 수 있습니다.

@Entity
public class User extends BaseEntity {

    @Id
    @GeneratedValue
    private Long id;

    private String username;
}

3) Auditing 활성화 (필수 설정)

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 {
}

4. 동작 방식

  1. @CreatedDate:

    • 엔티티가 처음 저장(persist())될 때, createdDate 필드에 현재 시간이 자동으로 기록됩니다.
    • @Column(updatable = false)로 설정하면 수정 시 이 필드는 변경되지 않습니다.
  2. @LastModifiedDate:

    • 엔티티가 저장(persist())되거나 수정(merge())될 때, lastModifiedDate 필드에 현재 시간이 자동으로 기록됩니다.
  3. AuditingEntityListener:

    • AuditingEntityListener가 JPA 엔티티의 저장/수정 이벤트를 감지하고, 해당 필드에 값을 채워 넣습니다.

5. 어떤 상황에서 사용되는가?

  1. 로그/감사 데이터를 기록할 때:

    • 데이터가 언제 생성되었는지, 마지막으로 수정된 시간이 언제인지 기록해야 할 때 사용됩니다.
    • 예: 사용자 로그, 주문 기록, 상품 변경 기록 등.
  2. 수동 입력을 줄이고 자동화할 때:

    • createdDate, lastModifiedDate를 매번 코드에서 수동으로 설정하는 대신, 자동으로 처리할 수 있어 편리합니다.

6. 요약

  • @EntityListeners(AuditingEntityListener.class)는 JPA 엔티티의 저장/수정 이벤트를 감지하여 자동으로 동작할 수 있게 도와주는 리스너를 설정합니다.
  • Spring Data JPA의 Auditing 기능과 함께 사용하며, @CreatedDate와 @LastModifiedDate 등을 통해 엔티티의 생성/수정 시간을 자동으로 기록합니다.
  • 설정이 간단하고 반복적인 작업을 줄이기 때문에, 데이터베이스의 감사/로그 데이터를 관리하는 데 유용합니다.

0개의 댓글