Spring Boot를 사용한 웹 애플리케이션 개발에서 데이터베이스 엔티티(Entity)는 핵심적인 역할을 합니다.
각 엔티티에는 일반적으로 생성일(createdAt)과 수정일(updatedAt)이 필요하며,
이를 수동으로 관리하는 것은 번거롭고 실수할 가능성이 있습니다.
이를 해결하기 위해 BaseEntity라는 공통 클래스를 적용하고,
Spring Data JPA의 Auditing기능을 활용하면 이러한 필드를 자동으로 관리할 수 있습니다.
이번 글에서는 BaseEntity가 무엇인지, 어떻게 활용할 수 있는지, 그리고 생성일과 수정일을 자동으로 관리하는 방법을 알아보겠습니다.
BaseEntity란 무엇인가?
BaseEntity는 여러 엔티티에서 공통적으로 사용되는 속성을 정의하는 추상 클래스(Abstract Class)입니다.
보통 데이터베이스 테이블의 기본적인 정보를 제공하는데, 대표적으로 ID, 생성일, 수정일과 같은 필드가 포함됩니다.
BaseEntity의 핵심 역할
- 공통 필드 관리
모든 엔티티에 반복적으로 들어가는 필드를 한 곳에서 정의함으로써 중복을 제거할 수 있습니다. - 유지보수성 향상
여러 엔티티에서 동일한 필드를 사용할 때,
변경 사항을 한 곳에서 수정할 수 있어 유지보수가 용이합니다. - 일관성 유지
모든 엔티티에서 동일한 방식으로 데이터를 관리할 수 있습니다.
생성일·수정일 자동화 코드
1) BaseEntity 코드 분석
@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseEntity {
@CreatedDate
@Column(updatable = false)
private LocalDateTime createdAt;
@LastModifiedDate
private LocalDateTime updatedAt;
}
1️⃣ @MappedSuperclass
이 클래스 자체는 엔티티가 아니지만, 이를 상속받는 클래스가 엔티티로 동작할 수 있도록 합니다.
2️⃣ @EntityListeners(AuditingEntityListener.class)
Spring Data JPA의 Auditing 기능을 활성화해 자동으로 생성일과 수정일을 기록합니다.
3️⃣ @CreatedDate
엔티티가 처음 저장될 때의 시간을 자동으로 기록합니다.
4️⃣ @LastModifiedDate
엔티티가 수정될 때마다 최신 수정 시간을 자동으로 업데이트합니다.
2) BaseEntity를 실제 엔티티에 적용하기
@Entity
public class User extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
}
User 엔티티는 BaseEntity를 상속받았기 때문에 createdAt과 updatedAt 필드를 따로 선언할 필요가 없습니다.
Spring Data JPA가 이를 자동으로 관리해 줍니다.
3)BaseEntity 설계 시 고려해야 할 사항
1️⃣ Spring Boot에서 Auditing 기능 활성화 필요
@EnableJpaAuditing을 SpringBootApplication 클래스에 추가해야 합니다.
@EnableJpaAuditing
@SpringBootApplication
public class BoardApplication {
public static void main(String[] args) {
SpringApplication.run(JpaBoardApplication.class, args);
}
}
2️⃣ 데이터베이스 컬럼 타입 확인
LocalDateTime 타입은
MySQL에서는 DATETIME,
PostgreSQL에서는 TIMESTAMP로 저장됩니다.
3️⃣ 기존 데이터와의 호환성
기존 엔티티에 BaseEntity를 추가하면,
기존 데이터에도 createdAt과 updatedAt 값이 있어야 하므로 마이그레이션을 고려해야 합니다.
BaseEntity를 사용하면 생성일과 수정일을 자동으로 관리할 수 있어 코드 작성이 간결해지고 유지보수가 쉬워집니다.
불필요한 반복을 줄이고, 실수를 방지할 수 있죠.
Spring Boot 프로젝트에서 효율적인 데이터 관리를 원한다면, BaseEntity를 적극 활용해 보세요!
BaseEntity를 설계할 때는 확장성을 고려하여, 프로젝트에 맞게 필요한 필드를 추가할 수 있도록 유연하게 구성하는 것이 좋습니다.
또한 @EnableJpaAuditing 설정을 잊지 말고 적용해야 자동 감사 기능이 정상적으로 동작합니다.