[Spring JPA] entity의 생성일, 수정일 어떤식으로 할까
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 프로젝트에 이 기능을 적용하고 데이터를 매번 수동으로 시간을 설정 할 필요 없이 편리하게 생성 및 수정일을 기록할 수 있게 되었다