๐Ÿ–Š๏ธ ์™€๊ธ€์™€๊ธ€ ๊ธฐํš๋ฌธ์„œ - boostcampwm-2022/web17-waglewagle GitHub Wiki

์™€๊ธ€์™€๊ธ€ ๋””์ž์ธ ๋ณด๋Ÿฌ๊ฐ€๊ธฐ

์™€๊ธ€์™€๊ธ€ ๊ธฐ์ˆ  ๋ช…์„ธ์„œ

์ปค๋ฎค๋‹ˆํ‹ฐ(50 ~ 300๋ช…)๋ฅผ ์œ„ํ•œ ์†Œ๊ทธ๋ฃน ๋ฉ”์ดํ‚น์„ ๋•๋Š” ํ‚ค์›Œ๋“œ ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™” ์„œ๋น„์Šค

์ž‘์„ฑ์ž: ๊น€๊ด€๊ฒฝ

์ž‘์„ฑ์ผ: 2022๋…„ 11์›” 10์ผ

์ตœ์ข…์ˆ˜์ •์ผ: 2022๋…„ 11์›” 10์ผ

๋‹จ๊ณ„: Draft > Review required > Reviewed > Approved

๋ฆฌ๋ทฐ์–ด: ๊น€๋Œ€ํ˜ธ, ๋ฌธ์„ฑํ˜„, ์ด์Šน๋ฏผ

Approvals: ๊น€๋Œ€ํ˜ธ, ๋ฌธ์„ฑํ˜„, ์ด์Šน๋ฏผ, ๊น€๊ด€๊ฒฝ

Issue Tracker: Github

์š”์•ฝ (Summary)

์ปค๋ฎค๋‹ˆํ‹ฐ ๋‚ด์—์„œ ๊ณตํ†ต ๊ด€์‹ฌ์‚ฌ๋ฅผ ๊ฐ€์ง„ ์‚ฌ๋žŒ๋“ค์„ ์‰ฝ๊ฒŒ ์ด์–ด์ฃผ๊ธฐ ์œ„ํ•ด์„œ ์„ ํƒ๋œ ํ‚ค์›Œ๋“œ๋กœ ๊ทธ๋ฃนํ™”ํ•ด์ฃผ๋Š” ์‹œ๊ฐํ™” ์„œ๋น„์Šค

๋ฐฐ๊ฒฝ (Background)

๋ถ€์ŠคํŠธ์บ ํ”„์—์„œ ๋ถ€์ŠคํŠธ์‚ด๋กฑ์„ ์—ฌ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ, ์ปค๋ฎค๋‹ˆํ‹ฐ๋‚ด์—์„œ ์†Œ๊ทธ๋ฃน์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๋ถˆํŽธํ–ˆ๋‹ค. ์ด๊ฑธ ์‰ฝ๊ฒŒํ•ด์ค„ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์„๊นŒ?

๋ชฉํ‘œ (Goals)

  • ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ์œ ์ €๊ฐ€ ์ž์‹ ์˜ ํ‚ค์›Œ๋“œ๋ฅผ ์ •ํ•˜๊ณ , ํ‚ค์›Œ๋“œ๊ฐ€ ๊ณต์œ ๋˜๋Š” ๊ณตํ†ต ๊ด€์‹ฌ์‚ฌ๋ฅผ ๊ฐ€์ง€๋Š” ์†Œ๊ทธ๋ฃน์„ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
    • ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”์™€ ์‹œ๊ฐํ™” ์ž๋ฃŒ์˜ ์ธํ„ฐ๋ž™์…˜ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๊ตฌํ˜„ํ•œ๋‹ค.
    • ๋ Œ๋”๋ง ์†๋„๋ฅผ ์ˆ˜์น˜ํ™” ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ…Œ์ŠคํŠธํ•˜๊ณ , ๋ Œ๋”๋ง์„ ์ตœ์ ํ™”ํ•œ๋‹ค.
  • ๋กœ๊ทธ์ธ์€ OAuth๋กœ ๊ตฌํ˜„ํ•œ๋‹ค.
  • ์œ ์ €๋Š” ๋ฉ€ํ‹ฐํ”„๋กœํ•„ ์„ค์ •์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์†Œ๊ทธ๋ฃน์—์„œ๋Š” ์Šค๋ ˆ๋“œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
  • ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ ๋ฐ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•œ๋‹ค.
  • ๋ฐฑ์—”๋“œ ์ŠคํŠธ๋ ˆ์Šค ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ณ  ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•œ๋‹ค.
    • ์‹ ํ•™๊ธฐ, ์—ฐ์ดˆ ๋“ฑ ๊ทผ๊ฑฐ์žˆ๋Š” ํŠธ๋ž˜ํ”ฝ ๊ณผ๋ถ€ํ™” ๊ฐ€์ •ํ•œ๋‹ค.
  • ๋ฐฐํฌ๊ณผ์ •์„ ์‰ฝ๊ฒŒ ํ•˜์—ฌ ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜์„ ๋†’์ด๊ณ , ๋ฐฐํฌ ์ธก์ • ์‹œ๊ฐ„์„ ์ค„์ธ๋‹ค.
    • ๋นŒ๋“œ ์‹œ๊ฐ„ ์ธก์ • ๋ฐ ๊ฐœ์„ 
    • CI / CD ์ ์šฉ
  • ๋ฏธ๋””์–ด ์ž์› ์„œ๋น™ ์†๋„๋ฅผ ๊ฐœ์„ ํ•œ๋‹ค. (ํฐํŠธ, ํ”„๋กœํ•„ ์‚ฌ์ง„)

๋ชฉํ‘œ๊ฐ€ ์•„๋‹Œ ๊ฒƒ (Non-Goals)

  • ์ œํ’ˆ ๋””์ž์ธ์€ ํŠน๋ณ„ํžˆ ๊ณ ๋ คํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ๊ธฐํš์˜ ์‹คํ˜„ ๊ฐ€๋Šฅ์„ฑ์— ๋Œ€ํ•ด์„œ๋Š” ํŠน๋ณ„ํ•˜๊ฒŒ ๊ณ ๋ คํ•˜์ง€ ์•Š๋Š”๋‹ค. (ex. ๊ณตํ†ต ํ‚ค์›Œ๋“œ ๊ทธ๋ฃน์— ์‹ค์ œ๋กœ ์‚ฌ๋žŒ๋“ค์ด ๋ชจ์ผ ๊ฒƒ์ธ๊ฐ€?)
  • ์†Œ๊ทธ๋ฃน ๋ณ„ ์Šค๋ ˆ๋“œ๋Š” ํ•ต์‹ฌ์ ์œผ๋กœ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋ฃนํ™”์˜ ๋ถ€๊ฐ€๊ธฐ๋Šฅ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ •๋„๋กœ ๊ตฌํ˜„ํ•œ๋‹ค.
  • ๋กœ๊ทธ์ธ ๋ณด์•ˆ๋ถ€๋ถ„์€ ๊นŠ๊ฒŒ ๊ณ ๋ฏผํ•˜์ง€ ์•Š๋Š”๋‹ค.

๊ณ„ํš (Plan)

  • ํ•ต์‹ฌ ๊ธฐ๋Šฅ

    ๋žœ๋”ฉ ํŽ˜์ด์ง€(์†Œ๊ฐœ UI)

    ํ™ˆ ํŽ˜์ด์ง€(์ปค๋ฎค๋‹ˆํ‹ฐ ์ถ”๊ฐ€, ์ดˆ๋Œ€ ์ฝ”๋“œ ๋ฐœ๊ธ‰)

    ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”(๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”, ํ‚ค์›Œ๋“œ ์ถ”๊ฐ€ ์‚ญ์ œ)

    ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€(์œ ์ € ๊ด€๋ฆฌ, ํ‚ค์›Œ๋“œ ๊ด€๋ฆฌ)

    ์Šค๋ ˆ๋“œ ํŽ˜์ด์ง€(์Šค๋ ˆ๋“œ CRUD, ๋Œ“๊ธ€ CRUD)

    ์ธ์ฆ ๋ชจ๋‹ฌ(๋กœ๊ทธ์ธ, ํšŒ์›๊ฐ€์ž…) - ๊ณตํ†ต

  • W1 - ๊ธฐํš

  • W2 - ๊ฐœ๋ฐœ

    • FE - ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ธํŒ…(Create Next App), ํด๋ผ์ด์–ธํŠธ ์„œ๋ฒ„ CI / CD ๋ฐฐํฌ, ํ”„๋กœํ† ํƒ€์ž… ์ œ์ž‘
    • BE - ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ธํŒ…, ๊ฐœ๋ฐœ์šฉ Mock ์„œ๋ฒ„ ๋ฐฐํฌ, DB ์„ค๊ณ„, ํ‚ค์›Œ๋“œ CRUD API ๋ช…์„ธ ์ž‘์„ฑ, ํ‚ค์›Œ๋“œ CRUD API ๊ตฌํ˜„
  • W3 - ๊ฐœ๋ฐœ

    • FE - ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”
    • BE - ๋กœ๊ทธ์ธ API ๋ช…์„ธ ์ž‘์„ฑ ๋ฐ ๊ตฌํ˜„, ์Šค๋ ˆ๋“œ API ๋ช…์„ธ ์ž‘์„ฑ ๋ฐ ๊ตฌํ˜„
  • W4 - ๊ฐœ๋ฐœ - ๋ฐ๋ชจ ๋ฐฐํฌ(4์ฃผ์ฐจ ๋๋‚˜๊ณ )

    • FE - ์Šค๋ ˆ๋“œ ํŽ˜์ด์ง€, ๋žœ๋”ฉ ํŽ˜์ด์ง€, ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€
    • BE - ์ปค๋ฎค๋‹ˆํ‹ฐ CRUD API ๋ช…์„ธ ์ž‘์„ฑ ๋ฐ ๊ตฌํ˜„, ์ปค๋ฎค๋‹ˆํ‹ฐ์— ์œ ์ € CRUD API ๋ช…์„ธ ์ž‘์„ฑ ๋ฐ ๊ตฌํ˜„, CI / CD ์„œ๋ฒ„ ๋ฐฐํฌ
  • W5 - ๊ฐœ๋ฐœ

    • FE - ๋ Œ๋”๋ง, ์ •์  ์ž์› ์ œ๊ณต ํ…Œ์ŠคํŠธ ๋ฐ ์ตœ์ ํ™”
    • BE - ๋ถ€ํ•˜ํ…Œ์ŠคํŠธ, ์„œ๋ฒ„ ๊ฐœ์„ 
  • W6 - ๋ฆฌํŒฉํ† ๋ง / ํ…Œ์ŠคํŠธ / QA

    • FE - ๋ฆฌํŒฉํ† ๋ง / ํ…Œ์ŠคํŠธ / QA
    • BE - ๋ฆฌํŒฉํ† ๋ง / ํ…Œ์ŠคํŠธ / QA

์ž„ํŒฉํŠธ ์ธก์ • (Measuring Impact) - ํ•˜๋ฉด์„œ ์ •ํ•˜๊ธฐ

  • ์„ฑ๋Šฅ
    • ๋ผ์ดํŠธ ํ•˜์šฐ์Šค?
    • ๋ Œ๋”๋ง ์†๋„?
  • ํ’ˆ์งˆ
    • ํ…Œ์ŠคํŠธ ์ฝ”๋“œ?
    • ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€?
    • ์ˆ˜์ • ํ™•์žฅ์ด ์šฉ์ดํ•œ๊ฐ€? โ‡’ ์ˆ˜์น˜ํ™”๊ฐ€ ๊ฐ€๋Šฅํ• ๊นŒ? (์ •์  ๋ถ„์„ ๋„๊ตฌ๊ฐ€ ์ด๊ฑธ๊นŒ? SonarLint)
  • ๋™์‹œ์ ‘์†๋Ÿ‰
    • ํ•œ ๊ทธ๋ฃน ์ตœ๋Œ€ ์ธ์›?
    • ํ•œ ๊ทธ๋ฃน ์ตœ๋Œ€ ํ‚ค์›Œ๋“œ ์‹œ๊ฐํ™”?
    • ์ดˆ๊ธฐ ์„ ํƒ ๋ชจ๋‹ฌ์—์„œ ์ตœ๋Œ€ ํ‚ค์›Œ๋“œ ๊ฐฏ์ˆ˜?
  • ๋ฐฐํฌ ์„ฑ๋Šฅ
    • ๋ฐฐํฌ ์ž๋™ํ™” ๊ฐ€๋Šฅ ์œ ๋ฌด
    • ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ์ง€์› ์—ฌ๋ถ€ (๋ฐฐํฌ ํ™˜๊ฒฝ์˜ ์œ ์—ฐ์„ฑ)
    • ๋ฐฐํฌ ์›Œํฌ ํ”Œ๋กœ์šฐ์˜ ๋‹จ๊ณ„ ์ˆ˜ (๊ฐ„์†Œํ™” ์ •๋„)
    • ๋ฐฐํฌ ์†๋„ (๋นŒ๋“œ ๋“ฑ)

๊ธฐํƒ€ ๊ณ ๋ ค์‚ฌํ•ญ (Other Considerations)

  • ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”๋Š” ์›Œ๋“œ ํด๋ผ์šฐ๋“œ๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ, ํ‚ค์›Œ๋“œ ์ถ”๊ฐ€ ์‚ญ์ œ์— ๋”ฐ๋ฅธ ์ธํ„ฐ๋ž™์…˜์€ ๋ถ€๊ฐ€๊ธฐ๋Šฅ์œผ๋กœ ์ƒ๊ฐํ•œ๋‹ค.
  • ํ™”์ƒ์ฑ„ํŒ… ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Œ.
  • ๋งˆ์ด ํŽ˜์ด์ง€์—์„œ ๊ทธ๋™์•ˆ ์ถ•์ ํ•œ ํ‚ค์›Œ๋“œ๋ฅผ ์—ด๋žŒํ•  ์ˆ˜ ์žˆ๋‹ค. - ์œ ์ € ์ดํƒˆ ์ค„์ด๊ธฐ, ๋ฐฑ์—”๋“œ ๊ณผ๋ถ€ํ•˜ ์ฒ˜๋ฆฌ, SSR + SSG
  • ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€์˜ ์ค‘์š”๋„๋Š” ๋†’์ง€ ์•Š๋‹ค.
    • ๊ทธ๋ฃน ์œ ์ €์˜ ์—ญํ• ์€ ์ผ๋‹จ ์œ ์ €, ์†Œ์œ ์ž๋งŒ ๋‚˜๋ˆˆ๋‹ค.
    • ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€์˜ ํ†ต๊ณ„

๋งˆ์ผ์Šคํ†ค (Milestones)

  • ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™” ๊ตฌํ˜„
  • ์ฐธ์—ฌ์ž์˜ ํ‚ค์›Œ๋“œ ์ถ”๊ฐ€ ์‚ญ์ œ ๊ตฌํ˜„
  • ๋กœ๊ทธ์ธ / ๋กœ๊ทธ์•„์›ƒ ๋ฐ ๊ด€๋ฆฌ์ž ๊ธฐ๋Šฅ
  • ์ปค๋ฎค๋‹ˆํ‹ฐ ์ƒ์„ฑ ๋ฐ ์ปค๋ฎค๋‹ˆํ‹ฐ ๋งํฌ ๊ณต์œ 
  • ๋ถ€์ŠคํŠธ์บ ํ”„์— ๋ฐ๋ชจ๋ฒ„์ ผ ๋ฐฐํฌ
  • ๊ทธ๋ฃน ๋ณ„ ์Šค๋ ˆ๋“œ ์ƒ์„ฑ ๊ธฐ๋Šฅ

๋ฐฐํฌ ๊ณ„ํš (Deployment plan)

  • ๋„ค์ด๋ฒ„ ํด๋ผ์šฐ๋“œ์— ๋ฐฐํฌ
    • Github Actions์„ ํ†ตํ•ด CI / CD๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
    • ํŒจํ‚ค์ง€๋“ค์€ Docker๋กœ ๊ด€๋ฆฌํ•œ๋‹ค.
  • Nginx๋ฅผ ํ†ตํ•ด์„œ ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ์—๋Š” HTTPS ์ ์šฉํ•œ๋‹ค.
  • Client, DB, API, ์ด๋ฏธ์ง€ ์„œ๋ฒ„๋ฅผ ๋ถ„๋ฆฌํ•œ๋‹ค.
  • pm2๋ฅผ ํ†ตํ•ด์„œ ๋ฐฐํฌ ํ›„์˜ ์„œ๋ฒ„๋ฅผ ์œ ์ง€ํ•œ๋‹ค.
  • sentry๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์—๋Ÿฌ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.

๊ด€๋ จ ํ”„๋กœ์ ํŠธ (Related projects)

  • Slack - ๋ฒค์น˜๋งˆํ‚น
  • Slido - ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”
  • ๋„ค์ด๋ฒ„ ์นดํŽ˜ - ์†Œ๊ทธ๋ฃน