[JPA] JPA Auditing 사용하기

giggle·2023년 8월 6일
0

현재 진행하는 프로젝트 도중 생성일과 수정일 필요한 경우에 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개의 댓글