[Spring Boot] aLog Project - JPA Auditing 사용하기

김광현·2023년 9월 4일
0

Project - aLog

목록 보기
4/12
post-thumbnail

[Spring Boot] aLog Project - 등록/수정/조회 API 구현 에 이어서 JPA Auditing으로 생성시간/수정시간 자동화를 구현합니다. 🏆


보통 Entity에는 해당 데이터의 생성시간과 수정시간을 포함합니다.
언제 만들어졌는지, 언제 수정되었는지 등은 차후 유지보수에 있어 굉장히 중요한 정보이기 때문입니다. 따라서 JPA Auditing을 사용합니다.

BaseTimeEntity.java

domain 패키지에 BaseTimeEntity 클래스를 만듭니다.

package com.aLog.domain;

import lombok.Getter;
import org.springframework.data.annotation.CreatedDate;
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;

@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseTimeEntity {
    
    @CreatedDate
    private LocalDateTime createdDate;
    
    @LastModifiedDate
    private LocalDateTime modifiedDate;
}

📁 코드 설명

1. @MappedSuperclass
	- JPA Entity 클래스들이 BaseTimeEntity를 상속할 경우 필드들도 칼럼으로 인식하도록 합니다.
    
2. @EntityListeners(AuditingEntityListener.class)
	- BaseTimeEntity 클래스에 Auditing 기능을 포함시킵니다.
    
3. @CreatedDate
	- Entity가 생성되어 저장될 대 시간이 자동 저장됩니다.
    
4. @LastModifiedDate
	- 조회한 Entity의 값을 변경할 대 시간이 자동 저장됩니다.


Posts.java

Posts 클래스가 BaseTimeEntity를 상속받도록 변경합니다.

...
public class Posts extends BaseTimeEntity {
...


ALogApplication.java

JPA Auditing 어노테이션을 모두 활성화할 수 있도록 ALogApplication 클래스에 활성화 어노테이션 하나를 추가합니다.

package com.aLog;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;

@EnableJpaAuditing // JPA Auditing 활성화
@SpringBootApplication
public class ALogApplication {
	public static void main(String[] args) {
		SpringApplication.run(ALogApplication.class, args);
	}

}


PostsRepositoryTest.java

PostsRepositoryTest 클래스에 테스트 메소드를 추가합니다.

...
    @Test
    public void BaseTimeEntity_등록() {
        LocalDateTime now = LocalDateTime.of(2023,9,5,0,0,0);
        postsRepository.save(Posts.builder()
                .title("title")
                .content("content")
                .author("author")
                .build());
        List<Posts> postsList = postsRepository.findAll();

        Posts posts = postsList.get(0);

        System.out.println(">>>>>>>>>> createDate = "+posts.getCreatedDate()+", modifiedDate = "+posts.getModifiedDate());

        assertThat(posts.getCreatedDate()).isAfter(now);
        assertThat(posts.getModifiedDate()).isAfter(now);
    }
}

📁 코드 설명

1. LocalDateTime now = LocalDateTime.of(2023,9,5,0,0,0);
	- 현재 날짜와 시간을 나타내는 LocalDateTime 객체를 생성합니다. 여기서는 2023년 9월 5일 00:00:00으로 설정되었습니다.
    
2. assertThat(posts.getCreatedDate()).isAfter(now)
	- posts의 생성일자가 now보다 이후인지 검사합니다.
    
3. assertThat(posts.getModifiedDate()).isAfter(now)
	- posts의 수정일자가 now보다 이후인지 검사합니다.

✔ JPA Auditing을 이용하여 등록/수정 시간을 자동화하는 방법을 알아봤습니다.

profile
🅸nterest 🆂olving 🆃horough 🅹udgment

0개의 댓글