ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring JPA Auditing 사용방법과 주의사항
    스프링 2023. 1. 28. 14:10

    JPA 는 Auditing(감시)이라는 기능을 제공하는데, JPA 엔티티의 변경을 감시하여 생성, 수정과 관련된 데이터를 자동으로 넣어주기 때문에 구현 시 이와 관련된 코드 작업을 줄일 수 있어 편리하다.

    1. BaseEntity

    생성,수정 시간은 여러 엔티티에 공통으로 사용되는 경우가 많으므로 별도의 클래스를 선언하고, 엔티티는 이 추상클래스를 확장하여 사용한다.

    import java.time.LocalDateTime;
    
    import javax.persistence.EntityListeners;
    import javax.persistence.MappedSuperclass;
    
    import org.springframework.data.annotation.CreatedDate;
    import org.springframework.data.annotation.LastModifiedDate;
    import org.springframework.data.jpa.domain.support.AuditingEntityListener;
    
    @MappedSuperclass
    @EntityListeners(AuditingEntityListener.class)
    public abstract class BaseEntity {
    
    		@CreatedDate
    		private LocalDateTime createdDate;
    		@LastModifiedDate
    		private LocalDateTime updatedDate;
    }
    
    • @MappedSuperclass: Entity들의 공통된 필드를 사용할 때 사용하며, @MappedSuperclass 어노테이션이 달린 클래스는 엔티티가 아니고 클래스 내에 선언된 필드를 제공할 뿐이다.
    • @EntityListners(AuditingEntityListner.class) : Entity를 DB에 적용하기 이전과 이후에 커스텀 콜백을 요청할 수 있게 한다. 여기선 Auditing 기능을 추가하였다.
    • @CreatedDate : Entity 생성 시간을 자동으로 저장
    • @LastModifiedDate: Entity 값 수정한 시간 자동 저장
    • @CreatedBy: Entity 생성자 자동 저장
    • @LastModifiedBy: Entity 수정자 자동 저장

    2. Entity

    위에서 만든 클래스를 해당 필드가 필요한 엔티티에 extends 한다.

    @Entity
    public class Member extends BaseEntity{
        private Long id;
    		private String name;
    }
    

     

    3. @EnableJpaAuditing

    @EnableJpaAuditing : Jpa Auditing 기능을 사용하겠다라는 설정을 해주어야 한다.

    @EnableJpaAuditing
    @Configuration
    public class JpaAuditingConfig {
    }
    

    @SpringBootApplication 이 붙은 스프링 부트 메인 클래스에 @EnableJpaAuditing 를 사용하면 스프링 컨테이너가 필요한 테스트를 할 때 아래와 같은 에러가 발생하므로 별도 설정파일로 분리해서 사용하자.

    (추가 : 아래 오류가 발생하는 이유는 스프링 의존이 필요한 테스트를 할때 메인클래스가 로딩될 때 @EnableJpaAuditing 가 붙어 있으면 JPA 관련 빈을 불러와야 하는데 mock 테스트를 할 때 해당 빈이 없어서 호출 할 수 없기 때문이다. JpaMetamodelMappingContext를 mockbean으로 등록시켜도 오류를 해결할 수 있지만, 테스트에 필요없는 mockbean을 등록시키는 건 테스트 의도와 맞지 않을 뿐더러 Jpa 설정을 메인 클래스에서 분리시키는 게 SRP를 충족한다.)

    '스프링' 카테고리의 다른 글

    [Spring boot] AWS S3 를 이용한 파일 업로드  (1) 2023.02.16
Designed by Tistory.