본문 바로가기
JPA/Core

JPA Auditing 기능

by BAYABA 2021. 10. 10.
  1. 개인 공부 목적으로 작성한 글입니다.
  2. 아래 출처를 참고하여 작성하였습니다.

목차

  1. Intro
  2. JPA Auditing 이란?
  3. @EntityListeners(AuditingEntityListener.class)
    3-1. @EntityListeners
    3-2. AuditingEntityListener class
  4. @EnableJpaAuditing
  5. @CreatedDate
  6. @LastModifiedDate

1. Intro

  1. JPA에서 제공하는 Auditing 기능에 대해서 알아보겠습니다.

2. JPA Auditing 이란?

  1. Audit은 감시하다, 감사하다라는 뜻으로 Spring Data JPA에서 시간에 대해서 자동으로 값을 넣어주는 기능입니다.
  • 즉, 해당 데이터를 보고 있다가 생성 또는 수정이 발생하면 자동으로 값을 넣어주는 편리한 기능입니다.
  1. 도메인 객체를 영속성 컨텍스트에 저장하거나 조회를 수행한 후에 update를 하는 경우 매번 시간 데이터를 입력해줘야 하는데, Auditing을 이용하면 자동으로 시간을 매핑하여 데이터베이스의 테이블에 넣어주게 됩니다.

3. @EntityListeners(AuditingEntityListener.class)

  1. 해당 도메인 Entity에서 Auditing 기능을 사용한다는 의미입니다.
  2. 도메인 Entity에는 리스너 기능만 포함하면 됩니다.
  • 즉, Entity는 리스너 기능만 사용한다는 의미입니다.
@EntityListeners(AuditingEntityListener.class)
public class MyEntity {
  //...
}

3-1. @EntityListeners

  1. Entity를 DB에 적용하기 이전, 이후에 커스텀 콜백을 요청할 수 있는 어노테이션입니다.

3-2. AuditingEntityListener class

  1. Entity 영속성 및 업데이트에 대한 Auditing 정보를 캡처하는 JPA Entity Listener class 입니다.

4. @EnableJpaAuditing

  1. 클라이언트쪽(사용하는 쪽)에서 @EnableJpaAuditing 설정을 통해 Auditing을 활성화합니다.
  • 그러면 엔티티중에 AuditingEntityListener를 적용한 Entity들의 변경점을 캡쳐할 수 있습니다.
@EnableJpaAuditing 
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

5. @CreatedDate

  1. 데이터 생성 날짜 자동 저장 어노테이션입니다.
  • @CreatedDate (org.springframework.data)
@EntityListeners(AuditingEntityListener.class)
public class MyEntity {

  //...

  @CreatedDate
  private LocalDateTime createdAt;

  @LastModifiedDate
  private LocalDateTime updatedAt;
}

6. @LastModifiedDate

  1. 데이터 수정 날짜 자동 저장 어노테이션입니다.
  • @LastModifiedDate (org.springframework.data)
  • @LastModifiedDate 어노테이션만 설정해도 updated_at 컬럼이 not null일 때 객체 생성시점에 create 시간을 update_at 컬럼에 넣어줍니다.
  • 즉, Table상에 updated_at 컬럼 속성이 꼭 null일 필요가 없다는 뜻입니다.
@EntityListeners(AuditingEntityListener.class)
public class MyEntity {

  //...

  @CreatedDate
  private LocalDateTime createdAt;

  @LastModifiedDate
  private LocalDateTime updatedAt;
}

출처

  1. [JPA ] Auditing 기능 살펴보기
  2. JPA Auditing 기능이란?

'JPA > Core' 카테고리의 다른 글

EntityManager  (0) 2021.10.13
JPA 프록시 (for 지연 로딩)  (0) 2021.10.10