본문 바로가기
JPA

JPA Auditing

by 이상한나라의개발자 2024. 1. 30.

JPA(Auditing) 은 JAVA Persistence API의 일부로서, 엔티티의 변경 이력을 추적하고 기록하는 기능을 제공합니다. 이를 통해 데이터베이스의 특정 테이블에 변경 이력을 남길 수 있습니다. 주로 생성일, 수정일, 생성자, 수정자 등의 정보를 추적하는데 사용됩니다.

 

  • @CreatedDate : 엔티티가 생성될 때 해당 필드에 현재 날짜 및 시간이 자동으로 등록됩니다.
  • @LastModifiedDate : 엔티티가 수정될 때 해당 필드의 현재 날짜 및 시간이 자동으로 갱신 됩니다.
  • @CreatedBy : 엔티티가 생성될 때 해당 필드에 현재 사용자 정보가 자동으로 등록됩니다.
  • @LastModifiedBy : 엔티티가 수정될 때 해당 필드에 현재 사용자 정보가 자동으로 갱신 됩니다.

 

BaseEntity 만들기

JPA 엔티티 클래스들이 공통적으로 사용하는 기본 속성들을 가지고 있는 추상 클래스를 만듭니다. 이 클래스를 만들어 상속하면 여러 엔티티 클래스에서 중복 코드를 피하고 고옹 필드를 사용하게 되어 구조의 일관성을 보장하게 됩니다. 주로, 생성일, 생성자, 수정일, 수정자 등의 기본적인 Auditing 정보를 관리하는데 사용됩니다.

 

아래 코드는 SpringDataJPA의 Auditing을 사용하여 엔티티 생성 및 수정 정보를 추적하기 위한 추상 클래스 입니다. 

@MappedSuperclass는 JPA에서 해당 클래스가 테이블과 매핑되지 않고 다른 엔티티 클래스들이 이 클래스를 상속 받아 공통 필드를 사용하도록 하는 역할을 합니다. 즉, 이 클래스는 테이블로서 매핑되지 않고 상속 받은 엔티티가 클래스에 필드를 위임합니다.

아래 클래스를 상속 받은 엔티티 클래스들은 자동으로 생성일, 수정일, 생성자, 수정자를 관리하게 됩니다. 이를 통해 코드의 재사용성을 높이고 Auditing 정보를 일관되게 관리할 수 있습니다.

@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseEntity {

    @CreatedDate
    private LocalDateTime createdAt;

    @LastModifiedDate
    private LocalDateTime modifiedAt;

    @CreatedBy
    private String createdBy;

    @LastModifiedBy
    private String modifiedBy;
}

 

AduitorAware 구현

이 코드는 Spring Data JPA에서 제공하는 AuditorAware 인터페이스를 구현한 것으로, 사용자 정보를 제공하는 역할을 합니다.

public class SecurityAuditorAware implements AuditorAware<String> {
    @Override
    public Optional<String> getCurrentAuditor() {

        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();

        if (authentication == null || !authentication.isAuthenticated()) {
            return Optional.empty();
        }

        return Optional.of(authentication.getName());
    }
}

 

EnableJpaAuditing 설정

이 코드는 Spring Data JPA Auditing을 활성화하고, 사용자 정보를 제공하는 SecurityAuditorAware 빈을 등록하는 Java Config 클래스 입니다.  @EnableJpaAuditing(auditorAwareRef = "auditorAware") 이 어노테이션은 Spring Data JPA Auditing을 활성화하는 역활을 합니다. auditorAwareRef 속성은 AuditorAware 구현체를 지정하는데, 여기서는 auditorAware 빈을 사용하도록 설정 합니다.

@Configuration
@EnableJpaAuditing(auditorAwareRef = "auditorAware")
public class JpaAuditingConfig {

    @Bean
    public SecurityAuditorAware auditorAware() {
        return new SecurityAuditorAware();
    }
}

'JPA' 카테고리의 다른 글

Spring Data JPA  (0) 2024.03.08
JPA 조회 전략  (0) 2024.03.07
JPA Entity 설계시 베스트 프랙티스  (0) 2024.02.22
JPA OSIV  (0) 2024.01.31
JPA  (0) 2023.12.03