-
[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 프로젝트에 이 기능을 적용하고 데이터를 매번 수동으로 시간을 설정 할 필요 없이 편리하게 생성 및 수정일을 기록할 수 있게 되었다
'Spring JPA' 카테고리의 다른 글
[Spring JPA] JPA N+1 문제 (1) 2024.10.13 [Spring] 즉시(Eager) 로딩 과 지연(Lazy) 로딩 (0) 2024.08.11 [Spring] DB 상태 테이블, Enum 관리 Converter 사용해보자 (0) 2024.07.04 [Spring] OSIV 란? (0) 2024.05.24