728x90
h2 DB에 @CreatedDate와 @LastModifiedDate 필드가 값이 들어가지 않고
null로 표시 되는 것을 볼 수 있었습니다.
그래서 찾아보니, Spring Data JPA Auditing을 설정해 줘야 했습니다.
처음에는 아래의 2번 방법만 넣어서 했더니 똑같이 null 값이 적용된 것을
확인할 수 있었고, 그래서 검색한 결과 1번 방법도 같이 적용해줘야
값이 들어가는 것을 확인할 수 있었습니다.
Spring Data JPA Auditing
데이터의 생성 및 수정 이력을 자동으로 관리할 수 있도록 도와주는 기능입니다. DB Entity에 생성일, 수정일 같은 정보를 매번 수동으로 추가하지 않아도, Spring Data JPA에서 제공하는 Auditing 기능을 통해 자동으로 값이 설정됩니다.
필요한 이유
개발 중 데이터의 생성 시점과 수정 시점을 기록하는 것은 매우 일반적인 요구사항입니다. 이를 통해 데이터를 추적하거나, 데이터 변경 이력을 확인할 수 있습니다.
- 사용자 정보 관리 시스템에서 사용자가 언제 가입했는지(createdAt), 마지막으로 정보를 변경한 시점(updatedAt)이 필요합니다.
- 로그 기록이나 이벤트 트래킹에서도 데이터의 타임스탬프를 기록하는 것은 기본적인 요구사항 입니다.
Spring Data JPA Auditing의 작동 원리
Spring Data JPA Auditing은 Spring의 Aspect-Oriented Programming(AOP) 개념을 활용하여 엔티티가 데이터베이스에 저장되거나 업데이트될 때 특정 이벤트를 감지하고, 지정된 필드(@CreatedDate, @LastModifiedDate)에 값을 자동으로 채워줍니다.
- @CreatedDate
- 엔티티가 처음 저장될 때 자동으로 생성 시점이 설정됩니다.
- @LastModifiedDate
- 엔티티가 수정될 때 마지막 수정 시점이 자동으로 업데이트 됩니다.
Spring Data JPA Auditing 설정 방법
1. Auditing 활성화
- @EnableJpaAuditing 어노테이션을 추가해 Auditing 기능을 활성화합니다.
package org.example.dmaker;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
@SpringBootApplication
@EnableJpaAuditing
public class DmakerApplication {
public static void main(String[] args) {
SpringApplication.run(DmakerApplication.class, args);
}
}
2. 엔티티에 어노테이션 추가
- 엔티티 클래스에서 Auditing 관련 필드에 @CreatedDate, @LastModifiedDate 어노테이션을 추가합니다.
- 또한, @EntityListeners (AuditingEntityListener.class)로 Auditing 기능이 동작하도록 설정해야 합니다.
package org.example.dmaker.entity;
import jakarta.persistence.*;
import lombok.*;
import org.example.dmaker.type.DeveloperLevel;
import org.example.dmaker.type.DeveloperSkillType;
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
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Entity
@EntityListeners(AuditingEntityListener.class)
public class Developer {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
protected Long id;
@Enumerated(EnumType.STRING)
private DeveloperLevel developerLevel;
@Enumerated(EnumType.STRING)
private DeveloperSkillType developerSkillType;
private Integer experienceYears;
private String memberId;
private String name;
private Integer age;
@CreatedDate
private LocalDateTime createdAt;
@LastModifiedDate
private LocalDateTime updatedAt;
}
3. 데이터베이스 스키마 확인
'개발 > Spring & Spring Boot' 카테고리의 다른 글
[Spring] Spring Boot 애너테이션 완벽 이해 : @PostMapping, @GetMapping, 그리고 RESTful 설계 (0) | 2024.12.25 |
---|