[Spring] JPA Auditing 으로 날짜/시간 처리 자동화

    1. 시작하며

    JPA Auditing 을 통해 등록/수정 날짜/시간 설정을 자동화 해보자.

    2. 왜 JPA Auditing 쓰나?

    매번 엔티티의 날짜/시간 데이터가 변경돨 때마다 이를 코드로 수정한다면 여기저기 입력/수정 코드를 구현해야한다. 그러나 JPA Auditing를 사용하면 공통으로 처리할 수 있다.

    3. JPA Auditing 구현

    1) BaseEntity 추상 클래스를 생성한다

    도메인에 BaseEntity 클래스를 생성한다. BaseEntity는 모든 Entity의 상위 클래스이다. 따라서 이를 상속받는 Entity들의 createdDate, modifiedDate를 자동으로 관리하는 역할을 한다.

    @Getter
    @MappedSuperclass
    @EntityListeners(AuditingEntityListener.class)
    public abstract class BaseEntity {
    
        @Column(name = "created_date", nullable = false, updatable = false)
        @CreatedDate
        private LocalDateTime createdDate;
    
        @Column(name = "modified_date")
        @LastModifiedDate
        private LocalDateTime modifiedDate;
    }
    • @MappedSuperclass
      • JPA Entity 클래스들이 BaseEntity를 상속할 때 createdDate,modifiedDate 도 컬럼으로 인식하도록 한다.
    • @EntityListeners(AuditingEntityListener.class)
      • BaseEntity에 Auditing 기능을 포함 시킨다.
      • @EntityListeners 는 리스너 클래스 지정을 통해 엔티티 객체 상태가 변경될 때 해당 리스너로 콜백을 받는다.
      • AuditingEntityListener 는 JPA 내부에서 엔티티 객체가 생성/변경 되는 것을 감지한다.
    • @CreatedDate
      • 생성일 자동 저장
    • @LastModifiedDate
      • 마지막 수정시간 자동 저장

    2) 도메인 클래스가 BaseEntity를 상속 받도록 수정한다

    public class Posts extends BaseEntity {
    }

    3) JPA Auditing 활성화 한다

    @EnableJpaAuditing 옵션을 활성화한다.

    @EnableJpaAuditing
    @SpringBootApplication
    public class SpringbootWebserviceApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(SpringbootWebserviceApplication.class, args);
        }
    
    }

    4. LocalDate / LocalDateTime

    java8 부터는 LocalDate 와 LocalDateTime 를 써야 한다.

    LocalDate localDate = LocalDate.now();
    LocalTime localTime = LocalTime.now();
    LocalDateTime localDateTime = LocalDateTime.now();
    LocalDate : 2021-12-25
    LocalTime : 22:08:07.800537900
    LocalDateTime : 2021-12-25T22:08:07.800537900

    5. 마치며

    JPA auditing 을 통해 등록일, 수정일을 자동화 할 수 있다. BaseEntity를 추상클래스로 등록하고 @EntityListeners(AuditingEntityListener.class) 를 추가한다. 그 후 다른 entity에서는 이를 상속 받아 사용한다. 그리고 @EnableJpaAuditing 를 활성화 해야한다.

    다음에는 등록/수정자에 대해서도 알아보자.

    참고

    반응형

    댓글

    Designed by JB FACTORY