[Spring] JPA Auditing 어노테이션 / @EnableJpaAuditing, @EntityListeners

1. 소개

Spring Data JPA를 사용하면 엔티티의 생성 및 수정 시간을 자동으로 관리할 수 있다. 이를 위해 @EnableJpaAuditing, @EntityListeners, @CreatedDate, @LastModifiedDate 등의 어노테이션을 활용 할 수 있다.
이번 글에서는 해당 어노테이션들의 역할과 사용법을 정리해보겠다.

 

2. 코드 예제

아래는 Spring Data JPA의 Auditing 기능을 사용하는 예제 코드이다.

@EntityListeners(EntityListeners.class)
@MappedSuperclass
@Getter
public class TimeBaseEntity {
    @CreatedDate
    @Column(updatable = false)
    private LocalDateTime createdAt;

    @LastModifiedDate
    private LocalDateTime updatedAt;
}

@EnableJpaAuditing
@SpringBootApplication
public class Main {
    public static void main(String[] args) {
        SpringApplication.run(Main.class);
    }
}

 

3. 어노테이션 설명

 

① @EnableJpaAuditing

  • Spring Boot 애플리케이션에서 JPA Auditing을 활성화하는 어노테이션
  • @CreatedDate, @LastModifiedDate 등의 기능이 정상적으로 동작하려면 반드시 필요하다.
  • @SpringBootApplication과 함께 설정하는 것이 일반적이다.

② @MappedSuperclass

  • 해당 클래스를 다른 엔티티에서 상속받을 때, 부모 클래스의 필드를 컬럼으로 사용할 수 있도록 해주는 어노테이션이다.
  • 직접 테이블이 생성되지 않으며, 이를 상속받은 엔티티가 createdAt, updatedAt을 가지게 된다.

③ @EntityListeners(AuditingEntityListener.class)

  • 엔티티가 저장되거나 업데이트될 때 자동으로 감지하여 @CreatedDate, @LastModifiedDate 필드를 채울 수 있도록 돕는 리스너를 등록한다.
  • JPA에서 엔티티의 라이프사이클 이벤트를 감지하는 역할을 한다.

④ @CreatedDate

  • 엔티티가 처음 생성될 때 해당 필드에 자동으로 현재 시간이 저장된다.
  • @Column(updatable = false)와 함께 사용하면, 이후 업데이트 시 값이 변경되지 않도록 방지할 수 있다.

⑤ @LastModifiedDate

  • 엔티티가 수정될 때 해당 필드가 자동으로 갱신된다.
  • @CreatedDate와 달리, 엔티티가 수정될 때마다 값이 변경된다.