반응형

✔️ DB에 생성일, 수정일을 매번 넣는 행위는 어떤가?

실무에서 이를 경험해보신 분은 굉장히 불편하고, 은근 빼먹는 경우가 많다는 것을
아실텐데요. 저도 처음에는 별 생각없이 당연하게 수동으로 매번 작성을 했습니다.
근데 점점 와.. 이건 무슨 update, insert 할 때 마다 매번 똑같이 작성해야 하네?
라는 생각이 들었습니다. 솔직히 개인 공부용이라면 전혀 불편함을 못느끼실거에요.
저도 그랬으니까요. 하지만 생각보다 빼먹는 일도 많고 잘못된 값을 넣는 경우도 있습니다.
특히, 완전 신입 분들의 경우 이에 대한 중요성을 모르시기 때문에 처음에 개발할 때
많이 빼먹는 경우도 있구요.
그러던 와중 이동욱님의 스프링 부트와 AWS로 혼자 구현하는 웹서비스 라는 책을
공부하다가 Spring Data Jpa에서 이를 자동화 해주는 기능을 알게 되었습니다.
물론... Jpa를 써야 가능하지만.. 그래서 저는 실무에서는 사용하지 못하네요..

✔️ 실전!!!

🔍 라이브러리 추가

Spring Data Jpa에서 제공하는 기능이므로 의존성 추가!

implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

🔍 기능 활성화

해당 기능을 사용하기 위해서는 Auditing 이라는 기능을 활성화 시켜주어야 합니다.
메인 메서드에 설정해도 되지만 메인 메서드에는 최대한 코드를 작성하지 않는게 좋다고 해서
클래스를 따로 분리하여 빈으로 등록하게 됩니다.

import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;

@Configuration
@EnableJpaAuditing
public class JpaConfig {
}

🔍 Auditing 기능 포함 시키는 클래스 생성

엔티티에 적용될 컬럼을 지정하고, Auditing 기능을 적용하는 클래스를 별도로 만듭니다.
모든 엔티티는 이 엔티티를 상속 받게되며, 상속 받았으니 해당 컬럼들이 추가가 되게 됩니다.

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 // JPA Entity 클래스들이 BaseTimeEntity를 상속할 경우 필드들(createDate, modifiedDate)도 컬럼으로 인식하도록 함
@EntityListeners(AuditingEntityListener.class) // BaseTiemEntity클래스에 Auditing 기능 포함
public class BaseTimeEntity {

    @CreatedDate // Entity 저장 시 시간 자동 저장
    private LocalDateTime createDate;

    @LastModifiedDate // 조회한  Entity 값을 변경할 때 시간이 자동 저장
    private LocalDateTime modifiedDate;
}

🔍 Auditing 기능 사용

이제 모드 클래스에 위에서 만든 클래슬르 상속 받기만 하면 끝입니다.

@Getter
@Entity
public class Blog extends BaseTimeEntity {
    ...
}
반응형
복사했습니다!