본문 바로가기
TIL

TIL - 24.01.08

by JHBang 2024. 1. 8.

팀 프로젝트의 시작

캠프에서 오늘부터 프로젝트를 진행한다.

 

프로젝트는 뉴스피드 구현이였다. 뉴스피드는 특정 관심 분야의 커뮤니티의 기능을 하면서  벨로그처럼  포스트 기능도 가진 사이트를 말한다.

 

핵심은 여러 게시물을 한번에 보여줌으로써 원하는 게시물을 선택해서 볼 수 있는 기능이다.

 

이번 프로젝트의 필수 조건은 포스트의 CRUD 기능,  뉴스피드 기능(메인 페이지, 전체 조회 페이지), 상세보기 기능, 댓글 CRUD 기능이다.

 

우리 조는 프로젝트 협업을 위해 팀원을 구할 수 있는 뉴스피드 사이트를 구상했다.

 

사이트 이름은 LMC. Learning Mate Community 의 약자이다.

 

 커뮤니티가 가능한 포스트(일반적인 블로그 포스트와 같다.)와 동시에 팀원을 구하는 포스트 또한 작성이 가능한 구조다.

 

 

 

문제 발생

먼저 조원과 ERD 작성을 시작했다. 우리 조는 ERD 작성이 상당히 오래 걸렸는데, 그 이유는 커뮤니티 포스트와 팀원 모집 포스트의 차이 때문이였다.

 

난 팀원 모집 포스트의 엔티티 작성을 맡았는데, 일반적인 포스트 기능에 추가적으로 모집인원, 현재 인원, 모집 마감 여부 등 추가 인스턴스를 구상했다.

 

여기서 문제가 발생한다. 각 포스트, 즉 커뮤니티 포스트와 팀원 모집 포스트를 다른 엔티티로 두게 되면 댓글 엔티티 또한 여러개가 생성되어야 한다.

 

이 방식은 다른 포스트 카테고리가 생겼을 경우 댓글 엔티티 또한 늘어나게 되는 상황이 발생한다.

 

그렇다고 두 포스트를 합치자니 각 포스트 엔티티의 내부 인스턴스가 다르다. 정 합치고 싶다면 팀원모집 포스트가 가진 모집인원, 현재 인원, 모집 마감 여부같은 인스턴스에 커뮤니티 포스트 row는 null값을 주면 된다.

 

하지만 그런식의 과도한 null값을 이용한 데이터베이스 구성은 가독성이 심각하게 떨어지고 유지보수도 힘들어진다. 

 

 

문제 해결?

그러다 문득 그런 생각이 들었다.

 

팀원 모집 포스트를 커뮤니티 포스트와 분리하지 못하는 이유는 카테고리가 추가적으로 존재할 때 코드의 변경점이 과도하게 많아진다는 이유였는데,  카테고리의 추가로 인해 생성된 포스트 엔티티는 기존 엔티티와 똑같은 인스턴스를 가지고 있을것이고, 아얘 팀원 모집 포스트는 카테고리로 나눈 다른 기능으로 봐야 하지 않을까?

 

그동안 우리는 두 포스트를 카테고리만 다른 같은 포스트로 보고 있었다. 때문에 회의를 하며 나온 대안 중 카테고리 엔티티를 추가해서 댓글과 포스트와 관계를 맺게 하려는 시도도 있었다. 하지만 역시나 팀원모집 포스트의 추가 인스턴스가 문제였다.

 

즉 우리조는 처음으로 돌아가 두 포스트를 아얘 다른 기능을 수행하는 개별적인 요소로 보고 ERD를 설계했다.

 

뉴스피드 ERD

 

오른쪽에 있는 recruit 포스트가 내가 구성한 ERD이다. 

Recruit_Post와 Recruit_Post_detail은 일대일 관계를 가지고 있다. Recruit_Post는 뉴스피드의 약식 post를 보여주며 Recruit_Post_detail는 선택한 포스트의 상세 페이지 이므로 일대일 관계 사용 시 각각의 detail 포스트가 단 하나의 약식 포스트에 연결되어 Post_Detail 엔터티에서 Post 엔터티를 직접 참조할 수 있다.

 

Recruit_Post_detail 엔티티와 Team Participation 엔티티는 1:N 관계이다.

 

Team Participation 엔티티는 팀 합류 신청 정보를 담을 엔티티인데, 한 포스트에 여러 신청이 존재할 수 있기 때문에 1:N 관계로 설정했다.

 

여기서 우리 팀이 한가지 타협한 부분이 있다. 바로 comment는 엔티티를 나누지 않았다는 건데, 위 ERD대로 구현하게 되면 데이터베이스에서 comment이 어떤 포스트에 작성됐는지에 따라 FK중 한가지 값이 null이 될 수 있다는 것이다.

 

이 점에 대해 튜터님께 질문을 드려봤는데, 저정도 값은 null이 들어가도 상관은 없다고 말씀하셨다.

 

 

다음은...

이 팀 프로젝트는 필수 구현이 다가 아니다. 필수 구현 요소를 모두 구현한 후 선택적으로 추가적인 기능을 적용할 수 있도록 과제가 주어졌으므로 내일중으로 필수구현 요소를 끝내고 추가요소에 대해 더 고민해 봐야겠다.

 

 

 

 

 

 

'TIL' 카테고리의 다른 글

TIL - 24.01.11  (0) 2024.01.11
TIL - 24.01.09  (0) 2024.01.09
TIL - 23.12.28  (0) 2023.12.28
TIL - 23.12.26  (1) 2023.12.26
TIL - 23.12.20  (1) 2023.12.20