이전 포스팅에서 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;//수정자~~
}