서비스를 만들고 앱을 만들 때 서버에서는 서버 앱을 만들기보다 먼저 해야 하는 것이 있습니다. 그것은 바로 정보들을 저장할 Storage 만들기. 즉, DB를 설계하는 것입니다.
Sluv의 DB 설계를 통해 Sluv이 어떻게 성장했는지 보여 드리겠습니다!
다음과 같은 조건들이 주워졌습니다.
1. 디자이너가 제작한 디자인 화면
2. 기획자의 간단한 요구사항
저희는 주워진 조건을 가지고 다음 3단계의 순서로 Sluv의 DB를 설계하였습니다.
요구사항 분석 → ERD 설계 → 객체 다이어그램 설계
요구사항 분석 : UI에 감춰진 비밀 속의 요구사항을 개발을 위한 명시적인 요구사항 변경.
ERD 설계 : 명시적인 요구사항을 바탕으로 어떤 형식으로 데이터를 저장할 것인지 설계.
객체 다이어그램 설계 : JPA를 사용하기 위해 ERD 설계를 바탕으로 어떤 Entity에 어떤 Field를 생성할 것인지 설계.
요구사항 분석은 디자이너가 제작한 디자인 화면을 보고 어떤 정보들을 저장해야할지 명시적인 요구사항으로 변경하는 작업입니다.
보여드릴 예시는 저희가 구현해야 할 기능 중 하나인 커뮤니티 기능입니다.
다음은 디자이너가 저희에게 준 디자인 화면입니다.
디자인 화면과 기획자에게 전달받은 요구사항을 참고하여, 명시적인 요구사항으로 변경하는 작업이 요구사항 분석입니다.
전달받은 요구사항은 다음과 같습니다.
1. 커뮤니티 형식의 질문하기를 구현.
2. 질문 글에 여러 사용자들이 댓글을 달 수 있어야 함.
3. 질문 글에 달린 댓글에도 댓글이 달릴 수 있어야 함.
요구사항을 전달받은 후 다음과 같이 명시적인 요구사항으로 변경하였습니다.
한 사용자가 커뮤니티에 질문을 올리는 형식.
a. 질문을 올리는 사용자가 존재해야 한다.
b. 사용자가 올린 질문의 데이터가 존재해야 한다.
c. 질문에는 반드시 게시자가 존재해야 한다.
d. 한 명의 유저가 여러 개의 질문을 할 수 있다.
e. 아직 1개도 질문을 하지 않은 유저가 존재할 수 있지만, 질문은 꼭 질문한 사람이 1명 존재한다.
질문 글에는 여러 명의 사용자가 댓글을 다는 형식
a. 댓글의 데이터가 존재해야 한다.
b. 댓글에는 반드시 게시자가 존재해야 한다.
c. 댓글에는 반드시 어떤 질문에 달린 것인지 소속이 있어야 한다.
d. 한 명의 유저가 여러 개의 댓글을 작성할 수 있다.
e. 아직 1개도 댓글을 작성하지 않은 유저가 존재할 수 있지만, 댓글은 꼭 댓글을 작성한 사람이 1명 존재해야 한다.
f. 한 개의 질문에 여러 개의 댓글이 달릴 수 있다.
g. 아직 1개도 댓글이 달리지 않은 질문이 존재할 수 있지만, 댓글은 꼭 작성된 질문이 1개 존재해야 한다.
댓글에 대댓글이 달릴 수 있어야 하는 형식
a. 댓글에 대댓글이 달릴 수 있어야 한다.
b. 한 개의 댓글에 여러개의 대댓글이 달릴 수 있다.
c. 아직 1개도 대댓글이 달리지 않은 댓글이 존재할 수 있지만, 대댓글은 꼭 1개의 parent 댓글이 존재해야 한다.
명시적인 요구사항을 바탕으로 다음과 같이 ERD 설계에 들어갔습니다.
(설명을 위해 DB를 ERD를 간략화했습니다. 실제 DB는 더 큽니다.)
한 사용자가 커뮤니티에 질문을 올리는 형식.
a. 질문을 올리는 사용자가 존재해야 한다.
-> 사용자 Entity 생성
b. 사용자가 올린 질문의 데이터가 존재해야 한다.
-> 질문 Entity 생성
c. 질문에는 반드시 게시자가 존재해야 한다.
-> 질문은 user_id를 FK로 갖는다.
d. 한 명의 유저가 여러 개의 질문을 할 수 있다.
-> 사용자 Entity와 질문 Entity는 1:N 관계.
e. 아직 1개도 질문을 하지 않은 유저가 존재할 수 있지만, 질문은 꼭 질문한 사람이 1명 존재 한다.
-> 사용자는 Optional, 질문은 Mandatory.
질문 글에는 여러 명의 사용자가 댓글을 다는 형식
a. 댓글의 데이터가 존재해야 한다.
-> 댓글 Entity 생성
b. 댓글에는 반드시 게시자가 존재해야 한다.
-> 댓글은 user_id를 FK로 갖는다.
c. 댓글에는 반드시 어떤 질문에 달린 것인지 소속이 있어야 한다.
-> 댓글은 question_id를 FK로 갖는다.
d. 한 명의 유저가 여러 개의 댓글을 작성할 수 있다.
-> 사용자 Entity와 댓글 Entity는 1:N 관계.
e. 아직 1개도 댓글을 작성하지 않은 유저가 존재할 수 있지만, 댓글은 꼭 댓글을 작성한 사람이 1명 존재해야 한다.
-> 사용자는 Optional, 댓글은 Mandatory.
f. 한 개의 질문에 여러 개의 댓글이 달릴 수 있다.
-> 질문 Entity와 댓글 Entity는 1:N 관계.
g. 아직 1개도 댓글이 달리지 않은 질문이 존재할 수 있지만, 댓글은 꼭 작성된 질문이 1개 존재해야 한다.
-> 질문은 Optional, 댓글은 Mandatory.
댓글에 대댓글이 달릴 수 있어야 하는 형식
a. 댓글에 대댓글이 달릴 수 있어야한다.
-> 댓글 Entity에 상위 댓글을 칭하는 parent_id가 존재.
b. 한 개의 댓글에 여러개의 대댓글이 달릴 수 있습니다.
-> parent 댓글과 child 댓글은 1:N 관계.
c. 아직 1개도 대댓글이 달리지 않은 댓글이 존재할 수 있지만, 대댓글은 꼭 parent 댓글이 존재해야합니다.
-> parent 댓글은 Optional, child 댓글은 Mandatory.
저희는 JPA를 사용할 것이기 때문에 ERD를 바탕으로 객체 다이어그램도 설계하였습니다.
DB로 들여다보는 Sluv의 성장 과정 (2) (0) | 2023.04.28 |
---|
댓글 영역