JPA Auditing
JPA Auditing은 엔티티의 생성 시간, 수정 시간, 생성자, 수정자 등의 정보를 자동으로 기록하는 기능이다.
이 기능을 활용하면 별도의 코드 작성 없이 데이터 변경 이력을 추적할 수 있다.
JPA Auditing 주요 어노테이션
어노테이션 | 설명 |
`@CreatedDate` | 엔티티가 저장될 때 생성 시간 자동 저장 |
`@LastModifiedDate` | 엔티티가 수정될 때 마지막 수정 시간 자동 저장 |
`@CreatedBy` | 엔티티가 저장될 때 생성자 자동 저장 (Spring Security와 함께 사용) |
`@LastModifiedBy` | 엔티티가 수정될 때 마지막 수정자 자동 저장 (Spring Security와 함께 사용) |
JPA Auditing 적용 방법
1. `@EnableJpaAuditing` 활성화
@EnableJpaAuditing 어노테이션으로 JPA Auditing을 활성화한다.
package com.example.schedule;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
@EnableJpaAuditing
@SpringBootApplication // JPA Auditing을 활성화
public class SpringJpaScheduleApplication {
public static void main(String[] args) {
SpringApplication.run(SpringJpaScheduleApplication.class, args);
}
}
- SpringBootApplication 클래스에 어노테이션을 적용한다.
2. 공통 엔티티(BaseEntity) 생성
모든 엔티티에서 생성일자, 수정일자를 관리할 수 있도록 BaseEntity를 만든다.
package com.example.schedule.entity;
import jakarta.persistence.Column;
import jakarta.persistence.EntityListeners;
import jakarta.persistence.MappedSuperclass;
import lombok.Getter;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import java.time.LocalDateTime;
@Getter
@MappedSuperclass // 다른 엔티티에서 상속받아 사용할 수 있도록 설정
@EntityListeners(AuditingEntityListener.class)
public class BaseEntity {
@CreatedDate
@Column(updatable = false)
private LocalDateTime createdAt; // 생성 시간 자동 저장 (수정 불가)
@LastModifiedDate
private LocalDateTime updatedAt; // 마지막 수정 시간 자동 저장
}
3. 엔티티에 BaseEntity 상속 적용
모든 엔티티가 BaseEntity를 상속받으면 자동으로 생성일, 수정일이 관리된다.
예시: Member 엔티티
package com.example.schedule.entity;
import jakarta.persistence.*;
@Entity
@Table(name = "member")
public class Member extends BaseEntity { // BaseEntity 상속
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
private String password;
}
JPA Auditing 적용 결과
before
- 테이블을 생성할 때 created_at과 updated_at 필드를 직접 정의
- 기본값을 CURRENT_TIMESTAMP로 설정하여 자동으로 현재 시간 저장
- updated_at 필드는 ON UPDATE CURRENT_TIMESTAMP를 사용하여 레코드가 변경될 때마다 자동으로 업데이트되도록 설정
after
- 엔티티 클래스에서 created_at과 updated_at 필드를 개별적으로 정의할 필요가 없어짐
- @Entity와 BaseEntity 클래스를 상속받아 자동으로 생성 및 수정 시간을 관리
➡️ 자동으로 날짜 관리
createdAt, updatedAt을 매번 수동으로 설정하지 않아도 자동으로 값이 저장됨
➡️ 중복 코드 제거
모든 엔티티에서 생성일, 수정일 필드를 중복해서 정의할 필요 없음
'TIL (Today I Learned)' 카테고리의 다른 글
[Spring] JPA에서 꼭 알아야 할 개념: 영속성 (0) | 2025.02.10 |
---|---|
[Spring] Spring Data JPA에서 @Repository를 사용하지 않는 이유 (2) | 2025.02.09 |
[TIL] SQL - WITH RECURSIVE 개념과 사용법 (0) | 2025.02.06 |
[TIL] SQL 윈도우 함수 (Window Function) (0) | 2025.01.14 |
[Java] 상속(Inheritance)과 다형성(Polymorphism) 이해 (0) | 2025.01.10 |