보통 엔티티에는 해당 데이터의 생성시간과 수정시간을 포함한다. 차후 유지보수에 있어 굉장히 중요한 정보이기 때문이다.
그렇다보니 매번 DB에 삽입하기 전, 갱신하기 전에 날짜 데이터를 등록/수정하는 코드가 여기저기 들어간다.
데이터의 생성 시간, 수정 시간을 등록하는 코드가 반복적으로 들어가면 코드가 지저분해진다. 이 문제를 해결하기 위해 JPA Auditing을 사용할 수 있다.
LocalDate와 LocalDateTime이 등장했다. Java의 기본 날짜 타입인 Date의 문제를 제대로 고친 타입이므로 Java 8이면 무조건 사용해야 한다.불변 객체가 아니다.
불변 객체란 변경이 불가능한 객체를 의미한다. 멀티 스레드 환경이라면 언제든 문제가 발생할 수 있다.
Calendar는 월(Month) 값 설계가 잘못되었다.
Calendar에서 10월을 나타내는 Calendar.OCTOBER의 값은 9이다. 당연히 10이라고 생각하는 개발자들에게 혼란을 불러일으킨다.
→ 참고
BaseTimeEntity 클래스 생성
⇒ BaseTimeEntity 클래스는 모든 Entity의 상위 클래스가 되어 Entity들의 createdDate와 modifiedDate를 자동으로 관리하는 역할을 하는 것이다.

BaseTimeEntity 코드
package com.jojoldu.book.springboot.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;
}
Posts 클래스가 BaseTimeEntity를 상속 받도록 추가
...
public class Posts extends BaseTimeEntity {
...
}
JPA Auditing 어노테이션들을 모두 활성화 할 수 있도록 Application 클래스에 활성화 어노테이션 하나 추가
@EnableJpaAuditing // JPA Auditing 활성화
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}