Java/Spring

[Spring] JPA Auditing 기술을 사용하여 생성일자, 수정일자 컬럼의 데이터 형식을 깔끔하게 지정하는법

SeungbeomKim 2023. 11. 24. 11:19

spring-data-jpa-image

JPA Auditing 기술은 엔티티를 생성 및 변경할 때, 생성시간, 수정시간 등을 자동으로 삽입해 주는 기능입니다.

 

Audit은 감사하다, 추적하다의 의미를 지니는데, Auditing 기술을 이용하면 마지막에 데이터를 생성 및 수정한 사람과 시간을 추적할 수 있게 됩니다.

 

우선, Auditing 기술을 사용하게 위해, SpringApplication.class에 다음과 같은 어노테이션을 지정해줘야 합니다.

@EnableJpaAuditing
public class ExerciseApplication {

    public static void main(String[] args) {
        SpringApplication.run(ExerciseApplication.class, args);
    }
}

 

다음으로 생성시간, 수정시간 필드가 담겨있는 클래스를 생성해 줍니다.

 

BaseEntity 

@EntityListeners(AuditingEntityListener.class)
@MappedSuperclass
@Getter
public abstract class BaseEntity {

    @CreatedDate
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd hh:mm:ss", timezone = "Asia/Seoul")
    @Column(nullable = false, updatable = false)
    private LocalDateTime createdAt;

    @LastModifiedDate
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd hh:mm:ss", timezone = "Asia/Seoul")
    @Column(nullable = false)
    private LocalDateTime modifiedAt;
}

 

처음에는 이렇게 클래스를 만들어줬지만, JPA  Auditing에서는 @JsonFormat, @DataTimeForamat 어노테이션이 적용이 되지 않는다고 합니다.

 

그래서 이렇게 설정하고, 데이터를 삽입한 테이블을 조회한 경우 형식이 millisecond까지 나오게 됩니다.

maria-db-image1

 

millisecond까지 해당 컬럼에 표시하는 것은 불필요하기에 BaseEntity를 다음과 같이 수정하였습니다.

@EntityListeners(AuditingEntityListener.class)
@MappedSuperclass
@Getter
public abstract class BaseEntity {

    private String createdAt;
    private String modifiedAt;

    @PrePersist
    void onPrePersist() {
        this.createdAt = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
        this.modifiedAt = createdAt;
    }

    @PreUpdate
    void onPreUpdate() {
        this.modifiedAt = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
    }
}

 

이렇게 엔티티 생성 및 수정이 되기 전, 다음과 같이 formatting을 해줘야 다음과 같이 형식이 올바르게 적용됩니다.

이제 다시 테이블을 조회해 보겠습니다.

 

maria-db-image2

 

다음과 같이 형식이 깔끔하게 지정되었음을 확인할 수 있습니다. 이상으로 JPA Auditing 기술과 데이터의 생성시간, 수정시간 형식을 올바르게 지정하는 방법에 대해서 알아보았습니다.

 

<참고 자료>

https://lsj8367.tistory.com/entry/JPA-JPA-Auditing

 

[JPA] JPA Auditing

JPA Auditing이란? 보통 엔티티에는 해당 데이터의 생성시간과 수정시간을 포함한다. 언제 만들어졌고, 언제 수정되었는지 등등 나중에 유지보수에 중요한 정보이기도 하다. 그래서 매번 DB를 insert,

lsj8367.tistory.com