프로젝트 진행 중 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
'study > jpa' 카테고리의 다른 글
[spring boot / JPA] @Entity @Table 정리 (0) | 2022.09.11 |
---|---|
[spring boot / spring data JPA] Parameter 0 of constructor in ~ required a single bean, but 2 were found 에러 (0) | 2022.09.04 |
댓글