[Spring] JPA Auditing 적용하기: @CreatedDate, @LastModifiedDate 활용법

2025. 2. 7. 16:21·TIL (Today I Learned)

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
'TIL (Today I Learned)' 카테고리의 다른 글
  • [Spring] JPA에서 꼭 알아야 할 개념: 영속성
  • [Spring] Spring Data JPA에서 @Repository를 사용하지 않는 이유
  • [TIL] SQL - WITH RECURSIVE 개념과 사용법
  • [TIL] SQL 윈도우 함수 (Window Function)
기만나🐸
기만나🐸
공부한 내용을 기록합시다 🔥🔥🔥
  • 기만나🐸
    기만나의 공부 기록 🤓
    기만나🐸
  • 전체
    오늘
    어제
    • ALL (147)
      • TIL (Today I Learned) (56)
      • Dev Projects (15)
      • Algorithm Solving (67)
        • Java (52)
        • SQL (15)
      • Certifications (8)
        • 정보처리기사 실기 (8)
  • 인기 글

  • 태그

    java
    greedy
    프로그래머스
    dp
    BOJ
    jwt
    DFS
    완전탐색
    GROUP BY
    join
    Subquery
    sql
    백트래킹
    다이나믹프로그래밍
    HTML
    시뮬레이션
    jQuery
    Firebase
    CSS
    programmers
    그리디
    websocket
    javascript
    자료구조
    BFS
    bootstrap
    jpa
    mysql
    백준
    Google Fonts
  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
기만나🐸
[Spring] JPA Auditing 적용하기: @CreatedDate, @LastModifiedDate 활용법
상단으로

티스토리툴바