이전에 프로젝트를 하면서 JPA 데이터베이스 테이블에 도메인을 매핑 할 때 생성일자나 수정일 등 중복되는 필드,컬럼들이 많았었다.
그 때는 모든 도메인에 해당 컬럼을 만들면서 진행하였다. 그러다보니 같은 코드를 계속 작성하며 시간을 낭비하고 다른 도메인을 담당한 팀원들과 컬럼명이 다르게 적고 나중에 깨닫는 사고도 경험했었다.
그러다 중복을 처리해주는 JPA Auditiong이라는 것을 알게 되었고 새 프로젝트에서는 이 기능을 사용하기 위해 정리하려고 한다.
JPA에서는 Audit이라는 기능을 제공한다 Audit은 Spring Data JPA에서 시간에 대해서 자동으로 값을 넣어주는 기능이다.
도메인을 영속성 컨텍스트에 저장하거나 조회를 수행한 후에 update를 하는 경우 매번 시간 데이터를 입력하여 주어야 하는데, Audit을 이용하면 자동으로 시간을 매핑하여 데이터베이스의 테이블에 넣어주게 된다.
JPA Audit은 데이터의 변경 기록을 추적하고 데이터 변화에 대한 이력을 기록하는 것을 목적으로 한다.
@SpringBootApplication
@EnableJpaAuditing
public class CosmosApplication {
public static void main(String[] args) {
SpringApplication.run(CosmosApplication.class, args);
}
}
SpringBootApplication에 @EnableJpaAuditing
어노테이션을 추가
@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseEntity {
@CreatedDate
@Column(updatable = false)
private LocalDateTime createdAt;
@LastModifiedDate
private LocalDateTime modifiedDate;
}
@MappedSuperclass
@EntityListeners
Class AuditingEntityListener (org.springframework.data.jpa)
@CreatedDate (org.springframework.data)
@LastModifiedDate (org.springframework.data)
@CreatedBy (org.springframework.data)
@LastModifiedBy (org.springframework.data)
@Getter
@Entity
@NoArgsConstructor(access = PROTECTED)
public class Board extends BaseEntity {
@Id
private Long id;
}
선언한 변수는 id뿐이지만 2개의 컬럼이 추가된 것을 확인 할 수 있다.