KAKAO.GG
백엔드

JPA Auditing로 엔티티 공통 필드 자동화

GG
2025. 7. 17.
조회 62
#스프링 부트 JPA Auditing 설정#JPA AuditorAware CreatedBy#@EnableJpaAuditing EntityListeners 차이

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를 붙여주는 방식이 올바른 사용법입니다.