
# Auditing?
Audit는 사전적 의미로 감사하다, 심사하다 등의 의미를 지닌다.
Spring Data JPA는 Auditing이라는 기능을 제공한다.
# 사용이유
보통 Entity에는 해당 데이터의 "생성시간과 수정시간"을 포함한다.
차후 유지보수에 있어 굉장이 중요한 정보임.
DB에 (삽입,갱신)하기 전, "시간 데이터"를 넣어주어야 함.
이런 단순한 코드가 "테이블"과 "서비스 메소드"에 포함된다면
코드가 지저분해질 수 있기에 JPA가 제공하는 JPA Auditing을 사용할 수 있다.
# 사용방법
스프링 부트에서 gradle로 의존성을 관리한다면
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
}
만 추가해도 Auditing 기능을 사용할 수 있다.
🚩 참고 🚩
자바 1.8 이상부터는
기존 *문제들을 해결하였고 LocalDate, LocalDateTime를 사용한다.
DB에 매핑되지 않았던 이슈 Hibernate 5.2.10 버전부터 해결됨.
스프링 부트 2.X 이상은 하이버네이트 버전을 생각하지 않아도됨. (더 높은 버전임)
*기존 문제
기본의 있던 Date, Calander 클래스는 문제점이 있었다.
=> 불변객체아님(변경됨)=> 멀티스레드에서 문제가능

1) BaseTimeEntity.java 클래스 생성
package com.book.book_aws.domain;
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 abstract class BaseTimeEntity {
@CreatedDate
private LocalDateTime createdDate;
@LastModifiedDate
private LocalDateTime modifiedDate;
}
"BaseTimeEntity클래스"는 "모든 Entity의 상위 클래스"가 된다.
@MappedSuperclass
JPA Entity 클래스들이 BaseTimeEntity을 상속할 경우
(createdDate, modifiedDate)도 칼럼으로 인식하도록 합니다.
@EntityListeners(AuditingEntityListener.class)
BaseTimeEntity클래스에 Auditing 기능을 포함시킨다.
[ JPA Entity가 BaseTimeEntity를 상속하는 모습 ]

[ JPA Entity가 BaseTimeEntity를 상속하는 모습 ]

[TEST 결과 확인]

'Back-end > Spring' 카테고리의 다른 글
[lombok] lombok 어노테이션 정리 (0) | 2023.11.25 |
---|---|
[spring, JPA] junit test시 hibernate query 노출하는 법 (2) | 2023.11.22 |
[spring] JPA 소개 (0) | 2023.09.03 |

# Auditing?
Audit는 사전적 의미로 감사하다, 심사하다 등의 의미를 지닌다.
Spring Data JPA는 Auditing이라는 기능을 제공한다.
# 사용이유
보통 Entity에는 해당 데이터의 "생성시간과 수정시간"을 포함한다.
차후 유지보수에 있어 굉장이 중요한 정보임.
DB에 (삽입,갱신)하기 전, "시간 데이터"를 넣어주어야 함.
이런 단순한 코드가 "테이블"과 "서비스 메소드"에 포함된다면
코드가 지저분해질 수 있기에 JPA가 제공하는 JPA Auditing을 사용할 수 있다.
# 사용방법
스프링 부트에서 gradle로 의존성을 관리한다면
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
}
만 추가해도 Auditing 기능을 사용할 수 있다.
🚩 참고 🚩
자바 1.8 이상부터는
기존 *문제들을 해결하였고 LocalDate, LocalDateTime를 사용한다.
DB에 매핑되지 않았던 이슈 Hibernate 5.2.10 버전부터 해결됨.
스프링 부트 2.X 이상은 하이버네이트 버전을 생각하지 않아도됨. (더 높은 버전임)
*기존 문제
기본의 있던 Date, Calander 클래스는 문제점이 있었다.
=> 불변객체아님(변경됨)=> 멀티스레드에서 문제가능

1) BaseTimeEntity.java 클래스 생성
package com.book.book_aws.domain;
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 abstract class BaseTimeEntity {
@CreatedDate
private LocalDateTime createdDate;
@LastModifiedDate
private LocalDateTime modifiedDate;
}
"BaseTimeEntity클래스"는 "모든 Entity의 상위 클래스"가 된다.
@MappedSuperclass
JPA Entity 클래스들이 BaseTimeEntity을 상속할 경우
(createdDate, modifiedDate)도 칼럼으로 인식하도록 합니다.
@EntityListeners(AuditingEntityListener.class)
BaseTimeEntity클래스에 Auditing 기능을 포함시킨다.
[ JPA Entity가 BaseTimeEntity를 상속하는 모습 ]

[ JPA Entity가 BaseTimeEntity를 상속하는 모습 ]

[TEST 결과 확인]

'Back-end > Spring' 카테고리의 다른 글
[lombok] lombok 어노테이션 정리 (0) | 2023.11.25 |
---|---|
[spring, JPA] junit test시 hibernate query 노출하는 법 (2) | 2023.11.22 |
[spring] JPA 소개 (0) | 2023.09.03 |