상세 컨텐츠

본문 제목

주제 선정 API, ERD 설계, 디자인이 끝나고 본격적으로 개발 시작하기.

스프링 부트

by 주초위왕 2024. 1. 9. 23:59

본문

팀 프로젝트 5명이 선정되고 좀 빨리 시작을 했지만 코로나 때문에 거의 2주 동안 붕 뜬 상태로 프로젝트를 진행 했다.

다행히 외부 데이터API는 결정이 된 상태라 ERD만 뜯어 고치고 각자 맡은 파트를 개발했다.

 

개발환경

에디터 : IntelliJ

개발 환경 : Gradle

 

빌드를 실행 할 수 있는 도구 중에 Maven과 Gradle 중 Gradle 선택.

 

ERD 설계

'Entity Relationship Diagram' 의 약자로 이름 그대로 Entity 들의 관계를 나타내는 다이어그램이다.
여기서 Entity는 보통 데이터를 뜻하니, 데이터들의 관계를 나타낸 도표를 의미한다.

 

내가 맡은 파트는 게시판 CRUD이다.

제일 기본 중에 기본이고 생성, 수정, 삭제, 읽기를 또 경험하고 데이터 흐름을 알 수 있기도하다.

거기에 첨부파일과 댓글 기능, 검색 창 까지 들어갈거는 다들어 갔다고 보면 된다.


개발하기 전에 제일 먼저 해야할건 ERD설계한 내용을 바탕으로 도메인 만들기 (하지만, 처음 할 때 만들지 못 해서 나중에 고생을 했다ㅠ)

 

게시판 도메인 Post클래스 객체를 생성 하기 전에 폴더에다가 도메인 폴더를 따로 만들어 주는 것이 좋다~!!

만약 간단한 거라면 그냥 한 폴더 안에 다 들어가도 괜찮겠지만, 큰 프로젝트는 폴더 별로 만들고 보안에도 취약하지 않게 분리해주기.

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Post {
    private Long id;  // 글 id (PK)
    private String subject;
    private String content;
    private LocalDateTime regDate;
    private Long viewCnt;

    private User user;  // 글 작성자 (FK)

    // 첨부파일
    @ToString.Exclude
    @Builder.Default
    private List<Attachment> fileList = new ArrayList<>();
}

 

ERD에는 게시글 안에 첨부파일 리스트 컬럼이 없지만 위 fileList는 게시글 객체를 로드할때 해당 게시글에 포함되어 있는

첨부파일 리스트를 가져 올 수 있도록 만들어 놓은 컬럼이다.

 

(@ToString.Exclude 어노테이션으로 인하여 print로는 해당 데이터는 표시되지 않는다.)


첨부파일 도메인 만들기

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Attachment {
    private Long id;  // PK
    private Long post_id;  // 어느 글의 첨부파일 (FK)

    private String sourcename; // 원본 파일명
    private String filename;   // 저장된 파일명 (rename 된 파일명)
}

댓글 도메인 만들기

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Comment {
    private Long id;  // PK
    @ToString.Exclude
    private User user; // 댓글 작성자 (FK)

    @JsonIgnore   // JSON 변환시 제외하는 필드
    private Long post_id; // 어느글의 댓글 (FK)

    private String content;   // 댓글 내용

    // java.time.* 객체 변환을 위한 annotation 들
    @JsonSerialize(using = LocalDateTimeSerializer.class)
    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Seoul")
    @JsonProperty("regdate")
    private LocalDateTime regDate;
}

 

반응형

관련글 더보기

댓글 영역