[JPA] JPA Auditing 사용하기

giggle·2023년 8월 6일

현재 진행하는 프로젝트 도중 생성일과 수정일 필요한 경우에 setter나 Builder를 항상 사용해야 한다면 비효율적이라는 생각이 들었습니다. 그래서 이를 해결하고자 BaseTimeEntityJPA Auditing에 대해 학습하고 실제 적용해보았습니다.

📌 JPA Auditing

JPA Auditing은 데이터베이스에서 엔티티의 생성 및 수정 시간을 추적하기 위한 기능을 제공합니다. 이를 통해 각 엔터티의 생성일과 수정일을 자동으로 관리할 수 있습니다. 즉, JPA Auditing를 사용하여 엔티티가 생성되고, 변경되는 그 시점을 감지하여 생성시각, 수정시각, 생성한 사람, 수정한 사람 등등을 손쉽게 기록할 수 있습니다.

@SpringBootApplication
@EnableJpaAuditing
public class SampleApplication {

    public static void main(String[] args) {
        SpringApplication.run(SampleApplication.class, args);
    }
}

JPA Auditing을 사용하기 위해서는 메인 어플리케이션 클래스에 @EnableJpaAuditing을 추가하여 JPA Auditing을 활성화 시킬 수 있습니다.

📌 BaseTimeEntity 작성

@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseTimeEntity {

    @CreatedDate
    @Column(updatable = false)
    private LocalDateTime createdDate;

    @LastModifiedDate
    private LocalDateTime modifiedDate;

}

BaseTimeEntity를 사전에 작성한 후 해당 엔티티가 필요한 경우해 상속받아 유연하게 객체를 생성하도록 했습니다.

@MappedSuperclass : BaseTimeEntity를 상속 받은 엔티티들이 createdDate, modifiedDate를 column으로 사용할 수 있도록 합니다. 즉, 공통 매핑 정보가 필요할 때 부모 클래스에 선언된 필드를 상속받는 클래스에서 그대로 사용할 수 있습니다.

@EntityListeners(AuditingEntityListener.class) : Auditing을 적용할 엔티티 클래스에 해당 어노테이션을 적용해야합니다. @EntityListeners는 엔티티의 변화를 감지하여 엔티티와 매핑된 테이블의 데이터를 조작합니다. 추가적으로 AuditingEntityListener 클래스를 작성해 Spring Data JPA에서 제공하는 이벤트 리스너로 엔티티의 영속, 수정 이벤트를 감지하는 역할을 합니다.

@CreateDate : 생성일자는 수정되어서는 안되므로 @Column(updatable = false) 를 적용합니다. 또한, 엔티티가 생성됨을 감지하고 그 시점을 createdAt 필드에 기록합니다.

@LastModifiedDate : 엔티티가 수정됨을 감지하고 그 시점을 updatedAt 필드에 기록합니다. 즉 조회한 엔티티가 수정될 때마다 시간이 최신화가 됩니다.


참고


피드백 및 개선점은 댓글을 통해 알려주세요😊

profile
배움을 글로 기록하는 개발자가 되겠습니다.

0개의 댓글