이전 포스팅에서 DB 접근 방법을 세팅하고 테스트 만든 내용을 토대로, 남은 구현이 있는지 확인하고 마무리 하였다.
h2-console 옵션 삭제
h2 는 테스트 전용으로만 쓸 것이고, 서비스 단계에서 따로 사용하기 않을 것이므로 콘솔도 필요 없다. 강의에서 데모 끝났고, 삭제.
⇒ 해당 내용은 application.yaml 에서 h2.console.enabled : true 라인을 삭제해주었다.
AuditingFields 추출
생성자, 생성일시, 수정자, 수정일시는 반복적으로 엔티티 클래스에 들어가는 요소이고, 도메인과 직접 연관이 없는 요소이므로 추출이 가능하다. @MappedSuperclass이용하여 상속 방식으로 추출함. 그 외 @DateTimeFormat 요소 추가 및 jpa 옵션 개선
⇒ meta data 필드를 AuditingFields 로 따로 추출하고 extends 받음
package com.example.projectboard.domain;
import lombok.Getter;
import lombok.ToString;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedBy;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import org.springframework.format.annotation.DateTimeFormat;
import javax.persistence.Column;
import javax.persistence.EntityListeners;
import javax.persistence.MappedSuperclass;
import java.time.LocalDateTime;
@Getter //자동 세팅 되어야하는 부분이기에 setter 필요 없음.
@ToString
@EntityListeners(AuditingEntityListener.class)
@MappedSuperclass
public class AuditingFields {
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
@CreatedDate
@Column(nullable = false, updatable = false)
private LocalDateTime createdAt; //생성일시
@CreatedBy
@Column(nullable = false, updatable = false, length = 100)
private String createdBy; //생성자
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
@LastModifiedDate
@Column(nullable = false)
private LocalDateTime modifiedAt; //수정일시
@LastModifiedBy
@Column(nullable = false, length = 100)
private String modifiedBy;//수정자
}
~~@EntityListeners(AuditingEntityListener.class)~~
public class Article extends AuditingFields{
...
~~@CreatedDate @Column(nullable = false) private LocalDateTime createdAt; //생성일시
@CreatedBy @Column(nullable = false, length = 100) private String createdBy; //생성자
@LastModifiedDate @Column(nullable = false) private LocalDateTime modifiedAt; //수정일시
@LastModifiedBy @Column(nullable = false, length = 100) private String modifiedBy;//수정자~~
}
~~@EntityListeners(AuditingEntityListener.class)~~
public class ArticleComment extends AuditingFields{
...
~~@CreatedDate @Column(nullable = false) private LocalDateTime createdAt; //생성일시
@CreatedBy @Column(nullable = false, length = 100) private String createdBy; //생성자
@LastModifiedDate @Column(nullable = false) private LocalDateTime modifiedAt; //수정일시
@LastModifiedBy @Column(nullable = false, length = 100) private String modifiedBy;//수정자~~
}