본문 바로가기
study/jpa

[spring boot / spring data JPA] 엔티티 Auditing 적용

by eunoia_DB 2022. 9. 24.

프로젝트 진행 중 spring Data Jpa에서 제공하는 Auditing 기능을 적용했었는데

실제 적용했던 것을 복습하면서 다시 한번 정리해 보려고 한다.

 

 

 

1. Auditing 이란 무엇인가?

 

-  Audit는 감시하다 라는 의미를 가지는데 이 뜻처럼 해당 데이터를 보고 있다가 DB에 저장 및 수정이 되면 자동으로

   등록자, 등록시간, 수정자, 수정시간을 입력해준다.

-  제공하는 어노테이션으로는 @CreatedBy, @CreatedDate, @LastModifiedBy, @LastModifiedDate 가 있다.

 

 


 

 

2. Auditing 적용 방법

 

1) AuditorAware 인터페이스를 구현

현 프로젝트(쇼핑몰 프로젝트)에서는 로그인을 한 후 상품을 등록하고 수정하는 기능을 가지고 있기 때문에

로그인한 사용자의 정보를 등록자 및 수정자로 지정하기 위해 AuditorAware 인터페이스를 구현한다.

public class AuditorAwarelmpl implements AuditorAware<String> {
    @Override
    public Optional<String> getCurrentAuditor() {
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        String userId = "";
        if(authentication != null){
            userId = authentication.getName();
        }
        return Optional.of(userId);
    }
}

 

 

2) Config 파일 생성 - Auditing 기능 활성화

@Configuration
@EnableJpaAuditing
public class AuditConfig {

    @Bean
    public AuditorAware<String> auditorProvider(){
        return new AuditorAwarelmpl();
    }
}

 

 

3) BaseTimeEntity, BaseEntity 추상 클래스 생성

나중에 실질적으로 사용하는 엔티티에 추상 클래스를 상속 받게 할 것이기 때문에

BaseTimeEntity(등록일, 수정일만 포함)와 BaseEntity(등록일, 수정일, 등록자, 수정자 모두 포함)를 작성한다.

 

- BaseTimeEntity

@EntityListeners(value = {AuditingEntityListener.class})
@MappedSuperclass
@Getter @Setter
public abstract class BaseTimeEntity {

    @CreatedDate
    @Column(updatable = false)
    private LocalDateTime regTime;

    @LastModifiedDate
    private LocalDateTime updateTime;
}

 

- BaseEntity 

(BaseTimeEntity를 상속 받고 있기 때문에 등록자 수정자에 대한 변수만 작성한다.)

@EntityListeners(value = {AuditingEntityListener.class})
@MappedSuperclass
@Getter
public abstract class BaseEntity extends BaseTimeEntity{

    @CreatedBy
    @Column(updatable = false)
    private String createBy;

    @LastModifiedBy
    private String modifiedBy;
}

 

 

4) Auditing 기능을 사용할 엔티티에 BaseEntity 상속 받게 하기

public class Member extends BaseEntity{
	//코드 생략
}

 

 


 

 

3. Auditing 적용 후 테스트

 

Member 엔티티에 Auditing 기능을 적용했기 때문에 기능이 잘 작동하는지 테스트를 실행했고

테스트 후 기능이 잘 작동되는 것을 확인했다.

 

 

 

 

 

 

 

 

 

 


Reference

 

https://web-km.tistory.com/42  

참고 도서명: 백견불여일타 스프링 부트 쇼핑몰 프로젝트 with jpa

 

 

 

 

 

 

 

 

 

 

 

 

 

댓글