[Refactoring] Spring Data JPA Auditing - 시간 한 곳에서 관리
2022. 12. 11. 19:58ㆍProject/시네마그램
리팩토링 하게 된 이유
Cinemagram 토이 프로젝트를 하면서 엔티티마다 데이터의 생성시간, 수정시간이 칼럼으로 존재합니다.
private LocalDateTime createDate;
@PrePersist // DB에 insert되기 전 실행
public void createDate() {
this.createDate = LocalDateTime.now();
}
지금은 User, Follow 두 엔티티만 있지만 앞으로 더 늘어날 텐데 그럼 불필요하게 코드 중복이 발생합니다.
Spring Data JPA의 Auditing 사용하기
1. domain 패키지 안에 BaseTimeEntity abtract calss 생성
@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseTimeEntity {
@CreatedDate
private LocalDateTime createdDate;
@LastModifiedDate
private LocalDateTime modifiedDate;
}
모든 Entity들의 생성, 수정시간을 자동으로 관리하게 됩니다.
@MappedSuperclass | JPA Entity 클래스들이 해당 BaseTimeEntity를 상속할 경우 createdDate, modifiedDate를 칼럼으로 인식합니다. |
@EntityListeners(AuditingEntityListener.class) | BaseTimeEntity클래스에 Auditing기능을 포함시킵니다. |
@CreatedDate | BaseTimeEntity를 상속한 Entity가 생성되어 저장될 때 시간이 자동 저장 됩니다. |
@LastModifiedDate | BaseTimeEntity를 상속한 Entity를 조회해 값을 변경 시 시간이 자동 저장됩니다. |
2. Entity가 BaseTimeEntity를 상속받도록 코드를 추가하고 이전 시간관련 칼럼들은 삭제합니다.
public class User extends BaseTimeEntity {
...
}
3. Application클래스에 JPA Auditing 어노테이션을 활성화 시키는 어노테이션을 추가합니다.
@EnableJpaAuditing
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
확인
자! 그럼 application.yml ddl-auto: create로 바꾼 후 회원 가입해서 DB에 과연 저장이 잘 되는지 Test 해보겠습니다.
'Project > 시네마그램' 카테고리의 다른 글
[Cinemagram] Image 업로드 및 렌더링 (feat. OSIV) - (7) (0) | 2022.12.14 |
---|---|
[Cinemagram] JPA Native Query 팔로우 구현 및 예외처리 - (6) (0) | 2022.12.11 |
[Cinemagram] 회원 정보 수정, 필수 값 유효성 검사 및 예외처리 - (5) (1) | 2022.12.11 |
[Trouble Shooting] ExceptionHanlder 예외처리를 통한 원하는 메세지 출력 (0) | 2022.12.11 |
[Cinemagram] 로그인(Spring Security - session 생성) - (4) (0) | 2022.12.07 |