[프로젝트] 13. BaseTimeEntity 추가를 통한 데이터 생명 주기 관리
프로젝트에 BaseTimeEntity 추가하는 것은 엔티티의 생성 시간과 수정 시간을 자동으로 관리하게 해주어, 데이터의 생명 주기를 보다 효율적으로 관리할 수 있게 해줍니다. 이 기능을 활용하면 수동으로 시간을 관리하는 번거로움을 줄이고, 데이터의 일관성을 유지할 수 있습니다.
Spring Boot Application 설정 변경
@EnableJpaAuditing 어노테이션을 MyshopApplication 클래스에 추가하여 JPA Auditing을 활성화합니다. 또한, @PostConstruct를 사용하여 애플리케이션의 전역 시간대를 서울(Asia/Seoul)로 설정합니다. 이는 데이터베이스에 시간을 기록할 때 KST로 저장되도록 보장합니다.
@EnableScheduling
@EnableJpaAuditing
@SpringBootApplication
public class MyshopApplication {
public static void main(String[] args) {
SpringApplication.run(MyshopApplication.class, args);
}
@PostConstruct
public void setTime() {
TimeZone.setDefault(TimeZone.getTimeZone("Asia/Seoul"));
}
}
BaseTimeEntity 구현
BaseTimeEntity 클래스를 구현하여 모든 엔티티의 상위 클래스로 사용합니다. 이 클래스에는 @CreatedDate와 @LastModifiedDate 어노테이션이 적용된 필드가 포함되어, 엔티티가 생성되거나 수정될 때 해당 시간을 자동으로 기록합니다.
package com.myshop.domain;
import lombok.Getter;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.EntityListeners;
import javax.persistence.MappedSuperclass;
import java.time.LocalDateTime;
@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseTimeEntity {
@CreatedDate
private LocalDateTime createdDate;
@LastModifiedDate
private LocalDateTime modifiedDate;
}
User 엔티티 수정
User 엔티티 클래스가 BaseTimeEntity를 상속받도록 수정하여, createdAt과 modifiedAt 필드를 제거합니다. BaseTimeEntity를 상속받음으로써 User 엔티티에도 자동으로 생성 시간과 수정 시간이 관리됩니다.
public class User extends BaseTimeEntity{
결론
이렇게 BaseTimeEntity를 추가하고 적용함으로써, 애플리케이션에서 사용되는 엔티티들의 생성 및 수정 시간을 효과적으로 관리할 수 있게 됩니다. JPA Auditing을 활용한 이러한 접근 방식은 데이터의 신뢰성을 높이고, 엔티티 관리를 자동화하여 개발자의 부담을 줄여줍니다.