๐ ๋ชจ๋ธ ๋ฐ์ดํฐ ๊ตฌ์กฐ ์ ์ - devlink-community/gaesubang-app GitHub Wiki
์ด ๋ฌธ์๋ ๊ฐ์๋ฐฉ ์ฑ์ ๋ฐ์ดํฐ ๋ชจ๋ธ ๊ตฌ์กฐ๋ฅผ ์ค๋ช ํฉ๋๋ค. ์์คํ ์ ์ดํดํ๊ธฐ ์ํ ๊ธฐ๋ณธ์ ์ธ ๋ชจ๋ธ ์ ์์ ๊ฐ ๋ชจ๋ธ์ ์์ฑ๋ค์ ํฌํจํ๊ณ ์์ต๋๋ค. ํ์ฌ ์ ๊ณต๋ ๋ฐ์ดํฐ ๋ชจ๋ธ์ UI ๋ชจ๋ธ ๊ฐ์ฒด๋ก, ์ฌ์ฉ์ ์ธํฐํ์ด์ค์์ ์ํ ๊ด๋ฆฌ์ UI ๋ ๋๋ง์ ์ํด ์ฌ์ฉ๋ฉ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๊ณ๋ ์ธ๋ถ ์์คํ ๊ณผ์ ๋ฐ์ดํฐ ์ ์ก์ ์ํ **DTO(Data Transfer Object)**๋ ๋ฐ๋ก ์ค๊ณ๋์ด์ผ ํฉ๋๋ค.
๊ทธ๋ฃน์ ์ฌ์ฉ์๋ค์ด ํจ๊ป ๋ชจ์ฌ ํ๋ํ๋ ๋จ์๋ก, ๊ฒ์ํ ๋๋ ์ปค๋ฎค๋ํฐ ๊ทธ๋ฃน๊ณผ ๊ฐ์ ์ญํ ์ ํฉ๋๋ค.
ํ๋๋ช | ํ์ | ์ค๋ช |
---|---|---|
id |
String | ๊ทธ๋ฃน์ ๊ณ ์ ์๋ณ์ |
name |
String | ๊ทธ๋ฃน ์ด๋ฆ |
description |
String | ๊ทธ๋ฃน ์ค๋ช |
members |
List | ๊ทธ๋ฃน์ ์ํ ๋ฉค๋ฒ ๋ชฉ๋ก |
hashTags |
List | ๊ทธ๋ฃน๊ณผ ๊ด๋ จ๋ ํด์ํ๊ทธ ๋ชฉ๋ก |
limitMemberCount |
int | ๊ทธ๋ฃน ๋ฉค๋ฒ ์ ์ ํ (์ต๋ ํ์ฉ ๊ฐ๋ฅํ ๋ฉค๋ฒ ์) |
owner |
Member | ๊ทธ๋ฃน ์์ ์ ์ ๋ณด (๊ทธ๋ฃน์ ์์ฑํ ๋ฉค๋ฒ) |
-
members: ํด๋น ๊ทธ๋ฃน์ ์ํ ๋ฉค๋ฒ๋ค. ๊ฐ ๋ฉค๋ฒ๋
Member
๋ชจ๋ธ๋ก ํํ๋ฉ๋๋ค. - hashTags: ๊ทธ๋ฃน๊ณผ ๊ด๋ จ๋ ํด์ํ๊ทธ๋ค์ ์ฌ๋ฌ ๊ฐ ๋ด์ ์ ์๋ ๋ฆฌ์คํธ์ ๋๋ค.
์์คํ ์ฌ์ฉ์๋ฅผ ๋ํ๋ด๋ ๋ชจ๋ธ๋ก, ๊ทธ๋ฃน์ ๊ฐ์ ํ๊ฑฐ๋ ๊ฒ์๊ธ์ ์์ฑํ๋ ๋ฑ์ ํ๋์ ํ๋ ์ํฐํฐ์ ๋๋ค.
ํ๋๋ช | ํ์ | ์ค๋ช |
---|---|---|
id |
String | ๋ฉค๋ฒ์ ๊ณ ์ ์๋ณ์ |
email |
String | ๋ฉค๋ฒ ์ด๋ฉ์ผ ์ฃผ์ |
nickname |
String | ๋ฉค๋ฒ์ ๋๋ค์ |
uid |
String | ์ฌ์ฉ์ ๊ณ ์ ์๋ณ์ (Firebase UID ๋ฑ) |
onAir |
bool | ์จ๋ผ์ธ ์ํ ์ฌ๋ถ (true/false) |
image |
String | ํ๋กํ ์ด๋ฏธ์ง URL |
- email: ์ด๋ฉ์ผ ์ฃผ์๋ ๋ฉค๋ฒ์ ๊ณ ์ ์ ๋ณด๋ฅผ ์๋ณํ๋ ์ค์ํ ์์์ ๋๋ค.
- onAir: ๋ฉค๋ฒ์ ์จ๋ผ์ธ ์ํ๋ฅผ ํ์ํ๋ฉฐ, ์ค์๊ฐ ์ฐ๊ฒฐ๋ ์ํ๋ฅผ ๋ํ๋ ๋๋ค.
์ปค๋ฎค๋ํฐ ๋ด์์ ์ฌ์ฉ์๊ฐ ์์ฑํ ๊ฒ์๋ฌผ์ ๋ํ๋ด๋ ๋ชจ๋ธ์ ๋๋ค.
ํ๋๋ช | ํ์ | ์ค๋ช |
---|---|---|
id |
String | ๊ฒ์๊ธ์ ๊ณ ์ ์๋ณ์ |
title |
String | ๊ฒ์๊ธ ์ ๋ชฉ |
content |
String | ๊ฒ์๊ธ ๋ด์ฉ |
member |
Member | ๊ฒ์๊ธ ์์ฑ์ ์ ๋ณด (์์ฑ์์ Member ๋ชจ๋ธ) |
boardType |
String | ๊ฒ์ํ ์ ํ (์: ์ง๋ฌธ, ์ผ๋ฐ ๊ฒ์ํ ๋ฑ) |
createdAt |
DateTime | ๊ฒ์๊ธ ์์ฑ ์๊ฐ |
hashTags |
List | ๊ฒ์๊ธ ๊ด๋ จ ํด์ํ๊ทธ ๋ชฉ๋ก |
likes |
List | ๊ฒ์๊ธ์ ๋ํ ์ข์์ ์ ๋ณด |
- likes: ๊ฐ ๊ฒ์๊ธ์ ๋ํ ์ข์์ ์ ๋ณด๋ก, ์ฌ๋ฌ ๋ช ์ ์ฌ์ฉ์๊ฐ ๊ฒ์๊ธ์ ์ข์์๋ฅผ ๋๋ ์ ๋ ๊ทธ ์ ๋ณด๋ฅผ List ํ์ ์ผ๋ก ๊ธฐ๋กํฉ๋๋ค.
๊ฒ์๊ธ์ ๋ํ ์ข์์ ์ ๋ณด๋ฅผ ๋ํ๋ด๋ ๋ชจ๋ธ์ ๋๋ค.
ํ๋๋ช | ํ์ | ์ค๋ช |
---|---|---|
boardId |
String | ๊ด๋ จ ๊ฒ์๊ธ์ ID |
memberId |
String | ์ข์์๋ฅผ ๋๋ฅธ ๋ฉค๋ฒ์ ID |
- ๊ฐ Like๋ ๊ฒ์๊ธ ID์ ๋ฉค๋ฒ ID๋ฅผ ์ฐ๊ฒฐํ์ฌ, ์ด๋ค ๋ฉค๋ฒ๊ฐ ์ด๋ค ๊ฒ์๊ธ์ ์ข์์๋ฅผ ๋๋ ๋์ง ๋ํ๋ ๋๋ค.
๊ฒ์๊ธ์ ๋ํ ๋๊ธ์ ๋ํ๋ด๋ ๋ชจ๋ธ์ ๋๋ค.
ํ๋๋ช | ํ์ | ์ค๋ช |
---|---|---|
boardId |
String | ๊ด๋ จ ๊ฒ์๊ธ ID |
memberId |
String | ๋๊ธ ์์ฑ์ ID |
createdAt |
DateTime | ๋๊ธ ์์ฑ ์๊ฐ |
content |
String | ๋๊ธ ๋ด์ฉ |
- content: ์ฌ์ฉ์๊ฐ ์์ฑํ ๋๊ธ ๋ด์ฉ์ ๋๋ค.
- createdAt: ๋๊ธ์ด ์์ฑ๋ ์๊ฐ์ ๊ธฐ๋กํฉ๋๋ค.
๊ฒ์๊ธ์ด๋ ๊ทธ๋ฃน์ ํ๊ทธ๋ ํด์ํ๊ทธ ์ ๋ณด๋ฅผ ๋ํ๋ ๋๋ค.
ํ๋๋ช | ํ์ | ์ค๋ช |
---|---|---|
id |
String | ํด์ํ๊ทธ์ ๊ณ ์ ์๋ณ์ |
content |
String | ํด์ํ๊ทธ ๋ด์ฉ |
- content: ํด์ํ๊ทธ ๋ด์ฉ (์: "#Flutter", "#DevLink")์ ๊ธฐ๋กํฉ๋๋ค.
ํ์ต์ด๋ ํ๋ ์๊ฐ์ ๊ธฐ๋กํ๋ ํ์ด๋จธ ๋ชจ๋ธ์ ๋๋ค.
ํ๋๋ช | ํ์ | ์ค๋ช |
---|---|---|
memberId |
String | ํ์ด๋จธ๋ฅผ ์ฌ์ฉํ๋ ๋ฉค๋ฒ ID |
minTime |
int | ์ต์ ์๊ฐ (๋ถ ๋จ์) |
totalTime |
int | ์ด ์ฌ์ฉ ์๊ฐ (๋ถ ๋จ์) |
- totalTime์ ํ์ด๋จธ๊ฐ ์ธก์ ํ ์ ์ฒด ์๊ฐ์ ๊ธฐ๋กํ๋ฉฐ, minTime์ ์ต์ ์ค์ ์๊ฐ์ ๋๋ค.
๊ทธ๋ฃน ํ๋์ ๋ํ ์ถ์ ์ ๋ณด๋ฅผ ๊ธฐ๋กํ๋ ๋ชจ๋ธ์ ๋๋ค.
ํ๋๋ช | ํ์ | ์ค๋ช |
---|---|---|
date |
DateTime | ์ถ์ ๋ ์ง (์ค๋/์ด์ ๋ฑ) |
memberId |
String | ์ถ์ํ ๋ฉค๋ฒ์ ID |
time |
DateTime | ์ถ์ ์๊ฐ |
- date์ time์ ๋ฉค๋ฒ๊ฐ ํ๋์ ์์ํ ๋ ์ง์ ์๊ฐ์ ๊ธฐ๋กํฉ๋๋ค.
์ฌ์ฉ์์๊ฒ ์ ๋ฌ๋๋ ์๋ฆผ ์ ๋ณด๋ฅผ ๊ธฐ๋กํ๋ ๋ชจ๋ธ์ ๋๋ค.
ํ๋๋ช | ํ์ | ์ค๋ช |
---|---|---|
title |
String | ์๋ฆผ ์ ๋ชฉ |
description |
String | ์๋ฆผ ๋ด์ฉ ์ค๋ช |
memberId |
String | ์๋ฆผ ๋์ ๋ฉค๋ฒ์ ID |
createdAt |
DateTime | ์๋ฆผ ์์ฑ ์๊ฐ |
isRead |
bool | ์๋ฆผ ์ฝ์ ์ฌ๋ถ (์ฝ์์ผ๋ฉด true) |
- isRead: ์๋ฆผ์ ์ฝ์๋์ง ์ฌ๋ถ๋ฅผ ๋ํ๋ ๋๋ค.
์ด ๋ชจ๋ธ๋ค์ ๋ค์๊ณผ ๊ฐ์ ๊ด๊ณ๋ฅผ ๊ฐ์ง๋๋ค:
- Group์ ์ฌ๋ฌ Member๋ฅผ ํฌํจ (1:N)
- Post๋ ํ Member์ ์ํด ์์ฑ๋จ (N:1)
- Post๋ ์ฌ๋ฌ Like์ Comment๋ฅผ ๊ฐ์ง ์ ์์ (1:N)
- Member๋ ์ฌ๋ฌ Post, Comment, Like๋ฅผ ์์ฑํ ์ ์์ (1:N)
- HashTag๋ ์ฌ๋ฌ Post๋ Group์ ์ฐ๊ฒฐ๋ ์ ์์ (N:M)
- Timer์ Attendance๋ ํน์ Member์ ์ฐ๊ฒฐ๋จ (N:1)
- Notification์ ํน์ Member์๊ฒ ์ ๋ฌ๋จ (N:1)
%% ๊ฐ์๋ฐฉ ๋ฐ์ดํฐ ๋ชจ๋ธ ๊ด๊ณ ๋ค์ด์ด๊ทธ๋จ
graph TD
A[Group] -->|1:N| B[Member]
A -->|N:M| F[HashTag]
C[Post] -->|N:1| B
C -->|1:N| D[Like]
C -->|1:N| E[Comment]
B -->|1:N| C
B -->|1:N| E
B -->|1:N| D
G[Timer] -->|N:1| B
H[Attendance] -->|N:1| B
I[Notification] -->|N:1| B
ํ์ฌ ๊ฐ์๋ฐฉ ๋ฐ์ดํฐ ๋ชจ๋ธ์ UI ๋ชจ๋ธ ๊ฐ์ฒด๋ก ์ค๊ณ๋์ด ์์ผ๋ฉฐ, ์ฃผ๋ก ํ๋ฉด ๋ ๋๋ง ๋ฐ ์ฌ์ฉ์ ์ํธ์์ฉ๊ณผ ๊ด๋ จ๋ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐ ์ค์ ์ ๋๊ณ ์์ต๋๋ค. ํ์ง๋ง **DTO(Data Transfer Object)**๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋๋ API์์ ๋ฐ์ดํฐ ์ ์ก์ ์ํ ๊ฐ์ฒด์ ๋๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํต์ : DTO๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํต์ ์์ ๋จ์ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ์ด ๋ชจ๋ธ๋ค์ UI ๋ชจ๋ธ๊ณผ๋ ๋ฌ๋ฆฌ ๋น์ฆ๋์ค ๋ก์ง์ ํฌํจํ์ง ์์ผ๋ฉฐ, ๋จ์ํ ๋ฐ์ดํฐ ์ ์ก์ ๋ด๋นํฉ๋๋ค.
- ์ธ๋ถ ์์คํ ๊ณผ์ ํต์ : DTO๋ ์ธ๋ถ ์์คํ (์: REST API)๊ณผ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋ ์ฌ์ฉ๋ฉ๋๋ค. ํ์ฌ UI ๋ชจ๋ธ์ ์ธ๋ถ ์์คํ ๊ณผ์ ๋ฐ์ดํฐ ์ ์ก์ ๊ณ ๋ คํ์ง ์์ผ๋ฏ๋ก, ์ด๋ฅผ ์ํ DTO ์ค๊ณ๊ฐ ์ถ๊ฐ์ ์ผ๋ก ํ์ํฉ๋๋ค.
- ๋ณํ ๋ฐ ์ง๋ ฌํ: DTO๋ JSON๊ณผ ๊ฐ์ ํ์์ผ๋ก ์ง๋ ฌํ๋๊ฑฐ๋ ์ญ์ง๋ ฌํ๋ฉ๋๋ค. ์ด๋ก ์ธํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๊ฐ์ ๊ฐ์ ธ์ฌ ๋๋ ์ธ๋ถ API์ ์ฐ๊ฒฐ๋ ๋ ํ์ํ ๋ณํ ์์ ์ด ํฌํจ๋ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ๊ฐ์๋ฐฉ ์ฑ ํ๋ก์ ํธ์์ DTO ์ค๊ณ๋ ํฅํ ์ธ๋ถ ์์คํ ๊ณผ์ ํต์ ์ ์ํ ์ค์ํ ๋ถ๋ถ์ด ๋ ๊ฒ์ ๋๋ค. ์ด ์์ ์ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ํ์ฅ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ๊ณ ๋ คํ ๋ ํ์ํฉ๋๋ค.