프로젝트를 진행하다 보면 엔티티에 생성 시간 또는 마지막 수정 시간에 대한 필드를 넣는 경우가 한번쯤 있을 것이다.
이때 가장 단순한 방법으로는 setter 를 사용해서 직접 시간을 설정해 줄수도 있겠지만, 매번 직접 시간을 설정하자니 영 번거롭다.
JPA에서는 이러한 상황을 위해, 시간을 자동으로 기록해주는 기능을 제공한다.
한번 살펴보자.
01.JPA Auditing 이란?
Auditing은 '감시', '감사'
(thank 말고 다른 감사..)
의 의미를 가지고 있다.Auditing
은 말 그대로 Entity의 생성, 변경 등을 감시하는 기능이다.
JPA에서는 Auditing을 통하여 Entity가 생성되거나 변경되는 시간을 추적하고 기록한다.
그럼 해당 기능을 어떻게 사용하는지 알아보자
02.JPA Auditing 사용하기
✨ Spring Boot Application Class
<Project name>Application.java
package com.hayden.limg_diary;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
@SpringBootApplication
@EnableJpaAuditing
public class LimgDiaryApplication {
public static void main(String[] args) {
SpringApplication.run(LimgDiaryApplication.class, args);
}
}
스프링 부트의 매인 메소드가 정의된 Application 클래스에 @EnableJpaAuditing
아노테이션을 추가하자
해당 아노테이션을 설정하면, 스프링부트에서 Auditing
을 사용할 수 있다.
✨ Entity 클래스
package com.hayden.limg_diary.entity;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
import java.util.Date;
@Entity
@Getter
@Setter
@EntityListeners(AuditingEntityListener.class)
public class Diary {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int diary_id;
private String content;
@CreatedDate
private Date date;
private String feeling;
private String image_path;
@ManyToOne
@JoinColumn
private User user_id;
}
@EntityListeners(AuditingEntityListener.class)
@EntityListeners()
아노테이션을 붙이면, 해당 아노테이션이 붙은 엔티티가 생성, 변경될 때 호출될 이벤트를 등록할 수 있다.
해당 아노테이션을 이용하여AuditingEntityListener
클래스를 등록해준다.@CreatedDate
JPA Auditing은@CreatedDate
아노테이션이 붙은 필드에 엔티티 생성 시간을 기록한다.
이와 비슷한 아노테이션으로@LastModifiedDate
이 있다.@LastModifiedDate
: 엔티티가 마지막으로 수정된 시간을 기록
실행 결과
위 이미지처럼 DB에 자동으로 엔티티 생성 시간이 기록됨을 볼 수 있다.
03.주의 사항
Auditing 설정을 안하고, @CreatedDate
나 @LastModifiedDate
아노테이션만 사용하는 경우가 흔히 있다. 필자도 이런 경험이 있다.
- 만약 Auditing 설정을 제대로 해주지 않고 위의 아노테이션만 붙인다면, ***해당 필드에는 null값이 삽입될 수도 있다.
- 이를 방지하기 위해 Application 클래스에
@EnableJpaAuditing
설정 및 엔티티 클래스에@EntityListeners(AuditingEntityListener.class)
설정을 꼭!!! 해주어야 한다.
'Back End > Spring && Spring Boot' 카테고리의 다른 글
JWT 개념과 구조, 작동 방식 (0) | 2024.06.22 |
---|---|
[Spring Security] 현재 로그인된 유저 정보 얻기 - @AuthenticationPrincipal (0) | 2024.06.18 |
[Spring Boot/Jpa] DB에 반영되지 않는 Entity 필드 정의하기 (0) | 2024.06.15 |
[Spring Boot] properties 파일에 작성한 변수 Java에서 사용하기 (0) | 2024.06.14 |
[Spring Security] 인가 설정을 해줘도, 403 에러 발생하는 원인 (0) | 2024.06.12 |