게시판 만들기 -3 / 도메인 설계하기

패스트 캠퍼스 강의 게시판 만들기를 따라하며 백엔드 스킬을 늘려보자.

  1. 프로젝트 관리
  2. 이슈
    1. 도메인 ERD 다이어 그램 그려보기
    2. 자바 클래스로 도메인 표현해보기
  3. Spring Boot Dependencies
    1. Spring Boot DevTools
      1. 제공되는 기능 5가지
        1. Property Defaults
        2. Automatic Restart
        3. Live Reload
        4. Global Settings
        5. Remote Applications
    2. LomBok
    3. Spring Web
    4. Spring Boot Actuator
      1. 엔드포인트 종류
      2. configuration
  4. 공부내용
    1. ERD
      1. ERD 구조
        1. Entity 개체
        2. Attribute 속성
        3. PK
        4. FK
      2. ERD 관계 표현
  5. Tips

프로젝트 관리

프로젝트 관리 문서

이슈

img_2.png

  • 도메인 ERD 다이어그램 그려보기
  • 자바 클래스로 도메인 표현해보기

도메인 ERD 다이어 그램 그려보기

erdDiagram

자바 클래스로 도메인 표현해보기

package com.fastcampus.fastcampusprojectboard.domain;

import java.time.LocalDateTime;

public class Article {
    private Long id;
    private String title;  // 제목
    private String content; // 본문
    private String hashtag; // 해시태그

    private LocalDateTime createAt; // 생성일시
    private String createBy;    // 생성자
    private LocalDateTime modifiedAt; // 수정일시
    private String modifiedBy;  // 수정자

}
package com.fastcampus.fastcampusprojectboard.domain;

import java.time.LocalDateTime;

public class ArticleComment {
    private Long id;
    private Article articleId; // 게시글 (ID)
    private String content; // 본문 

//    metaData
    private LocalDateTime createAt; // 생성일시
    private String createBy;    // 생성자
    private LocalDateTime modifiedAt; // 수정일시
    private String modifiedBy;  // 수정자
}

Spring Boot Dependencies

img_1.png

위 내용과 같이 Spring Boot Dependencies를 구성했습니다.

Spring Boot DevTools

말그래도 Spring Boot에서 제공하는 개발 편의를 제공하는 모듈입니다. 개발 시 코드 수정을하면 브라우저에 수정된 내용을 보여줄려면 Application을 재시작해야하는 번거로움이 생기는데 devtools를 이용하면 이러한 점을 해결할 수 있습니다.

제공되는 기능 5가지

Property Defaults

개발 시점과 배포 시점에 다른 설정을 기본적으로 개발 단계에 맞춰 설정해줍니다.

Automatic Restart

파일 수정 후 저장을 하면, Classpath에 존재하는 파일의 변경을 감지하고 자동으로 서버를 restart 해줍니다.

설정을 통해 원하는 디렉토리 만을 지정할 수도 있습니다.

Live Reload

React의 Hot Reload와 비슷한 기능으로 파일을 수정하기만 해도 자동으로 브라우저가 새로 고침되는 기능을 제공합니다.

Global Settings

.spring-boot-devtools.properties 폴더에 이름이 지정된 파일을 추가하여 전역 devtools 설정을 구성할 수 있습니다.

Remote Applications

Spring Boot 개발자 도구는 로컬 개발에만 국한되지 않습니다. 응용 프로그램을 원격으로 실행할 때 여러 기능을 사용할 수 있게 해줍니다. devtools 원격 지원은 옵트인이며 이를 활성화 하려면 재패키지된 아카이브에 포함되어 있는지 확인해야 합니다.

LomBok

Lombok Link

자바에서 getter,setter,toString 등의 메서드들을 사용하여 객체를 이용합니다 하미나 이와 같은 메서드는 구조는 비슷한데 일일이 구현을 할려면 많은 시간을 잡아먹습니다. 하지만 Lombok을 이용하면 이와 같은 시간을 아낄 수 있습니다.

Lombok은 여러가지 어노테이션을 제공하고 이를 기반으로 코드를 컴파일과정에서 생성해 주는 방식으로 동작하는 라이브러리 입니다.

// 아래 코드는 Id 필드만을 getter, setter 메서드를 구현했지만 필드 몇개만 더 추가해도 같은 형식의
// getter, setter을 구현해야하므로 시간이 많이 듭니다.
public class ArticleComment {
    private Long id;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

하지만 lombok을 사용한다면 // << --------------------로 가르키고 있는 두 어노테이션만 집어 넣는다면 해당 클래스의 모든 필드가 각 각의 getter, setter을 가지게 됩니다.

@Getter // << --------------------
@Setter // << --------------------
public class ArticleComment {
    private Long id;
    private Article articleId; // 게시글 (ID)
    private String content; // 본문 

//    metaData
    private LocalDateTime createAt; // 생성일시
    private String createBy;    // 생성자
    private LocalDateTime modifiedAt; // 수정일시
    private String modifiedBy;  // 수정자
}

Spring Web

Spring MVC를 사용하여 RESTful 서비스 사용할 수 있게 해줍니다.

Spring Boot Actuator

Application을 모니터링하고 관리하는 기능을 Spring Boot에서 자체적으로 제공해줍니다. http와 JMX를 통해 Actuator를 확인할 수 있다고 합니다.

엔드포인트 종류

IDDescription
beansapplication의 전체 Spring beans를 출력
caches사용가능한 cache를 노출
conditionsconfiguration 또는 auto-configuration 되는 class들의 성공 여부와 이유를 설명
envSpring Boot의 현재 환경설정 정보(application.yml의 정보 등)를 출력
healthapplication의 현재 상태를 보여줍니다.
httptracehttp를 trace한 정보를 노출(기본적으로 최신 100건의 reqest-response를 보여줍니다.)
mappingsRequest와 mapping되어있는 handler 정보를 가져옵니다.
sessionsSpring Session이 가지고 있는 정보를 가져옵니다.
threaddumpthreaddump를 가져옴
logfilelog를 가져옵니다.
metricsmetrics 정보를 노출합니다.

configuration

actuator에서 제공하는 매트릭에서는 민강함 정보를 포함이 되어있습니다. 보안에 위험한 요소이기 때문에 미리 설정을 해줘야합니다.

공부내용

ERD

ERD는 Entity Relationship Diagram 의 준말로 E-R 다이어그램의 준말입니다.

개념적 데이터 모델링은 일의 진행에서 일의 데이터 간의 관계를 구성하는 것입니다. 개념적 데이터 모델은 추상화 수준이 높고 업무중심적으로 포과적인 수준의 모델일을 수행합니다.

주로 사용하는것이 개체와 개체의 관계를 설계하고 그것을 보기 좋게 시각적으로 표현하기 위해 (ER 다이어그램)을 생성합니다.

ERD를 작성하면 좋은 이유는

  • 테이블의 구조를 시각적으로 보여줘 이해하기가 좋습니다.
  • 관계의 대한 정보를 보여주고 있어 각 개체간의 어떠한 관계(1:N,N:M 같은)를 가지고 있는지 알 수 있습니다.

ERD 구조

Entity - Article

PK/ id(bigint)title(varchar(200))content(varchar(65535))hashtag(varchar(200))
1첫 번째 게시글temp1
2두 번째 게시글temp2
3세 번째 게시글temp3

Entity 개체

  • Entity는 실제하는 사물을 추상합니다.
  • Article 자체가 개체입니다.

    Attribute 속성

    개체가 가지고 있는 속성입니다. 컬렁명을 사용하여 표현하고 이 개체에서는

  • id
  • title
  • content
  • hashtag

들이 Article 개체가 가지고 있는 속성 값들입니다. 그리고 괄호()에 포함되어 있는것들이 속성이들이 가지고 있는 데이터타입입니다. 데이터 타입을 기입해줘야 합니다.

PK/ id(bigint)title(varchar(200))content(varchar(65535))hashtag(varchar(200))
    

PK

데이터베이스의 Primary Key와 같은 목적을 가지고 있습니다. 중복과 NULL 값이 없는 유일한 값을 가지고 있는 키입니다. Article 개체에서는 id 자체를 PK로 지정해 놨습니다.

PK/ id(bigint)
1
2
3

FK

위 PK와 마찬가지로 DB의 Foreign ky와 같은 목적을 가지고 있습니다.

Fk는 N 개채와 M 개체가 들고있는 속성의 관계를 표시하는 키입니다.

밑에 보이는 테이블은 왼쪽은 Article 테이블이며 오른쪽은 ArticleComment 테이블의 관계를 표현하기 위해 작성되었습니다.

Article(entity) :PK/ id(bigint)ArticleComment(entity): FK/ articleid (bigint)
11
22
33

ERD 관계 표현

두 관계중 부모의 키를 PK로 받는지에 따라 점선과 실선으로 표현합니다.

ERD에서는 두 개체의 관계를 선 모양에 따라 다르게 표현합니다.

10 to Many (Optional)1 to Many (Essential)
img_6.pngimg_7.pngimg_8.png
1 (Essential)0 to 1 (Optional)
img_2.pngimg_3.png
  • I 는 필수를 나타내는 모양입니다.

  • O 는 선택을 할 수 있는 모양입니다.

Tips

git 에서 automatically close 기능을 이용하면 머지 했을때 이슈가 닫히게 끔 자동으로 닫아주는 기능임.

should table name be plural