๐Ÿ“ ๋ชจ๋ธ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์ •์˜ - devlink-community/gaesubang-app GitHub Wiki

๊ฐœ์š”

์ด ๋ฌธ์„œ๋Š” ๊ฐœ์ˆ˜๋ฐฉ ์•ฑ์˜ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ ๊ตฌ์กฐ๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ณธ์ ์ธ ๋ชจ๋ธ ์ •์˜์™€ ๊ฐ ๋ชจ๋ธ์˜ ์†์„ฑ๋“ค์„ ํฌํ•จํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ์ œ๊ณต๋œ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์€ UI ๋ชจ๋ธ ๊ฐ์ฒด๋กœ, ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ์ƒํƒœ ๊ด€๋ฆฌ์™€ UI ๋ Œ๋”๋ง์„ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค๊ณ„๋‚˜ ์™ธ๋ถ€ ์‹œ์Šคํ…œ๊ณผ์˜ ๋ฐ์ดํ„ฐ ์ „์†ก์„ ์œ„ํ•œ **DTO(Data Transfer Object)**๋Š” ๋”ฐ๋กœ ์„ค๊ณ„๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋ธ ๊ตฌ์กฐ

1. Group (๊ทธ๋ฃน)

๊ทธ๋ฃน์€ ์‚ฌ์šฉ์ž๋“ค์ด ํ•จ๊ป˜ ๋ชจ์—ฌ ํ™œ๋™ํ•˜๋Š” ๋‹จ์œ„๋กœ, ๊ฒŒ์‹œํŒ ๋˜๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ทธ๋ฃน๊ณผ ๊ฐ™์€ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

ํ•„๋“œ๋ช… ํƒ€์ž… ์„ค๋ช…
id String ๊ทธ๋ฃน์˜ ๊ณ ์œ  ์‹๋ณ„์ž
name String ๊ทธ๋ฃน ์ด๋ฆ„
description String ๊ทธ๋ฃน ์„ค๋ช…
members List ๊ทธ๋ฃน์— ์†ํ•œ ๋ฉค๋ฒ„ ๋ชฉ๋ก
hashTags List ๊ทธ๋ฃน๊ณผ ๊ด€๋ จ๋œ ํ•ด์‹œํƒœ๊ทธ ๋ชฉ๋ก
limitMemberCount int ๊ทธ๋ฃน ๋ฉค๋ฒ„ ์ˆ˜ ์ œํ•œ (์ตœ๋Œ€ ํ—ˆ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฉค๋ฒ„ ์ˆ˜)
owner Member ๊ทธ๋ฃน ์†Œ์œ ์ž ์ •๋ณด (๊ทธ๋ฃน์„ ์ƒ์„ฑํ•œ ๋ฉค๋ฒ„)
  • members: ํ•ด๋‹น ๊ทธ๋ฃน์— ์†ํ•œ ๋ฉค๋ฒ„๋“ค. ๊ฐ ๋ฉค๋ฒ„๋Š” Member ๋ชจ๋ธ๋กœ ํ‘œํ˜„๋ฉ๋‹ˆ๋‹ค.
  • hashTags: ๊ทธ๋ฃน๊ณผ ๊ด€๋ จ๋œ ํ•ด์‹œํƒœ๊ทธ๋“ค์„ ์—ฌ๋Ÿฌ ๊ฐœ ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ๋ฆฌ์ŠคํŠธ์ž…๋‹ˆ๋‹ค.

2. Member (๋ฉค๋ฒ„)

์‹œ์Šคํ…œ ์‚ฌ์šฉ์ž๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ชจ๋ธ๋กœ, ๊ทธ๋ฃน์— ๊ฐ€์ž…ํ•˜๊ฑฐ๋‚˜ ๊ฒŒ์‹œ๊ธ€์„ ์ž‘์„ฑํ•˜๋Š” ๋“ฑ์˜ ํ™œ๋™์„ ํ•˜๋Š” ์—”ํ‹ฐํ‹ฐ์ž…๋‹ˆ๋‹ค.

ํ•„๋“œ๋ช… ํƒ€์ž… ์„ค๋ช…
id String ๋ฉค๋ฒ„์˜ ๊ณ ์œ  ์‹๋ณ„์ž
email String ๋ฉค๋ฒ„ ์ด๋ฉ”์ผ ์ฃผ์†Œ
nickname String ๋ฉค๋ฒ„์˜ ๋‹‰๋„ค์ž„
uid String ์‚ฌ์šฉ์ž ๊ณ ์œ  ์‹๋ณ„์ž (Firebase UID ๋“ฑ)
onAir bool ์˜จ๋ผ์ธ ์ƒํƒœ ์—ฌ๋ถ€ (true/false)
image String ํ”„๋กœํ•„ ์ด๋ฏธ์ง€ URL
  • email: ์ด๋ฉ”์ผ ์ฃผ์†Œ๋Š” ๋ฉค๋ฒ„์˜ ๊ณ ์œ  ์ •๋ณด๋ฅผ ์‹๋ณ„ํ•˜๋Š” ์ค‘์š”ํ•œ ์š”์†Œ์ž…๋‹ˆ๋‹ค.
  • onAir: ๋ฉค๋ฒ„์˜ ์˜จ๋ผ์ธ ์ƒํƒœ๋ฅผ ํ‘œ์‹œํ•˜๋ฉฐ, ์‹ค์‹œ๊ฐ„ ์—ฐ๊ฒฐ๋œ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

3. Post (๊ฒŒ์‹œ๊ธ€)

์ปค๋ฎค๋‹ˆํ‹ฐ ๋‚ด์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์ž‘์„ฑํ•œ ๊ฒŒ์‹œ๋ฌผ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค.

ํ•„๋“œ๋ช… ํƒ€์ž… ์„ค๋ช…
id String ๊ฒŒ์‹œ๊ธ€์˜ ๊ณ ์œ  ์‹๋ณ„์ž
title String ๊ฒŒ์‹œ๊ธ€ ์ œ๋ชฉ
content String ๊ฒŒ์‹œ๊ธ€ ๋‚ด์šฉ
member Member ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ์ž ์ •๋ณด (์ž‘์„ฑ์ž์˜ Member ๋ชจ๋ธ)
boardType String ๊ฒŒ์‹œํŒ ์œ ํ˜• (์˜ˆ: ์งˆ๋ฌธ, ์ผ๋ฐ˜ ๊ฒŒ์‹œํŒ ๋“ฑ)
createdAt DateTime ๊ฒŒ์‹œ๊ธ€ ์ƒ์„ฑ ์‹œ๊ฐ„
hashTags List ๊ฒŒ์‹œ๊ธ€ ๊ด€๋ จ ํ•ด์‹œํƒœ๊ทธ ๋ชฉ๋ก
likes List ๊ฒŒ์‹œ๊ธ€์— ๋Œ€ํ•œ ์ข‹์•„์š” ์ •๋ณด
  • likes: ๊ฐ ๊ฒŒ์‹œ๊ธ€์— ๋Œ€ํ•œ ์ข‹์•„์š” ์ •๋ณด๋กœ, ์—ฌ๋Ÿฌ ๋ช…์˜ ์‚ฌ์šฉ์ž๊ฐ€ ๊ฒŒ์‹œ๊ธ€์— ์ข‹์•„์š”๋ฅผ ๋ˆŒ๋ €์„ ๋•Œ ๊ทธ ์ •๋ณด๋ฅผ List ํƒ€์ž…์œผ๋กœ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.

4. Like (์ข‹์•„์š”)

๊ฒŒ์‹œ๊ธ€์— ๋Œ€ํ•œ ์ข‹์•„์š” ์ •๋ณด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค.

ํ•„๋“œ๋ช… ํƒ€์ž… ์„ค๋ช…
boardId String ๊ด€๋ จ ๊ฒŒ์‹œ๊ธ€์˜ ID
memberId String ์ข‹์•„์š”๋ฅผ ๋ˆ„๋ฅธ ๋ฉค๋ฒ„์˜ ID
  • ๊ฐ Like๋Š” ๊ฒŒ์‹œ๊ธ€ ID์™€ ๋ฉค๋ฒ„ ID๋ฅผ ์—ฐ๊ฒฐํ•˜์—ฌ, ์–ด๋–ค ๋ฉค๋ฒ„๊ฐ€ ์–ด๋–ค ๊ฒŒ์‹œ๊ธ€์— ์ข‹์•„์š”๋ฅผ ๋ˆŒ๋ €๋Š”์ง€ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

5. Comment (๋Œ“๊ธ€)

๊ฒŒ์‹œ๊ธ€์— ๋Œ€ํ•œ ๋Œ“๊ธ€์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค.

ํ•„๋“œ๋ช… ํƒ€์ž… ์„ค๋ช…
boardId String ๊ด€๋ จ ๊ฒŒ์‹œ๊ธ€ ID
memberId String ๋Œ“๊ธ€ ์ž‘์„ฑ์ž ID
createdAt DateTime ๋Œ“๊ธ€ ์ƒ์„ฑ ์‹œ๊ฐ„
content String ๋Œ“๊ธ€ ๋‚ด์šฉ
  • content: ์‚ฌ์šฉ์ž๊ฐ€ ์ž‘์„ฑํ•œ ๋Œ“๊ธ€ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.
  • createdAt: ๋Œ“๊ธ€์ด ์ž‘์„ฑ๋œ ์‹œ๊ฐ„์„ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.

6. HashTag (ํ•ด์‹œํƒœ๊ทธ)

๊ฒŒ์‹œ๊ธ€์ด๋‚˜ ๊ทธ๋ฃน์— ํƒœ๊ทธ๋œ ํ•ด์‹œํƒœ๊ทธ ์ •๋ณด๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

ํ•„๋“œ๋ช… ํƒ€์ž… ์„ค๋ช…
id String ํ•ด์‹œํƒœ๊ทธ์˜ ๊ณ ์œ  ์‹๋ณ„์ž
content String ํ•ด์‹œํƒœ๊ทธ ๋‚ด์šฉ
  • content: ํ•ด์‹œํƒœ๊ทธ ๋‚ด์šฉ (์˜ˆ: "#Flutter", "#DevLink")์„ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.

7. Timer (ํƒ€์ด๋จธ)

ํ•™์Šต์ด๋‚˜ ํ™œ๋™ ์‹œ๊ฐ„์„ ๊ธฐ๋กํ•˜๋Š” ํƒ€์ด๋จธ ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค.

ํ•„๋“œ๋ช… ํƒ€์ž… ์„ค๋ช…
memberId String ํƒ€์ด๋จธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฉค๋ฒ„ ID
minTime int ์ตœ์†Œ ์‹œ๊ฐ„ (๋ถ„ ๋‹จ์œ„)
totalTime int ์ด ์‚ฌ์šฉ ์‹œ๊ฐ„ (๋ถ„ ๋‹จ์œ„)
  • totalTime์€ ํƒ€์ด๋จธ๊ฐ€ ์ธก์ •ํ•œ ์ „์ฒด ์‹œ๊ฐ„์„ ๊ธฐ๋กํ•˜๋ฉฐ, minTime์€ ์ตœ์†Œ ์„ค์ • ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค.

8. Attendance (์ถœ์„)

๊ทธ๋ฃน ํ™œ๋™์— ๋Œ€ํ•œ ์ถœ์„ ์ •๋ณด๋ฅผ ๊ธฐ๋กํ•˜๋Š” ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค.

ํ•„๋“œ๋ช… ํƒ€์ž… ์„ค๋ช…
date DateTime ์ถœ์„ ๋‚ ์งœ (์˜ค๋Š˜/์–ด์ œ ๋“ฑ)
memberId String ์ถœ์„ํ•œ ๋ฉค๋ฒ„์˜ ID
time DateTime ์ถœ์„ ์‹œ๊ฐ„
  • date์™€ time์€ ๋ฉค๋ฒ„๊ฐ€ ํ™œ๋™์„ ์‹œ์ž‘ํ•œ ๋‚ ์งœ์™€ ์‹œ๊ฐ„์„ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.

9. Notification (์•Œ๋ฆผ)

์‚ฌ์šฉ์ž์—๊ฒŒ ์ „๋‹ฌ๋˜๋Š” ์•Œ๋ฆผ ์ •๋ณด๋ฅผ ๊ธฐ๋กํ•˜๋Š” ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค.

ํ•„๋“œ๋ช… ํƒ€์ž… ์„ค๋ช…
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

Loading

DTO ์„ค๊ณ„ ํ•„์š”์„ฑ

ํ˜„์žฌ ๊ฐœ์ˆ˜๋ฐฉ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์€ UI ๋ชจ๋ธ ๊ฐ์ฒด๋กœ ์„ค๊ณ„๋˜์–ด ์žˆ์œผ๋ฉฐ, ์ฃผ๋กœ ํ™”๋ฉด ๋ Œ๋”๋ง ๋ฐ ์‚ฌ์šฉ์ž ์ƒํ˜ธ์ž‘์šฉ๊ณผ ๊ด€๋ จ๋œ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ์ค‘์ ์„ ๋‘๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ **DTO(Data Transfer Object)**๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋˜๋Š” API์™€์˜ ๋ฐ์ดํ„ฐ ์ „์†ก์„ ์œ„ํ•œ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.

DTO ์„ค๊ณ„ ํ•„์š”์„ฑ:

  1. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ํ†ต์‹ : DTO๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ํ†ต์‹ ์—์„œ ๋‹จ์ˆœํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ๋ชจ๋ธ๋“ค์€ UI ๋ชจ๋ธ๊ณผ๋Š” ๋‹ฌ๋ฆฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ํฌํ•จํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๋‹จ์ˆœํ•œ ๋ฐ์ดํ„ฐ ์ „์†ก์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.
  2. ์™ธ๋ถ€ ์‹œ์Šคํ…œ๊ณผ์˜ ํ†ต์‹ : DTO๋Š” ์™ธ๋ถ€ ์‹œ์Šคํ…œ(์˜ˆ: REST API)๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ UI ๋ชจ๋ธ์€ ์™ธ๋ถ€ ์‹œ์Šคํ…œ๊ณผ์˜ ๋ฐ์ดํ„ฐ ์ „์†ก์„ ๊ณ ๋ คํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ์ด๋ฅผ ์œ„ํ•œ DTO ์„ค๊ณ„๊ฐ€ ์ถ”๊ฐ€์ ์œผ๋กœ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  3. ๋ณ€ํ™˜ ๋ฐ ์ง๋ ฌํ™”: DTO๋Š” JSON๊ณผ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ์ง๋ ฌํ™”๋˜๊ฑฐ๋‚˜ ์—ญ์ง๋ ฌํ™”๋ฉ๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ๋•Œ๋‚˜ ์™ธ๋ถ€ API์™€ ์—ฐ๊ฒฐ๋  ๋•Œ ํ•„์š”ํ•œ ๋ณ€ํ™˜ ์ž‘์—…์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๊ฐœ์ˆ˜๋ฐฉ ์•ฑ ํ”„๋กœ์ ํŠธ์—์„œ DTO ์„ค๊ณ„๋Š” ํ–ฅํ›„ ์™ธ๋ถ€ ์‹œ์Šคํ…œ๊ณผ์˜ ํ†ต์‹ ์„ ์œ„ํ•œ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ์ž‘์—…์€ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์˜ ํ™•์žฅ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๊ณ ๋ คํ•  ๋•Œ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

โš ๏ธ **GitHub.com Fallback** โš ๏ธ