01_BaseTimeEntity
📍 BaseTimeEntity
모든 엔티티가 공통으로 가져야 할 시간 관련 필드를 모아둔 부모 클래스
자식 엔티티는 BaseTimeEntity를 상속받기만 하면 createdAt, updatedAt 필드를 자동으로 가지게 됨
import jakarta.persistence.EntityListeners;
import jakarta.persistence.MappedSuperclass;
import lombok.Getter;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import java.time.LocalDateTime;
@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public class BaseTimeEntity {
@CreatedDate
@Column(updatable = false)
private LocalDateTime createdAt;
@LastModifiedDate
private LocalDateTime updatedAt;
}
🔍 코드 설명
- @MappedSuperclass: 클래스를 상속받는 엔티티에 필드만 물려줌. 테이블로 생성되지 않음
- @EntityListeners(AuditingEntityListener.class): 엔티티가 저장, 수정될 때 이벤트를 감지하여 콜백을 실행하는 리스너를 등록함
- @Column(updatable = false): JPA Auditing의 동작에만 의존하지 않고, DB 레벨에서도 수정을 막아둠
@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Member extends BaseTimeEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
// ...
}
시간 필드가 필요한 엔티티는 BaseTimeEntity를 상속하면 된다.
📍 LocalDateTime vs Instant
| 타입 | 특징 | 사용 시점 |
| LocalDateTime | 타임존 정보가 없는 로컬 시간 | 단일 지역 서비스, JVM 시간대를 그대로 사용해도 무방한 경우 |
| Instant | UTC 기준 시각 | 글로벌 서비스, 분산 환경, 여러 타임존을 다뤄야 하는 경우 |
| ZonedDateTime | 타임존 정보를 포함한 시각 | 시간대 변환이 빈번하게 필요한 경우 |
02_JPA Auditing
📍 @EnableJpaAuditing
@EntityListeners(AuditingEntityListener.class) 만 붙여서는 BaseTimeEntity가 동작하지 않음
Auditing 기능을 스프링 부트 애플리케이션 전역에서 활성화해야 함
@EnableJpaAuditing
@SpringBootApplication
public class MainApplication {
public static void main(String[] args) {
SpringApplication.run(UnisApplication.class, args);
}
}
🔍 코드 설명
- @EnableJpaAuditing: 스프링 컨텍스트에 Auditing 관련 빈을 등록. 없다면 createdAt, updatedAt이 항상 null로 저장됨
'Back-end > SpringBoot' 카테고리의 다른 글
| [Spring Boot] 공통 응답 처리 구현 (0) | 2026.06.26 |
|---|---|
| [Spring Boot] 공통 예외처리 구현 - CustomException, GlobalExceptionHandler (0) | 2026.06.25 |
| [Spring Boot] Chap 4 - 도서 관리 서비스 JPA 사용 및 트랜잭션 (0) | 2026.01.22 |
| [Spring Boot] Chap 3 - 도서 관리 서비스 역할 분리 및 스프링 컨테이너 (0) | 2026.01.21 |
| [Spring Boot] Chap 2 - 도서 관리 서비스 DB 조작하기 (0) | 2026.01.19 |