Audit은 사전적 의미로 감사하다, 심사하다 등의 의미를 가지고 있다.
엔티티가 생성되고, 변경되는 그 시점을 감지하여 생성시각, 수정시각, 생성한 사람, 수정한 사람을 기록할 수 있다.
@EnableJpaAuditing
@EnableJpaAuditing
어노테이션을 사용하여, Auditing을 활성화 한다. (또는 @Configuration 어노테이션이 사용된 클래스)@SpringBootApplication
@EnableJpaAuditing
public class SampleApplication {
public static void main(String[] args) {
SpringApplication.run(SampleApplication.class, args);
}
}
Entity
코드 작성@EntityListeners(AuditingEntityListener.class)
@Entity
public class Post {
...
@CreatedDate
@Column(updatable = false)
private LocalDateTime createdAt;
@LastModifiedDate
private LocalDateTime updatedAt;
...
}
BaseEntity
분리해서 사용생성시각과 수정시각은 대부분의 엔티티에서 사용된다. 이를 BaseEntity로 분리하여 다른 엔티티들이 상속 받아 사용하도록 하자!
1.
public class Post extends BaseEntity { //상속
2.
@Data
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public class BaseEntity {
@CreatedDate
@Column(updatable = false)
private LocalDateTime createdAt;
@LastModifiedDate
private LocalDateTime updatedAt;
}
@EntityListeners
@EntityListeners(AuditingEntityListener.class)
우선 Auditing을 적용할 엔티티 클래스에 @EntityListeners 어노테이션을 적용해야한다. 해당 어노테이션은 엔티티의 변화를 감지하여 엔티티와 매핑된 테이블의 데이터를 조작한다.
이 어노테이션의 파라미터에 이벤트 리스너를 넣어줘야하는데, 여기에 AuditingEntityListener.class
를 넣어준다. 이 클래스는 Spring Data JPA에서 제공하는 이벤트 리스너로 엔티티의 영속, 수정 이벤트를 감지하는 역할을 한다.
@CreateDate
생성일을 기록하기 위해 LocalDateTime 타입의 필드에 @CreateDate 를 적용한다. 또한 생성일자는 수정되어서는 안되므로 @Column(updatable = false)
를 적용한다. 이렇게 적용하면, 엔티티가 생성됨을 감지하고 그 시점을 createdAt 필드에 기록한다.
@LastModifiedDate
수정일을 기록하기 위해 LocalDateTime 타입의 필드에 @LastModifiedDate 를 적용한다. 이렇게 적용하면, 엔티티가 수정됨을 감지하고 그 시점을 updatedAt 필드에 기록한다.
@MappedSuperclass