ABOUT ME

Today
Yesterday
Total
  • 엔티티의 생성 및 수정 시간 자동화하기
    Spring 2024. 4. 9. 17:47

    Spring Data JPA의 Auditing 기능을 사용하여 엔티티의 생성 시간과 수정 시간을 자동으로 기록하는 방법은 개발자로 하여금 반복적인 작업에서 벗어나게 하고, 코드의 간결성을 유지할 수 있게 합니다.

    코드 예시

    @Getter
    @MappedSuperclass
    @EntityListeners(AuditingEntityListener.class)
    public class BaseTimeEntity {
    
        @CreatedDate
        private LocalDateTime dateCreated;
    
        @LastModifiedDate
        private LocalDateTime dateUpdated;
    }

    Annotation 설명

    @Getter Lombok 라이브러리의 어노테이션으로, 이 클래스의 모든 필드에 대한 getter 메소드를 자동으로 생성합니다.
    @MappedSuperclass JPA의 어노테이션으로, 이 클래스를 상속하는 엔티티 클래스들이 BaseTimeEntity의 필드(dateCreated, dateUpdated)를 컬럼으로 인식하도록 합니다.
    @EntityListeners(AuditingEntityListener.class) JPA 엔티티의 이벤트를 처리하기 위한 리스너를 지정합니다. AuditingEntityListener를 사용하여 엔티티의 생성 및 수정 시간을 자동으로 감사(audit)합니다.
    @CreatedDate 엔티티가 생성되어 저장될 때의 시간을 자동으로 기록합니다.
    @LastModifiedDate= 엔티티가 마지막으로 수정된 시간을 자동으로 기록합니다.

    설정 방법

    JPA Auditing을 사용하기 위해서는 Spring Boot의 메인 애플리케이션 클래스나 설정 클래스에 @EnableJpaAuditing 어노테이션을 추가하여 Auditing 기능을 활성화해야 합니다.

    코드 예시 - @EnableJpaAuditing 활성화

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

    또 다른 구현 방법

    JPA의 생명주기 콜백 메소드를 직접 사용하여 같은 기능을 구현할 수 있습니다.

    @MappedSuperclass
    public class BaseTimeEntityManual {
    
        private LocalDateTime dateCreated;
    
        private LocalDateTime dateUpdated;
    
        @PrePersist
        public void prePersist() {
            this.dateCreated = LocalDateTime.now();
            this.dateUpdated = LocalDateTime.now();
        }
    
        @PreUpdate
        public void preUpdate() {
            this.dateUpdated = LocalDateTime.now();
        }
    }

    추천 방법

    @EnableJpaAuditing을 활성화하고, @CreatedDate 및 @LastModifiedDate 어노테이션을 사용하는 방식이 더 선호됩니다. 이 방식은 코드를 간결하게 유지하고, Spring Data JPA의 강력한 기능을 최대한 활용할 수 있게 합니다.

    장점

    코드 자동화의 이점
    반복 코드 감소, 개발 효율성 증가, 데이터 일관성 유지

    댓글

Designed by Tistory.