ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring JPA] entity의 생성일, 수정일 어떤식으로 할까
    Spring JPA 2024. 9. 11. 10:49

     

     

    ERD 설계 하고 entity 매핑을 하려고 한다 

    테이블에는 생성일, 수정일 칼럼이 있다 

    나는 이번 Solitour 프로젝트를 하면서 이 칼럼들을 자동으로 관리 할 수 있는 방법이 없을까? 라는 궁금증이 들었다

     

     이런 궁금증이 들었던 이유는 다음과 같다

    일반적으로

    생성일은 create API 요청에 만들어지는데 해당 entity 객체를 생성할때 마다 LocalDateTime.now()로 생성자에서 설정한다 

    수정일은 보통 update API 요청 시 수정일을 setter를 통해 LocalDateTime.now()로 갱신 한다 

     

    이러한 반복적인 코드들을 줄일 수 있는 방법이 없을까? 라는 고민을 하였고 
    JPA에서 이를 어떻게 처리하는지 공부하게 되었다

     

    방법은 아래와 같다

     

    방법

     

    설정 1

     

    @EntityListeners(AuditingEntityListener.class)

    • 해당 entity class에 사용하는 어노테이션이다
    • JPA에서 엔티티의 변경 사항을 자동으로 감지하고 감사(Auditing) 정보를 기록하기 위한 어노테이션이다
    • 엔티티가 변경 되었을 때 그 이벤트를 감지하여 필요한 정보를 자동으로 저장하는 역할을 한다 
    @Entity
    @EntityListeners(AuditingEntityListener.class)
    public class Entity {
    	// 필드 칼럼들
    }

     

    설정 2

     

    @EnableJpaAuditing

    • Spring Data JPA 에서 Auditing(감시, 감사) 기능을 활성화하기 위한 어노테이션이다
    @SpringBootApplication
    @EnableJpaAuditing
    public class MyApplication {
        public static void main(String[] args) {
            SpringApplication.run(MyApplication.class, args);
        }
    }

     

     

    entity 필드 적용

     

    @CreatedDate

     

    JPA Auditing에서 엔티티가 처음 생성될 때 즉 저장되는 시점에 자동으로 생성일을 기록해주는 어노테이션

     

     

    @LastModifiedDate

     

    JPA Auditing에서 엔티티가 수정 될 때마다 자동으로 수정 시간을 기록해주는 어노테이션

    엔티티가 데이터베이스에 업데이트 될 때 이 필드에 현재 시간이 자동으로 할당 

    @Entity
    @EntityListeners(AuditingEntityListener.class)
    public class Entity {
    
        @CreatedDate
        private LocalDateTime createdDate;
    
        @LastModifiedDate
        private LocalDateTime lastModifiedDate;
    
        // 기타 필드와 메소드
    }

     

     

    결국 이러한 @CreatedDate, @LastModifiedDate 어노테이션을 사용하려면 위의 설정 어노테이션과 함께 사용해야한다 

    JPA의 Auditing 기능을 활용하면 엔티티의 생성일과 수정일을 자동으로 관리할 수 있다

     

     

     

    결론

    이를 통해서 코드의 중복성을 줄일 수 있었고 간결하고 유지보수 하기 쉬운 코드를 작성할 수 있었다

    Solitour 프로젝트에 이 기능을 적용하고 데이터를 매번 수동으로 시간을 설정 할 필요 없이 편리하게 생성 및 수정일을 기록할 수 있게 되었다

Designed by Tistory.