[JPA]Jpa Auditing 기능 사용하기

이민재·2024년 3월 5일
0

이전에 프로젝트를 하면서 JPA 데이터베이스 테이블에 도메인을 매핑 할 때 생성일자나 수정일 등 중복되는 필드,컬럼들이 많았었다.

그 때는 모든 도메인에 해당 컬럼을 만들면서 진행하였다. 그러다보니 같은 코드를 계속 작성하며 시간을 낭비하고 다른 도메인을 담당한 팀원들과 컬럼명이 다르게 적고 나중에 깨닫는 사고도 경험했었다.

그러다 중복을 처리해주는 JPA Auditiong이라는 것을 알게 되었고 새 프로젝트에서는 이 기능을 사용하기 위해 정리하려고 한다.

JPA Auditing

JPA에서는 Audit이라는 기능을 제공한다 Audit은 Spring Data JPA에서 시간에 대해서 자동으로 값을 넣어주는 기능이다.
도메인을 영속성 컨텍스트에 저장하거나 조회를 수행한 후에 update를 하는 경우 매번 시간 데이터를 입력하여 주어야 하는데, Audit을 이용하면 자동으로 시간을 매핑하여 데이터베이스의 테이블에 넣어주게 된다.
JPA Audit은 데이터의 변경 기록을 추적하고 데이터 변화에 대한 이력을 기록하는 것을 목적으로 한다.


Auditing 활성화

@SpringBootApplication
@EnableJpaAuditing
public class CosmosApplication {

	public static void main(String[] args) {
		SpringApplication.run(CosmosApplication.class, args);
	}

}

SpringBootApplication에 @EnableJpaAuditing 어노테이션을 추가

BaseEntity 생성하기

@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseEntity {

    @CreatedDate
    @Column(updatable = false)
    private LocalDateTime createdAt;

    @LastModifiedDate
    private LocalDateTime modifiedDate;
}

@MappedSuperclass

  • Entity에서 Table에 대한 공통 매핑 정보가 필요할 때 부모 클래스에 정의하고 상속받아 해당 필드를 사용하여 중복을 제거

@EntityListeners

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

Class AuditingEntityListener (org.springframework.data.jpa)

  • Entity 영속성 및 업데이트에 대한 Auditing 정보를 캡처하는 JPA Entity Listener

@CreatedDate (org.springframework.data)

  • 데이터 생성 날짜 자동 저장 어노테이션

@LastModifiedDate (org.springframework.data)

  • 데이터 수정 날짜 자동 저장 어노테이션

@CreatedBy (org.springframework.data)

  • 데이터 생성자 자동 저장 어노테이션

@LastModifiedBy (org.springframework.data)

  • 데이터 수정자 자동 저장 어노테이션

Entity 적용

@Getter
@Entity
@NoArgsConstructor(access = PROTECTED)
public class Board extends BaseEntity {

    @Id
    private Long id;

}

선언한 변수는 id뿐이지만 2개의 컬럼이 추가된 것을 확인 할 수 있다.

profile
초보 개발자

0개의 댓글