๐2์ฐจ ์คํ๋ฆฐํธ - prgrms-web-devcourse-final-project/WEB4_5_GAEPPADAK_BE GitHub Wiki
๊ฐ์
- ๊ธฐ๊ฐ: 2025๋ 5์ 9์ผ(๊ธ) - 5์ 20์ผ(ํ)
- ๋ชฉํ: ์ฐ์ ์์
๋์
์ ๊ธฐ๋ฅ ์์ฑ - ํ ๊ตฌ์ฑ: ๋ฐฑ์๋ 6์ธ, ํ๋ก ํธ 1์ธ
์ค์ฝํ
์คํ๋ฆฐํธ IN / OUT
์ฐ์ ์์ | ๊ธฐ๋ฅ | ํฌํจ ์ฌ๋ถ | ๋น๊ณ |
---|---|---|---|
๋์ |
์ค์๊ฐ ํฌ์คํธ ์กฐํ API ์ค๋ฅ ํด๊ฒฐ | IN |
GET /posts/top API |
๋์ |
LLM ๊ธฐ๋ฐ ํฌ์คํธ ์์ฑ | IN |
์ฌ๋ฌ AI ๋น๊ต ๋์ |
๋์ |
ํ์ ์ ๋ณด ์์ ๋ฐ ๋น๋ฐ๋ฒํธ ์ด๊ธฐํ | IN |
- |
๋์ |
ํ์ ํํด | IN |
soft delete ์ ์ฉ |
๋์ |
ํค์๋ ๊ฒ์ | IN |
FE ์ฃผ๋ |
๋์ |
๊ด๋ฆฌ์ ๊ถํ ๊ธฐ๋ฅ | IN |
RBAC |
์ค๊ฐ |
๋๊ธ ๋ฐ ํฌ์คํธ ์ ๊ณ ๊ธฐ๋ฅ | IN |
FE-์ ๊ณ ๋ฒํผ / BE-API ์ถ๊ฐ |
์ค๊ฐ |
๊ด๋ฆฌ์ โ ํ์ยท๋๊ธยทํฌ์คํธยท์ ๊ณ ๊ด๋ฆฌ | IN |
ํตํฉ Admin API |
์ค๊ฐ |
์ค์ผ์ค๋ฌ ๋ก์ง ๋ฐ ์์ ์ฑ ๊ฐํ | IN |
์ ๊ท์ฑ ํ๊ฐ ๋ก์ง ์ถ๊ฐ ๋ฐ Job Context ๊ฒํ |
์ค๊ฐ |
๋ก๊ทธ ๋ชจ๋ํฐ๋ง ๋์๋ณด๋ | IN |
Grafana + Prometheus + Sentry ๊ฒํ |
๋ฎ์ |
OUT |
์ฐจ๊ธฐ ๊ฒํ | |
๋ฎ์ |
OUT |
์ฐจ๊ธฐ ๊ฒํ |
์์ธ ์์ ๋ชฉ๋ก
Epic | ์ฐ์ ์์ | ์ค๋ช | ๋ด๋น์ | SP |
---|---|---|---|---|
๋ฐฑ๋ก๊ทธ | ๋์ |
์ค์๊ฐ ํฌ์คํธ ์กฐํ(GET /posts/top ) ์ค๋ฅ ํด๊ฒฐ |
์ดํ๊ฒฝ | 8 |
๋์ |
์๋ฒ ์๊ฐ๋ ๊ธฐ์ค์ UTC๋ก ํต์ผ | ์ดํ๊ฒฝ | 4 | |
์ค๊ฐ |
์ค์ผ์ค๋ฌ - ํค์๋ ์ ๊ท์ฑ ํ๊ฐ ๋ก์ง | ์ค์๋ฏผ | 16 | |
์ค๊ฐ |
์ค์ผ์ค๋ฌ ์์ ์ฑ ๊ฐํ | ์ดํ์ | 16 | |
๋ฎ์ |
flyway migration ์ ์ฉ ํ์ธ | ์ดํ์ | 8 | |
AI ๊ธฐ๋ฅ | ๋์ |
ํค์๋ ๊ธฐ๋ฐ์ผ๋ก AI๊ฐ ํฌ์คํธ ๋ฅผ ๋ด์ฉ์ ์์ฝํด ์์ฑ |
์ดํ๊ฒฝ, ๊นํ์ฐ, ์ค์๋ฏผ | 24 |
ํ์ ๊ธฐ๋ฅ | ๋์ |
ํ์ ์ ๋ณด ์์ | ์ค์๋ฏผ | 8 |
๋์ |
๋ก๊ทธ์ธ ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ/์ด๊ธฐํ | ๊น๊ฒฝ๋ | 8 | |
๋์ |
ํ์ ํํด(soft delete ํ์) | ๊นํ์ฐ | 16 | |
๊ฒ์ ๊ธฐ๋ฅ | ๋์ |
ํค์๋ ๊ฒ์ ๊ธฐ๋ฅ | FE๋ | 0(FE) |
์ ๊ณ ๊ธฐ๋ฅ | ์ค๊ฐ |
๋๊ธ ์ ๊ณ ๊ธฐ๋ฅ | ์ดํ์ | 4 |
์ค๊ฐ |
ํฌ์คํธ ์ ๊ณ ๊ธฐ๋ฅ | ์ดํ์ | 4 | |
๊ด๋ฆฌ์ ๊ธฐ๋ฅ | ๋์ |
๊ด๋ฆฌ์ ๊ถํ ๊ธฐ๋ฅ | ์ดํ์, ๊น๊ฒฝ๋, ๊นํ์ฐ, ์ดํ๊ฒฝ, ์ดํ์ | 8 |
์ค๊ฐ |
๊ด๋ฆฌ์ - ํ์ ๊ด๋ฆฌ | ์ดํ์ | 4 | |
์ค๊ฐ |
๊ด๋ฆฌ์ - ๋๊ธ ์ ๊ณ ๊ด๋ฆฌ | ์ดํ์ | 4 | |
์ค๊ฐ |
๊ด๋ฆฌ์ - ํฌ์คํธ ๊ด๋ฆฌ | ์ดํ์ | 4 | |
์ค๊ฐ |
๊ด๋ฆฌ์ - ํฌ์คํธ ์ ๊ณ ๊ด๋ฆฌ | ์ดํ์ | 4 | |
๋ชจ๋ํฐ๋ง | ์ค๊ฐ |
๋ชจ๋ํฐ๋ง ๊ฐ๋ฐ ๋ฐ ๋ฐฐํฌ ์๋ฒ ์ ์ฉ | ๊น๊ฒฝ๋ | 16 |
์ค๊ฐ |
์๋ฒ ๋ก๊ทธ ๋ชจ๋ํฐ๋ง | ์ดํ์ | 16 |
Story Point(SP) ํฉ๊ณ โ 172 ( ํ ๊ธฐ์ค 6๋ช ร 5์ผ ร ํ๋ฃจ 6์๊ฐ = 180ยฑ10 ๋ด์ธ โ ์ ์ )
์ฌ์ฉ์ ์คํ ๋ฆฌ
์์ธ ์์ ๋ชฉ๋ก ๊ธฐ๋ฐ ์คํ ๋ฆฌ ์์ฑ
์ฌ์ฉ์ ๊ตฌ๋ถ | Epic | User Story |
---|---|---|
์ฌ์ฉ์ | ๋ฐฑ๋ก๊ทธ | ์ฌ์ฉ์๋, ์ค๋ฅ ์์ด ์ค์๊ฐ ์ธ๊ธฐ ํฌ์คํธ๋ฅผ ์กฐํํ์ฌ ์ต์ ์ด์๋ฅผ ๋์น์ง ์์ ์ ์๋ค. |
AI ๊ธฐ๋ฅ | ์ฌ์ฉ์๋, ํค์๋๋ณ ๋ด์ค๋ฅผ AI๊ฐ ์์ฝํ ํฌ์คํธ ๋ก ์ฝ์ด์ ํต์ฌ๋ง ๋น ๋ฅด๊ฒ ํ์
ํ ์ ์๋ค. |
|
๊ฒ์ ๊ธฐ๋ฅ | ์ฌ์ฉ์๋, ๊ฒ์์ฐฝ์ ํค์๋๋ฅผ ์ ๋ ฅํ๋ฉด ๊ด๋ จ๋(๋๋ ์ ์ฌ์ฑ์ด ๋์) ํฌ์คํธ ๋ฐ ์ฐ๊ด ์ถ์ฒ๊ฐ ๋ฆฌ์คํธ๋ก ํ์๋์ด ํ๋์ ์ต์ ์ ๋ณด๋ฅผ ํ์ธํ ์ ์๋ค. | |
ํ์ ๊ธฐ๋ฅ | ๋ก๊ทธ์ธํ ํ์์, ๋ด ํ๋กํ ์ ๋ณด(๋๋ค์)์ ์์ ํ์ฌ ์ต์ ์ํ๋ก ์ ์งํ ์ ์๋ค. | |
๋ก๊ทธ์ธํ ํ์์, ๋น๋ฐ๋ฒํธ๋ฅผ ์์์ ๋ ์ด๋ฉ์ผ๋ก ์ด๊ธฐํ ๋งํฌ๋ฅผ ๋ฐ์ ์ฌ์ค์ ํ ์ ์๋ค. | ||
๋ก๊ทธ์ธํ ํ์์, ๊ณ์ ์ ํํด(soft delete)ํ ์ ์๊ณ ๋ฐ์ดํฐ๋ ์ฆ์ ์ํธํ ๋ฐ ์จ๊น ์ฒ๋ฆฌ๋๋ค. | ||
์ ๊ณ ๊ธฐ๋ฅ | ๋ก๊ทธ์ธํ ํ์์, ๋ถ์ ์ ํ ๋๊ธ์ ์ ๊ณ ํ์ฌ ์ปค๋ฎค๋ํฐ ์ง์ ์งํฌ ์ ์๋ค. | |
๋ก๊ทธ์ธํ ํ์์, ํ์ ์ ๋ณด ํฌ์คํธ๋ฅผ ์ ๊ณ ํ์ฌ ์ด์์์ ๊ฒํ ๋ฅผ ์์ฒญํ ์ ์๋ค. | ||
๊ด๋ฆฌ์ ๊ธฐ๋ฅ | ๊ด๋ฆฌ์๋, ๊ด๋ฆฌ์ ๋์๋ณด๋์ ์ ๊ทผํ์ฌ ์ด์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋ค. | |
๊ด๋ฆฌ์๋, ํ์ ๋ชฉ๋ก์ ์กฐํํ๊ณ ๋ธ๋/ํํด ์ฒ๋ฆฌ๋ก ๊ด๋ฆฌํ ์ ์๋ค. | ||
๊ด๋ฆฌ์๋, ๋๊ธ ์ ๊ณ ๋ชฉ๋ก์ ๋ณด๊ณ ๋ธ๋/๊ธฐ๊ฐ ์ฒ๋ฆฌ๋ฅผ ํ์ฌ ์ปค๋ฎค๋ํฐ ์ง์ ์งํฌ ์ ์๋ค. | ||
๊ด๋ฆฌ์๋, ํฌ์คํธ ์ ๊ณ ๋ชฉ๋ก์ ์กฐํํ๊ณ ์ญ์ ์ฒ๋ฆฌํ์ฌ ํ์ ์ปจํ ์ธ ๋ฅผ ์ ๊ฑฐํ ์ ์๋ค. | ||
๊ฐ๋ฐ์ | ๋ฐฑ๋ก๊ทธ | ๊ฐ๋ฐ์๋, ์ ํ๋ฆฌ์ผ์ด์ โยทโDBโยทโAPI ์๋ต์ ์๊ฐ๋๋ฅผ UTC๋ก ํต์ผํ์ฌ TZ ํท๊ฐ๋ฆผ์ ๋ฐฉ์งํ ์ ์๋ค. |
๊ฐ๋ฐ์๋, ํค์๋ ์ ๊ท์ฑ ํ๊ฐ ๋ก์ง์ Batch์ ํฌํจํ์ฌ ์ค๋ณต๋ ํฌ์คํธ ์์ฑ๊ณผ ์์๋ญ๋น๋ฅผ ๋ฐฉ์งํ ์ ์๋ค. | ||
๊ฐ๋ฐ์๋, ์ค์ผ์ค๋ฌ ์ค๋จ ์์/์ฌ์๋ ๋ฐ ์๋ฆผ ๋ก์ง์ ๋ณด๊ฐํ์ฌ ์ฅ์ ๋ฐ์ ์ ๋น ๋ฅด๊ฒ ๋ณต๊ตฌํ ์ ์๋ค. | ||
๊ฐ๋ฐ์๋, flyway migration ์ด๋ ฅ์ CI์์ ๊ฒ์ฆํ์ฌ ์คํค๋ง ๋ถ์ผ์น๋ฅผ ์ฌ์ ์ ๋ฐฉ์งํ ์ ์๋ค. | ||
AI ๊ธฐ๋ฅ | ๊ฐ๋ฐ์๋, ๋ ๊ฐ์ง ์ด์์ LLM(Gemini, OpenAI, ํด๋ก๋) ๊ฒฐ๊ณผ๋ฅผ ๋น๊ตํ์ฌ ๋ ๋์ ๋ชจ๋ธ์ ์ ์ ํ ์ ์๋ค. | |
๊ด๋ฆฌ์ ๊ธฐ๋ฅ | ๊ฐ๋ฐ์๋, RBAC ๊ธฐ๋ฐ์ผ๋ก ์ญํ ๋ณ API๋ฅผ ์ ์ดํ์ฌ ๊ถํ ์ค์ฉ์ ์ฐจ๋จํ ์ ์๋ค. | |
๋ชจ๋ํฐ๋ง | ๊ฐ๋ฐ์๋, Grafana ๋์๋ณด๋์์ API TPS/์๋ฌ์จ/์๋ต์๊ฐ์ ์ค์๊ฐ ์๊ฐํํ์ฌ ์ด์ ์งํ๋ฅผ ์ฆ์ ํ์ ํ ์ ์๋ค. | |
๊ฐ๋ฐ์๋, ๋ก๊ทธ ๋์๋ณด๋์์ ์ค๋ฅ ๋ก๊ทธ๋ฅผ ์ฝ๊ฒ ํ์ธํ๊ณ ๋น ๋ฅด๊ฒ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค. |
UX/UI ํ๋ฆ
FigJam ๋งํฌ: [https://www.figma.com/board/T9dM5oVh1Gox1FVbHDyriL/๊ฐ๋น ๋ญ?node-id=0-1&t=C0XgNWHPw076Q9sj-1](https://www.figma.com/board/T9dM5oVh1Gox1FVbHDyriL/%EA%B0%9C%EB%B9%A0%EB%8B%AD?node-id=0-1&t=C0XgNWHPw076Q9sj-1)
- 2์ฐจ ์คํ๋ฆฐํธ ํต์ฌ ํ๋ฉด
- ํ์ ์ ๋ณด (์์ ๋ฐ ํํด)
- ํค์๋ ๊ฒ์ ์ปดํฌ๋ํธ ์ถ๊ฐ
- ์ ๊ณ ํ์ - ์ฌ์ ์ ํ & ์ ์ถ
- ๊ด๋ฆฌ์ ํ์ด์ง (ํ์/ํฌ์คํธ/๋๊ธ ์ ๊ณ ๊ด๋ฆฌ)
API ๋ช ์ธ
[์ ๋ชฉ ์์](https://www.notion.so/1f13550b7b558077bd42c2c6295b16ad?pvs=21)
ํ ์คํธ ์ ๋ต
1. ๋จ์(Unit) ํ ์คํธ
Service
์ค์ฌ: ๋น์ฆ๋์ค ๋ก์ง์ด ์ง์ค๋ ๊ณ์ธต- ์ธ๋ถ ์์กด์ฑ์ Mock ์ฒ๋ฆฌ
2. ํตํฉ(Integration) ํ ์คํธ
- ์ค์ Bean๊ณผ ์๋ฒ ๋๋ H2 ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ๊ฒฝ์ ํตํด ๊ฒ์ฆ
Controller
E2E ํ ์คํธ ์ค์ฌ- Query ๊ฒ์ฆ์ด ํ์ํ ๊ฒฝ์ฐ
Respository
ํ ์คํธ๋ ํฌํจ
3. Code Coverage
- Line Coverage >
70%
์ด์ - Branch Coverage >
50%
์ด์ - CI ํ์ดํ๋ผ์ธ ์ฐ๋
QA ํตํฉ ํ ์คํธ ์๋๋ฆฌ์ค
- ์ค์ ์ฌ์ฉ์ ํ๋ก์ฐ๋ฅผ ๊ณ ๋ คํ
์๋๋ฆฌ์ค
ํ ์คํธ๋ก ํ์ฅ- ์: ํ์ ๊ฐ์ โ ์ธ์ฆ โ ํค์๋ ๊ตฌ๋ โ ํธ๋ ๋ ํ์ธ ๋ฑ์ ์ผ๋ จ์ ํ๋ ํ๋ฆ
- ํนํ, ์ ์ ๋์์ฑ ๋ฐ API ํธ์ถ ๊ฒฝ์ ์ํฉ ๋ฑ ์ค์ ์๋น์ค ํ๊ฒฝ์์์ Edge Case๋ ํฌํจ
๋ชฉ์ : ๊ธฐ๋ฅ๋ณ API๊ฐ ์๋ ์ฌ์ฉ์ ๊ด์ ์ ํ๋ก์ฐ ๊ธฐ๋ฐ QA ์ฒด๊ณ๋ฅผ ๊ตฌ์ถํ์ฌ ์ค์ง์ ์ธ ๋ฒ๊ทธ๋ฅผ ์ฌ์ ์ ๋ฐฉ์ง
[์ ๋ชฉ ์์](https://www.notion.so/1f13550b7b5580008145f8e192c02a5b?pvs=21)
๊ฒฐ๊ณผ
Definition of Done (DoD)
- ๋ก๊ทธ/์์คํ ๋ชจ๋ํฐ๋ง ๋์๋ณด๋
- ๋ชจ๋ Story โ Unit & Integration ํ ์คํธ ํต๊ณผ
- QA ํตํฉ ์๋๋ฆฌ์ค Pass์จ 100%
- ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง ๊ธฐ์ค ํต๊ณผ(๋ผ์ธ 70%, ๋ถ๊ธฐ 50%)
- Swagger ๋ฌธ์ ์ต์ ํ ๋ฐ JSON ์ถ์ถ
- ๋ฐฐํฌ Tag
v2.0.0
ํ๊ณ
-
๐ ์ํ ์
-
๐ค ์์ฌ์ด ์
-
๐ง ๊ฐ์ ํ ์
-
๐ ๋ค์ ์ก์
Next Actions
- Hourly Keyword/Post Cache (Redis, CDN)
- ๋ชจ๋ํฐ๋ง์์ ๋์๋ณด๋/ํจ๋ ์ถ๊ฐ
- Keyword์ priority
STANDARD
,REALTIME
์ ๊ตฌ๋ถ โ ์ค์ผ์ค๋ฌ ์ฃผ๊ธฐ ๋ถ๋ฆฌ - S2S PoC