Spring Data JPA의 Auditing 기능은 엔터티의 변경시점에 언제, 누가 엔터티를 생성, 변경했는지에 대한 정보를 자동으로 등록할 수 있게 도와줍니다.
JPA Auditing의 주요 기능
@CreatedBy, @LastModifiedBy: 엔터티가 생성 또는 수정될 때의 수정자 정보를 기록
@CreatedDate, @LastModifiedDate: 엔터티가 생성 또는 수정된 시간을 기록
@EnableJpaAuditing: Spring Data JPA의 Auditing 기능을 활성화
JPA Auditing 적용 방법
Auditing을 활성화
메인 애플리케이션 클래스 또는 설정 클래스에 @EnableJpaAuditing 애노테이션을 추가합니다.
@SpringBootApplication
@EnableJpaAuditing
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Base 엔터티 클래스 생성
모든 엔터티에서 공통적으로 사용될 Auditing 관련 필드를 가진 부모 클래스를 생성합니다.
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedBy;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.EntityListeners;
import javax.persistence.MappedSuperclass;
import java.time.LocalDateTime;
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseEntity {
@CreatedDate
private LocalDateTime createdDate;
@LastModifiedDate
private LocalDateTime lastModifiedDate;
@CreatedBy
private String createdBy;
@LastModifiedBy
private String lastModifiedBy;
// getters and setters
}
엔터티에 Auditing 적용
Auditing 기능을 적용하려는 엔터티는 위에서 생성한 BaseEntity를 상속받아 사용합니다.
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class Post extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String title;
private String content;
// ... other fields, getters, setters, etc.
}
AuditorAware 구현 (선택사항)
@CreatedBy 및 @LastModifiedBy로 엔터티의 수정자 정보를 기록하려면,
현재 접속한 사용자 정보를 제공할 수 있는 AuditorAware 인터페이스를 구현해야 합니다.
@Component
public class AuditorAwareImpl implements AuditorAware<String> {
@Override
public Optional<String> getCurrentAuditor() {
// 현재 사용자의 정보를 반환한다.
// 예: Spring Security의 경우 SecurityContextHolder를 사용할 수 있다.
return Optional.of("username"); // 예시로 "username"을 사용했습니다.
}
}
AuditorAware 빈 등록
위에서 정의한 AuditorAwareImpl을 빈으로 등록해야 합니다.
@Component 애노테이션을 사용하면 자동 등록됩니다.
'BACKEND > SPRING' 카테고리의 다른 글
스프링부트 유효성 검사와 예외처리 - 유효성 검사 (0) | 2023.08.27 |
---|---|
연관관계 매핑 - 연관관계 매핑 종류와 방향 (0) | 2023.08.20 |
Spring Data JPA 활용 - @Query 어노테이션과 QueryDSL (0) | 2023.08.13 |
Spring Data JPA 활용 - 정렬과 페이징 처리 (0) | 2023.08.13 |
Spring Data JPA 활용 - JPQL과 쿼리 메서드 (0) | 2023.08.13 |