ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring] Domain time mapping
    Framework/Spring 2022. 4. 25. 23:16

    도메인 작업을 할 때 어떤 데이터든지 시간 데이터는 필수 값이다.

     

    스프링에서 도메인 엔티티를 생성할 때 db 컨벤션에 따라 createdAt, updatedAt을 자주 사용하곤 하는데 이 때 다음과 같은 어노테이션을 자주 사용하곤 한다.

     

    @CreationTimestamp, @UpdateTimestamp

     

    우선, @CreationTimestamp는 insert와 같은 DML(Data Manipulation Language)이 이루어질 때 자동적으로 현재시간을 입력해주는 어노테이션이다.

    그리고 @UpdateTimestamp는 DML중 update 쿼리가 발생할 때, 자동적으로 현재시간을 입력해주는 어노테이션이다.

     

    예시코드는 다음과 같다.

    @CreationTimestamp
    @Column(name = "created_at")
    private LocalDateTime createdAt;
    
    @UpdateTimestamp
    @Column(name = "updated_at")
    private LocalDateTime updatedAt;

    그런데 해당 어노테이션은 import문을 보면 hibernate에서 오는 것을 알 수 있다.

    hibernate가 안좋다거나 하는 것은 아니지만, 스프링 프레임워크에서도  이와 동일한 것을 제공한다. 그것은 @CreatedDate 어노테이션이다.(수정시에는 @LastModifiedDate로 제공해준다.)

     

    하이버네이트를 자주 사용하기에, 문제는 없고 굳이 차이가 있다면 스프링에서 제공하는 @CreatedDate는 @EnableJpaAuditing을 해주어야한다. 하이버네이트의 경우에는 안해줘도 된다는 점이다. @EnableJpaAuditing은 간단히 말해서 특정 데이터를 보고 있다가 생성 또는 수정이 발생하면 자동으로 값을 넣어주는 기능이다.

    아무래도 프레임워크가 제공해주는 스프링만에 기능을 사용하는 경우에는 @CreatedDate, @LastModifiedDate를 사용하는 편이 좋을 것 같다.

Designed by Tistory.