JPA - Auditing 동작 원리

Codren·2021년 9월 27일
0

JPA Auditing 기능 적용

  • Spring Boot 쇼핑몰 프로젝트 진행 중 JPA Auditing 기능을 적용시킬 때 사용되는 @EntityListeners(value = {AuditingEntityListener.class}) 코드 등에 대한 궁금증




Auditing

엔티티에 공통으로 들어가는 멤버변수들 (등록시간, 수정시간, 등록자, 수정자 등등)을 추상클래스로 만들고, 해당 추상 클래스를 상속받아 엔티티에 공통적인 기능을 수행하도록 하며 엔티티의 생성과 수정을 감시하는 기법




@EntityListeners

JPA Entity에 Persist, Remove, Update, Load 에 대한 event 발생 시 전과 후에 대한 커스텀 콜백 메서드를 수행하도록 지원



1. 커스텀 콜백 수행 시점

어노테이션설명
@PrePersistmanager persist 의해 처음 호출될 때 실행
@PostPersistmanager persist 에 의해 실행되고 수행, SQL INSERT 이후
@PostLoad로드 이후에 수행, SQL SELECT 이후
@PreUpdateSQL UPDATE 이전에 수행
@PostUpdateSQL UPDATE 이후에 수행
@PreRemoveSQL DELETE 이전에 수행
@PostRemoveSQL DELETE 이후에 수행



2. 사용법

  • Entity 클래스에 커스텀 콜백 클래스를 value 값으로 지정
@EntityListeners(value = {AuditingEntityListener.class})



3. AuditingEntityListener.class

  • Auditing 기능을 수행하는 클래스
  • 내부를 살펴보면 @PrePersist, @PreUpdate 어노테이션을 지정하여 엔티티의 등록 및 수정 시에 동작




AuditorAware 인터페이스

등록자 및 수정자를 처리하는 인터페이스



1. AuditorAware 인터페이스 구현

  • 현재 로그인한 사용자의 정보를 추출하여 등록자 및 수정자로 등록하는 구현 클래스




@EnableJpaAuditing

  • Application 에 Auditing 기능을 활성화하는 어노테이션
  • 위에서 만든 AuditorAware 인터페이스 구현체를 @Bean 등록




동작 원리

  • @EntityListeners 기능을 이용해서 Entity 등록 및 수정 시에 Auditing 기능을 수행하는 원리
  • @MappedSuperclass - 해당 클래스를 상속 받는 Entity 들이 공통되는 필드를 사용할 수 있도록 부모 클래스에 지정

        ① AuditorAware 인터페이스를 구현한 클래스 생성
        ② @Configuration, @EnableJpaAuditing 을 통해서 JPA Auditing 기능 활성화
        ③ ②와 동시에 AuditorAware 인터페이스 구현체 @Bean 등록
        ④ Auditing 활성화 상태에서는 AuditorAware 구현체 @Bean 을 자동으로 찾아서
             AuditingEntityListener 와 매핑
        ⑤ 이제 원하는 엔티티에 @EntityListeners, @MappedSuperclass 지정
        ⑥ 엔티티 등록 및 수정 시에 관련된 해당 필드 insert 및 update 됨

0개의 댓글