JPA Auditing은 Spring Data JPA에서 제공하는 기능으로, 엔티티가 생성되고 수정될 때 생성일, 수정일, 생성자, 수정자와 같은 공통 필드를 자동으로 관리해줍니다.
주요 기능 및 이점
-
코드 간소화:
@PrePersist
,@PreUpdate
어노테이션과 로직을 직접 작성할 필요가 없습니다. -
일관성 및 신뢰성: 프레임워크 레벨에서 작동하므로 모든 엔티티에 일관된 방식으로 적용되며, 누락될 위험이 없습니다.
설정 방법 (Step-by-Step)
JPA Auditing을 적용하는 과정은 크게 전역 설정과 개별 엔티티 적용 두 단계로 나뉩니다.
1단계: Auditing 기능 전역 활성화
프로젝트 전체에서 Auditing 기능이 작동하도록 설정 클래스에 @EnableJpaAuditing
어노테이션을 추가합니다. 이 설정은 프로젝트당 한 번만 하면 됩니다.
// 예: JpaConfig.java
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
@Configuration
@EnableJpaAuditing // JPA Auditing 기능 활성화
public class JpaConfig {
// 추가 설정이 필요하지 않을 수 있음
}
⚠️ 위 설정이 없으면 Auditing 기능이 전혀 동작하지 않습니다.
2단계: Auditing을 적용할 엔티티 지정
Auditing을 적용하고 싶은 엔티티 클래스 상단에 @EntityListeners
어노테이션을 추가하여 AuditingEntityListener
를 지정합니다.
import jakarta.persistence.Entity;
import jakarta.persistence.EntityListeners;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
@Entity
@EntityListeners(AuditingEntityListener.class) // 해당 엔티티에 Auditing 기능 적용
public class Board {
// ... 엔티티 필드
}
Board
엔티티는 이제 Auditing 대상이 됩니다.
3단계: 자동 관리할 필드에 어노테이션 추가
엔티티 내에서 자동으로 관리할 필드에 아래 어노테이션들을 선언합니다. 필드 타입은 주로 LocalDateTime
을 사용합니다.
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import java.time.LocalDateTime;
// ... Board 클래스 내부
public class Board {
// ...
@CreatedDate // 엔티티 생성 시 시간 자동 저장
private LocalDateTime createdAt;
@LastModifiedDate // 엔티티 수정 시 시간 자동 저장
private LocalDateTime updatedAt;
}
최종 정리를 하자면,
-
@EnableJpaAuditing
(전역 설정, Config 클래스에 사용): "우리 프로젝트에서 이제부터 JPA Auditing 기능을 사용 시작하겠습니다!" 라고 선언하는 스위치 역할입니다. 엔티티별로 사용하는 것이 아니라, 프로젝트 전체에 딱 한 번만 설정합니다. -
@EntityListeners(AuditingEntityListener.class)
(개별 적용, Entity 클래스에 사용): 전역 스위치가 켜진 상태에서, "이 엔티티를 Auditing 대상으로 삼겠습니다!" 라고 개별적으로 지정하는 역할입니다.
따라서, JpaConfig
로 전체 기능을 활성화하고, Auditing이 필요한 각 엔티티에 @EntityListeners
를 붙여주는 방식이 올바른 사용법입니다.