Book/Spring boot 와 AWS로 혼자 구현하는 웹서비스

[Book] 13) JPA Auditing으로 생성시간/수정시간 자동화 하기!

kkkkkkkkkkkk 2022. 4. 1. 11:38

👻  시간 엔티티 만들기!

매번 DB 에 생성시간과 수정시간을 삽입 하고 갱신 하는 것은 번거로운 일 입니다.

자동으로 생성시간과 수정시간을 관리해주는 JPA Auditing 을 사용합니다.

자 그러면 domain 패키지에 BaseTimeEntity 를 생성해봅시다.

@Getter
@MappedSuperclass // 해당 엔티티를 상속한 엔티티의 속성 값도 엔티티에 적용
@EntityListeners(AuditingEntityListener.class)// Auditing 기능을 적용
public class BaseTimeEntity {

    @CreatedDate // 엔티티가 생성되어 저장될 때 시간이 자동 저장
    private LocalDateTime createdTime;

    @LastModifiedDate // 조회한 엔티티의 값을 변경할 때 시간이 자동 저장
    private LocalDateTime modifiedTime;
}

👻  BaseTimeEntity 클래스를 Posts 클래스에 상속관계를 맺어보자!

@Getter // getter() 를 생성해 줍니다.
@NoArgsConstructor // 기본 생성자를 생성해 줍니다.
@Entity // 관계형 테이블과 링크될 클래스임을 정의합니다.
public class Posts extends BaseTimeEntity { // -> 상속 관계
}

👻  main 클래스에 @EnableJapAuditing 을 붙여 Auditing 기능을 활성화 해보자!.

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

👻  테스트 코드를 작성해보자!

@Test
@DisplayName("Base_Entity_TEST")
void Base_Entity_TEST() {
    // given
    LocalDateTime now = LocalDateTime
            .of(2022, 4, 1, 0, 0, 0);

    postsRepository.save(Posts.builder()
                .title("테스트")
                .content("테스트 중 입니다.")
                .author("홍길동")
                .build()
    );

    // when
    List<Posts>all = postsRepository.findAll();

    // then
    assertThat(all.get(0).getCreatedTime()).isAfter(now);
    assertThat(all.get(0).getModifiedTime()).isAfter(now);
}

.isAfter() 메서드로 생성된 now 값과 비교하여 검증을 하였습니다.