Spring JPA

[Spring JPA] entity의 생성일, 수정일 어떤식으로 할까

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