C#이나 여타 다른 언어들, 플랫폼에서는 코드 중복되는것을 굉장히 굉장히 싫어한다. 나 또한 그렇고, 코드 중복을 최대한 피하려고 한다.
그러나 스프링부트에서는 코드중복을 용인하는 경우가 참 많은거 같다. 다른 플랫폼과 다르게 스프링부트는 자동화가 많이 되어 있고, 그 구조가 짜임새 있게 짜여 있기 때문에 구조를 맞추다 보면 그런 경우가 있다. 최대한 공통된 항목으로 묶어서 엔티티를 구성하기 위해 BaseEntity를 사용하는 법을 정리한다.
엔티티 구성은 보통, 각 엔티티별로 필드들을 구성하나, BaseEntity를 부모 엔티티로 두고, 공통된 필드들을 정의한다. 그리고 다른 엔티티에선 BaseEntity를 상속받아 사용한다. 그리고 시간정보는 (예 : createdAt) 자동 생헐 한다. 이 때, 몇가지 유의점이 있다.
- BaseEntity는 DB와 매핑되면 안된다.
- 자동생성되는 시간정보를 위해 추가 설정을 해야 한다.
먼저, BaseEntity가 DB와 매핑되지 않고, 자식 Class 에서 해당 필드들을 DB로 매핑하기 위해, BaseEntity 의 클래스 어노테이션으로
@MappedSuperClass 를 붙인다.
자동생성되는 Time 정보를 이용하기 위해 다음을 따른다.
1. AppConfig 클래스를 생성하고, 아래의 코드를 추가한다.
package com.sprint.mission.discodeit.config;
@Configuration
@EnableJpaAuditing
public class AppConfig {
}
2. @EntityListeners(AuditingEntityListener.class) 를 Time 정보가 있는 엔티티의 클래스 어노테이션으로 붙인다.
3. @CreatedDate 어노테이션과 @LastModifiedDate 어노테이션을 각 createdAt, lastModifiedAt 필드위에 붙여준다.
'Backend > SpringBoot' 카테고리의 다른 글
| @Valid, @Validated (0) | 2025.11.03 |
|---|---|
| @JoinTable (0) | 2025.10.31 |
| Custom Annotation (Custom validation) (0) | 2025.10.29 |
| Json 형식으로 로깅 하기 + MDC (0) | 2025.10.29 |
| EC2 에 배포한 서버에 Https 적용하기 (0) | 2025.09.22 |