JAVA에서 JPA를 사용하여 도메인을 관계형 데이터베이스 테이블에 매핑할 때 공통적으로 도메인들이 가지고 있는 필드나 컬럼들이 존재한다.
데이터베이스에서는 누가, 언제 하였는지 기록을 잘 남겨놓아야 하기 때문에 생성일, 수정일 컬럼은 중요한 데이터이다.
그래서 JPA는 Audit이라는 기능을 제공하고있다.
Audir은 감시하다, 감사하다 라는 뜻으로 Spring Data JPA에서 시간에 대해서 자동으로 값을 넣어주는 기능이다.
도메인을 영속성 컨텍스트에 저장하거나 조회를 수행한 후에 update를 하는 경우 매번 시간 데이터를 입력하여 주어야 하는데 audit을 이용하면 자동으로 시간을 매핑하여 데이터베이스의 테이블에 넣어주게 된다.
JPA는 Application의 Entity와 DB의 Table을 매핑하여 사용한다.
이 데이터들은 많은 테이블에서 사용되기 때문에 Entity에도 필드로 중복되어 들어가고 해당Entity가 생성 또는 수정될 때마다 개발자가 신경 써서 데이터를 입력해줘야 하는 번거로움이 생긴다.
해당 데이터를 보고있다가 생성 또는 수정이 발생하면 자동으로 값을 넣어주는 편리한 기능이다.
@Getter
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseTimeEntity{
// Entity가 생성되어 저장될 때 시간이 자동 저장
@CreatedDate
private LocalDateTime createdDate;
// 조회한 Entity 값을 변경할 때 시간이 자동 저장
@LastModifiedDate
private LocalDateTime modifiedDate;
}
@EntityListeners(AuditingEntityListener.class)
- JPA entity에 대해 CRUD 이벤트의 전과 후를 콜백 받을 수 있는 애노테이션. 괄호 안의 클래스(AuditingEntityListener.class)는 JPA에서 제공하는 Auditing기능을 포함한 내용이 있다.
상속해서 사용하기
@Entity
public class Member extends BaseTimeEntity{
@Id @GeneratedValue
@Column(name = "MEMBER_ID")
private Long id;
@Column(name = "MEMBER_NAME")
private String username;
}