개집사의 개발새발

반응형

Auditing

Audit 사전적 정의: 감시하다

엔티티의 생성과 수정을 감시하고 있음

Spring Data Jpa에서 엔티티가 저장, 수정될 때 자동으로 등록일, 수정일, 등록자, 수정자 입력해 주는 기능

 

설계한 엔티티들을 보면 등록시간(regTime), 수정시간(updateTime) 멤버변수가 공통으로 들어가 있음

공통 멤버 변수들을 추상 클래스로 만들고, 해당 추상 클래스를 상속받는 형태 만들기

 

현재 로그인한 사용자의 정보를 등록자와 수정자로 지정

package com.shop.config;

import org.springframework.data.domain.AuditorAware;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;

import java.util.Optional;

public class AuditorAwareImpl 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);
    }
}

Auditing 기능 사용하기

package com.shop.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.domain.AuditorAware;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;

@Configuration
@EnableJpaAuditing  //JPA의 Auditing 기능 활성화
public class AuditConfig {

    @Bean
    public AuditorAware<String> auditorProvider() { //등록자와 수정자를 처리해 주는 AuditorAware을 빈으로 등록
        return new AuditorAwareImpl();
    }
}

 

Auditing 적용

@EntityListeners(value = {AuditingEntityListener.class})    //Auditing 적용 어노테이션
@MappedSuperclass   //공통 매핑 정보가 필요할 때 사용 -> 부모 클래스를 상속받는 자식 클래스에 매핑 정보만 제공
@Getter @Setter
public abstract  class BaseTimeEntity {

    @CreatedDate    //엔티티가 생성되어 저장될 때 시간을 자동으로 저장
    @Column(updatable = false)
    private LocalDateTime regTime;

    @LastModifiedDate   // 엔티티 값을 변경할 때 시간을 자동으로 저장(수정)
    private LocalDateTime updateTime;
}

위에서 만든 BaseTimeEntity를 상속받고 있음

등록일, 수정일, 등록자, 수정자를 모두 갖는 엔티티는 BastEntity를 상속받으면 됨

 

예:

public class Order extends BaseEntity{
public class Cart extends BaseEntity{

 

만약 등록시간, 수정 시간이 멤버변수로 있다면 삭제 후 상속

반응형
반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band