본문 바로가기
공부/Spring

스프링 데이터 JPA에서 Auditing을 적용해보자!

by JERO__ 2022. 8. 25.

Auditing은?

엔티티를 생성, 변경할 때 변경한 사람과 시간을 추적하고 싶을 때 사용한다. 실무에서 많이 사용된다.

  • 등록일 : 모든 테이블에 공통으로 적용 (권장)
  • 수정일 : 모든 테이블에 공통으로 적용 (권장)
  • 등록자, 수정자 : 테이블에 따라 정한다 (팀 컨밴션)

 

먼저, 순수 JPA에서 사용한다면?

우선, 등록일과 수정일만 적용해보자

public class Member extends JpaBaseEntity {
}
  • @*MappedSuperclass :* 는 테이블과는 관계가 없고 단순히 엔티티가 공통으로 사용하는 매핑 정보를 모아주는 역할이다.
  • @PrePersist : 엔티티가 비영속 상태에서 영속 상태가 되는 시점 이전에 실행된다.
  • @PreUpdate : 영속 상태의 엔티티를 이용하여 데이터 업데이트를 수행하기 이전에 실행된다.

 

스프링 데이터 JPA에서 사용해보자. 훨씬 간편하다!

@EntityListeners(AuditingEntityListener.class)
@MappedSuperclass
public class BaseEntity {
    @CreatedDate
    @Column(updatable = false)
    private LocalDateTime createdDate;
    
    @LastModifiedDate 
    private LocalDateTime lastModifiedDate;
    
    @CreatedBy
    @Column(updatable = false)
    private String createdBy;
    
    @LastModifiedBy
    private String lastModifiedBy;
}
  • @CreatedDate : 등록일
  • @LastModifiedDate : 수정일
  • @CreatedBy : 등록자
  • @LastModifiedBy : 수정자

등록자, 수정자를 처리하기 위해서 AuditorAware을 스프링 빈으로 등록해야 한다. 실무에서는 세션 정보나, 스프링 시큐리티 로그인 정보에서 ID를 받는다.

@Bean
public AuditorAware<String> auditorProvider() {
	return () -> Optional.of(UUID.randomUUID().toString());
}

 

참고

실무에서 대부분의 엔티티는 등록시간, 수정시간이 필요하지만, 등록자, 수정자는 없을 수도 있다. 그래서 Base 타입을 분리하고, 원하는 타입을 선택해서 상속한다!

 

댓글