Skip to content

๐Ÿ‘Ÿ ๐ŸŽฅ ์ฃผ์ฐจ๋ณ„ ์Šคํ”„๋ฆฐํŠธ ๊ณ„ํš & ๋ฐ๋ชจ ์‚ฌ์ดํŠธ

๊น€๊ด€๊ฒฝ edited this page Nov 28, 2022 · 13 revisions

2์ฃผ์ฐจ : ์ธํ”„๋ผ ์ž‘์—… & ํ…Œ์ŠคํŠธ API ์ˆ˜์‹  ํ™•์ธ

2์ฃผ์ฐจ ๋ฐ๋ชจ ์‹œ๋‚˜๋ฆฌ์˜ค

ํ…Œ์ŠคํŠธ ๋ชฉ์ ๊ณผ ์ƒํ™ฉ

  • ์„œ๋ฒ„ ๊ตฌ์„ฑ, CI / CD ๊ฐ™์€ ์ธํ”„๋ผ, API, DB ๋“ฑ ์„ค๊ณ„๋ฅผ ๋ณด์—ฌ์ฃผ๋ฉด ์–ด๋–จ๊นŒ? + ๊ณ๋“ค์—ฌ์„œ ๋””์ž์ธ ์ •๋„ (๋ ˆ์ด์•„์›ƒ ๋๋‚œ๋‹ค๋ฉด)
  • API ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ์„œ๋ฒ„๊ฐ€ ํ†ต์‹ ์ด ๋œ๋‹ค.

์‹œ๋‚˜๋ฆฌ์˜ค ์ง„ํ–‰์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ

  • API ๋ช…์„ธ
  • DB ERD
  • CI / CD ํŒŒ์ดํ”„๋ผ์ธ
  • ์„œ๋ฒ„ ์ธํ”„๋ผ ์‹œ๊ฐํ™” ์ž๋ฃŒ
  • ์•„๋ฌด๊ฑฐ๋‚˜ Mock API (CORS๋ž‘ ๊ด€๋ จ๋˜๋ฉด ์ข‹๊ฒ ๋‹ค.)
  • (๋ ˆ์ด์•„์›ƒ)

์‹œ๋‚˜๋ฆฌ์˜ค ์ง„ํ–‰์— ํ•„์š”ํ•œ ์กฐ๊ฑด

  • API ๋ช…์„ธ ์ž‘์„ฑ
  • DB ERD ์„ค๊ณ„
  • CI / CD ํŒŒ์ดํ”„๋ผ์ธ ์„ค๊ณ„
  • ์„œ๋ฒ„ ์ธํ”„๋ผ ๊ตฌ์ถ•
  • ์•„๋ฌด๊ฑฐ๋‚˜ Mock API ๊ตฌํ˜„
  • (๋ ˆ์ด์•„์›ƒ ๊ตฌํ˜„)

์‹œ๋‚˜๋ฆฌ์˜ค ์™„๋ฃŒ ์‹œ ๋ณด์žฅํ•˜๋Š” ๊ฒฐ๊ณผ

  • API ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ HTTP ํ†ต์‹ ์— ์„ฑ๊ณตํ•œ๋‹ค
  • MySQL ๋ฌผ๋ฆฌ์  ๋ฐ์ดํ„ฐ ๋ชจ๋ธ
  • ์ธํ”„๋ผ ์„œ๋ฒ„๋“ค (CI / CD)
  • (ํด๋ผ์ด์–ธํŠธ ํ™”๋ฉด)

2์ฃผ์ฐจ ์ž‘์—…๋‚ด์šฉ

๋ฐฑ์—”๋“œ

  • ๋ฐฑ์—”๋“œ : DB ์„ค๊ณ„
  • API ๋ช…์„ธ ์ž‘์„ฑ
  • API ์„œ๋ฒ„ ๋ฐฐํฌ
  • API ์„œ๋ฒ„ CI / CD
  • DB ์„œ๋ฒ„ ๋ฐฐํฌ
  • DB ์„œ๋ฒ„ CI / CD
  • ํ…Œ์ŠคํŠธ์šฉ API ๊ตฌํ˜„

ํ”„๋ก ํŠธ์—”๋“œ

  • ํŽ˜์ด์ง€ ๋””์ž์ธ
  • ํŽ˜์ด์ง€ ์„ค๊ณ„ (์ธํ„ฐ๋ž™์…˜, ์ปดํฌ๋„ŒํŠธ ์ถ”์ƒํ™”)
  • ํ”„๋ก ํŠธ์—”๋“œ ์„œ๋ฒ„ ๋ฐฐํฌ
  • ํ”„๋ก ํŠธ์—”๋“œ ์„œ๋ฒ„ CI / CD
  • ESLint, prettier, tsconfig ์„ค์ •ํ•˜๋ฉฐ ์ฝ”๋”ฉ ์Šคํƒ€์ผ ๋งž์ถ”๊ธฐ
  • ํŽ˜์–ดํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ ๊ด€๋ฆฌ์žํŽ˜์ด์ง€ ๊ตฌํ˜„ํ•˜๋ฉฐ ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ ์Šคํƒ€์ผ ์‹ฑํฌ ๋งž์ถ”๊ธฐ
  • ๋žœ๋”ฉ ํŽ˜์ด์ง€ ๊ตฌํ˜„
  • ํ…Œ์ŠคํŠธ์šฉ API ์ˆ˜์‹  ํ™•์ธ ๊ตฌํ˜„

3์ฃผ์ฐจ : ํ•ต์‹ฌ ๊ธฐ๋Šฅ ๊ตฌํ˜„

3์ฃผ์ฐจ ๋ฐ๋ชจ ์‹œ๋‚˜๋ฆฌ์˜ค

ํ…Œ์ŠคํŠธ ๋ชฉ์ ๊ณผ ์ƒํ™ฉ

  • ๊ธฐ์ˆ ์ ์ธ ๋„์ „์— ๋Œ€ํ•ด ๋‹ค์‹œ ์ดํ•ดํ•˜๊ณ , ํ•ต์‹ฌ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด์„œ ์ดˆ์ ์„ ์ƒˆ๋กญ๊ฒŒ ์žก์•˜๋‹ค.
  • ํ•ต์‹ฌ๊ธฐ๋Šฅ(๊ธฐ์ˆ ์ ์ธ ๋„์ „, ์˜ค๋ž˜ ๊ณ ๋ฏผ ๋ฐ ๊ฐœ์„  ํ•„์š”)์„ ๋จผ์ € ๊ตฌํ˜„ํ•˜์—ฌ ๋ฐ๋ชจ์— ์‚ฌ์šฉํ•˜๊ณ , ์ถ”ํ›„ ๋ณด์™„์„ ํ•ด์•ผํ•œ๋‹ค.

์‹œ๋‚˜๋ฆฌ์˜ค ์ง„ํ–‰์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ

  • ํ‚ค์›Œ๋“œ ๋ฐ์ดํ„ฐ (ํ‚ค์›Œ๋“œ, ๊ฐœ์ˆ˜, ์—ฐ๊ด€๊ด€๊ณ„)
  • ํ‚ค์›Œ๋“œ ์—ฐ๊ด€๊ด€๊ณ„ ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • ํ‚ค์›Œ๋“œ ์‹œ๊ฐํ™” ๋ฐฐ์น˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜

์‹œ๋‚˜๋ฆฌ์˜ค ์ง„ํ–‰์— ํ•„์š”ํ•œ ์กฐ๊ฑด

  • ์„ฑ๋Šฅ์„ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š๊ณ  & ํ‚ค์›Œ๋“œ ๊ฐ€์ค‘์น˜์— ๋”ฐ๋ฅธ ๋ณ€ํ™” ์—†์ด ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™” ๊ตฌํ˜„ (๊ฐœ์ˆ˜์— ๋”ฐ๋ผ์„œ๋งŒ)
  • ์„ฑ๋Šฅ์„ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š๊ณ  ํ‚ค์›Œ๋“œ ์ž๋™์™„์„ฑ (์ด๋ฏธ ์žˆ๋Š” ๋‹จ์–ด๋กœ ๋งž์ถฐ์คŒ)
  • ์„ฑ๋Šฅ์„ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š๊ณ  ํ‚ค์›Œ๋“œ ์ถ”์ฒœ ๊ตฌํ˜„ (ํ˜„์žฌ ๋‹จ์–ด์—์„œ ์ถ”์ฒœ)

์‹œ๋‚˜๋ฆฌ์˜ค ์™„๋ฃŒ ์‹œ ๋ณด์žฅํ•˜๋Š” ๊ฒฐ๊ณผ

  • ๊ธฐ์ดˆ์ ์ธ ์ˆ˜์ค€์ด๋ผ๋„ ์œ ์ €๊ฐ€ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

3์ฃผ์ฐจ ๊ฐฑ์‹ ๋œ Feature List

๊ณตํ†ต

  • ์ด๋ฒˆ์ฃผ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ API ๋ช…์„ธ ๊ฐฑ์‹ ํ•˜๊ธฐ

ํ”„๋ก ํŠธ์—”๋“œ

  • ๊ฐฑ์‹ ๋œ Feature List ํ† ๋Œ€๋กœ UI / UX ๋””์ž์ธ ๊ทธ๋ ค์„œ ๊ณต์œ ํ•˜๊ธฐ

  • ๊ทธ๋ฃน ํ‚ค์›Œ๋“œ ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™” (์›Œ๋“œ ํด๋ผ์šฐ๋“œ)

    โ‡’ ์ด๋ฒˆ ์ฃผ์˜ ํ”„๋ก ํŠธ์—”๋“œ ํ•ต์‹ฌ๊ธฐ๋Šฅ

  • ํ‚ค์›Œ๋“œ ์ž…๋ ฅ์‹œ ํ‚ค์›Œ๋“œ ์ž๋™์™„์„ฑ

    โ‡’ ๊ผญ ๊ฒ€์ƒ‰์ฐฝ์œผ๋กœ ์•ˆ๋„์›Œ๋„๋จ

  • ํ‚ค์›Œ๋“œ ์ž…๋ ฅ์‹œ ํ‚ค์›Œ๋“œ ์ถ”์ฒœ

    โ‡’ ๊ผญ ๊ฒ€์ƒ‰์ฐฝ์œผ๋กœ ์•ˆ๋„์›Œ๋„๋จ

  • ์ฐธ์—ฌ์ž์˜ ํ‚ค์›Œ๋“œ ๋ชฉ๋ก UI ๊ตฌํ˜„ (๋‚ด๊ฐ€ ๊ฐ€์ง„ ํ‚ค์›Œ๋“œ๋“ค)

๋ฐฑ์—”๋“œ

  • ํ‚ค์›Œ๋“œ(์†Œ๊ทธ๋ฃน) ์ถ”์ฒœ ์•Œ๊ณ ๋ฆฌ์ฆ˜

    โ‡’ ์ด๋ฒˆ ์ฃผ์˜ ๋ฐฑ์—”๋“œ ํ•ต์‹ฌ๊ธฐ๋Šฅ

  • Username ์ ‘์† ์‹œ ์ฟ ํ‚ค ๊ฐ’ ๋„˜๊ฒจ์ฃผ๊ธฐ

  • User ๋กœ๊ทธ์ธ ํ™•์ธ API

  • ํ‚ค์›Œ๋“œ(์†Œ๊ทธ๋ฃน) ์ƒ์„ฑ API

  • ํ‚ค์›Œ๋“œ(์†Œ๊ทธ๋ฃน)์— ์œ ์ € ์ง„์ž… ์‹œ, ํ‚ค์›Œ๋“œ(์†Œ๊ทธ๋ฃน) ์ฐธ์—ฌ์ž ์ˆ˜ ๊ฐฑ์‹ 

    โ‡’ ์ฐธ์—ฌ์ž ์ˆ˜๊ฐ€ ์žˆ์–ด์•ผ ์ดˆ๊ธฐ ์›Œ๋“œ ํด๋ผ์šฐ๋“œ๊ฐ€ ๊ฐ€๋Šฅํ•ด์šฉ

4์ฃผ์ฐจ : ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™” ์™„๋ฃŒ & ์‹ค์‹œ๊ฐ„ ์„œ๋ฒ„ ํ†ต์‹ 

ํ…Œ์ŠคํŠธ ๋ชฉ์ ๊ณผ ์ƒํ™ฉ

ํ…Œ์ŠคํŠธ ๋ชฉ์ 

  • ์„œ๋ฒ„ ํ†ต์‹ ์„ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ์ œ๊ณต๊ณผ ์‹œ๊ฐํ™”๊ฐ€ ์ œ๋Œ€๋กœ ๋˜๋Š”๊ฐ€?

ํ˜„์žฌ ์ƒํ™ฉ

  • ๋ฌผ๋ฆฌ์—”์ง„ ๋ฐฐ์น˜ ๊ณ„์‚ฐ๊ธฐ ๊ตฌํ˜„ ๋๋‚˜๊ฐ.
  • ์†Œ์ผ“ API ์„œ๋ฒ„ โ‡’ REST API ์„œ๋ฒ„๋กœ ์ด๋™

ํ…Œ์ŠคํŠธ ์ƒํ™ฉ

  • ๋ถ€์ŠคํŠธ์บ ํ”„ ์บ ํผ๋“ค์—๊ฒŒ ์ œ๊ณต

์‹œ๋‚˜๋ฆฌ์˜ค ์ง„ํ–‰์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ

  • ์‹ค์ œ ํ‚ค์›Œ๋“œ ๋ฐ์ดํ„ฐ (๋ฏธ๋ฆฌ ๋„ฃ์–ด๋‘๋Š”)

์‹œ๋‚˜๋ฆฌ์˜ค ์ง„ํ–‰์— ํ•„์š”ํ•œ ์กฐ๊ฑด

  • OAuth ๋กœ๊ทธ์ธ ๊ตฌํ˜„
  • ํ‚ค์›Œ๋“œ CRUD
  • ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”
  • short polling์„ ํ†ตํ•œ ์‹ค์‹œ๊ฐ„ ํ†ต์‹  ๊ตฌํ˜„
  • (์šฐ์„ ์ˆœ์œ„ ํ•˜) ์Šค๋ ˆ๋“œ CRUD์™€ UI

์‹œ๋‚˜๋ฆฌ์˜ค ์™„๋ฃŒ ์‹œ ๋ณด์žฅํ•˜๋Š” ๊ฒฐ๊ณผ

  • ๋ฐ๋ชจ ์‚ฌ์ดํŠธ MVP๋ฅผ ์บ ํผ๋“ค์ด ์ด์šฉ์ด ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์„œ๋ฒ„ ํ†ต์‹ ์ด ํฌํ•จ๋œ๋‹ค.
  • ๋กœ๊ทธ์ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • short polling์„ ํ†ตํ•ด ์‹ค์‹œ๊ฐ„ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

Feature List backlog ๋ณด์™„ ๋ฐ ๊ฐฑ์‹ 

โš ๏ธ ์ฒ˜์Œ ๋ฐฑ๋กœ๊ทธ ์„ค๊ณ„์™€ ๋งŽ์ด ๋‹ฌ๋ผ์ ธ์„œ github์˜ ๋ฐฑ๋กœ๊ทธ๋ฅผ ๋”ฐ๋ฆ„.

โ‡’ ์กฐ๊ธˆ ๋” ํฐ ๋ชฉํ‘œ๋ฅผ ์žก๊ณ  ์„ธ์„ธํ•œ ๊ฑด ์ดํ›„์— ์žก์•˜์–ด์•ผํ–ˆ๊ตฌ๋‚˜๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

ํ”„๋ก ํŠธ์—”๋“œ

  • ๋ฌผ๋ฆฌ์—”์ง„ ๋งˆ๋ฌด๋ฆฌ
  • short polling์„ ํ†ตํ•œ ์„œ๋ฒ„ ํ†ต์‹ 
  • ๋กœ๊ทธ์ธ์„ ์œ„ํ•œ ์ฒ˜๋ฆฌ
  • ์Šค๋ ˆ๋“œ UI ๊ตฌํ˜„ (์†Œ์ผ๊ฑฐ๋ฆฌ)

โ‡’ ๊ฐ ๋„๋ฉ”์ธ๊ณผ ๊ตฌํ˜„ ๋‹จ๊ณ„๋ณ„๋กœ ๋ช‡ ๊ณต์ˆ˜(MD)์ธ์ง€ ๋ฝ‘์•„๋ณด๊ธฐ

๋ฐฑ์—”๋“œ

  • REST API ์ „์ฒด
    • ๊ฐ ๋„๋ฉ”์ธ๋ณ„ CRUD
    • OAuth
    • (์–ด๋ ค์šด ๊ฒƒ) ํ‚ค์›Œ๋“œ ๋ณต์ˆ˜ ๊ฐœ์˜ ๋ณ‘ํ•ฉ๊ณผ ์‚ญ์ œ

โ‡’ ๊ฐ ๋„๋ฉ”์ธ๊ณผ ๊ตฌํ˜„ ๋‹จ๊ณ„๋ณ„๋กœ ๋ช‡ ๊ณต์ˆ˜(MD)์ธ์ง€ ๋ฝ‘์•„๋ณด๊ธฐ

๐Ÿ˜ ์™€๊ธ€์™€๊ธ€

์™€๊ธ€์™€๊ธ€ ์†Œ๊ฐœ

๐Ÿ–๏ธ์™€๊ธ€์™€๊ธ€ ์†Œ๊ฐœ

๐Ÿ‘จโ€โš–๏ธํŒ€ undefined ๊ทธ๋ผ์šด๋“œ ๋ฃฐ

๐Ÿ“œ์™€๊ธ€์™€๊ธ€ ๊ธฐํš์„œ (์™ธ๋ถ€ ๋งํฌ)

๐Ÿ’กํŒ€ undefined์˜ ๋ฉˆ์ถ”์ง€ ์•Š๋Š” ์•„์ด๋””์–ด ๋ฑ…ํฌ

๐Ÿ“„ํŒ€ undefined ๋…ธ์…˜

๐Ÿš ๊ธฐ์ˆ ์  ๋„์ „๋“ค

๊ณตํ†ต

๐Ÿ“Š๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜์˜ ๊ทผ๊ฑฐ์žˆ๋Š” ์„ฑ๋Šฅ ๊ฐœ์„ 

๐Ÿ—ฃ๏ธ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ๋ฐœ์ „ํ•ด๋‚˜๊ฐ€๊ธฐ

ํ”„๋ก ํŠธ์—”๋“œ

๐Ÿ“บ์ง์ ‘ ๋งŒ๋“  ๋ฌผ๋ฆฌ์—”์ง„์œผ๋กœ ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™” ํ•˜๊ธฐ

๐Ÿ”Trie ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํ†ตํ•œ ์ž๋™์™„์„ฑ ๊ฒ€์ƒ‰์—”์ง„ ๊ตฌํ˜„

โฉ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•œ ์„ฑ๋Šฅ ๊ฐœ์„ 

๐Ÿ“ฝ๏ธUX๋ฅผ ๊ณ ๋ คํ•œ ์Šคํฌ๋กค ์• ๋‹ˆ๋ฉ”์ด์…˜

๋ฐฑ์—”๋“œ

๐Ÿ“ถ์‹ค์‹œ๊ฐ„ ์„œ๋น„์Šค ๋„์ „๊ธฐ

โš—๏ธํ…Œ์ŠคํŠธ ์ฝ”๋“œ์™€ ๋‹จ๋‹จํ•œ ์ฝ”๋“œ ๊ตฌ์กฐ

๐Ÿ’พORM๊ณผ ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ ์œ ์ง€ํ•˜๊ธฐ

๐Ÿ“ˆJPA๋ฅผ ํ™œ์šฉํ•œ ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ ์ฆ๋Œ€ํ•˜๊ธฐ

๊ฐœ๋ฐœ ์ผ์ง€

โš ๏ธํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…

๐Ÿซ๋ฉ˜ํ† ๋ง ์ผ์ง€

๐Ÿ‘Ÿ์ฃผ์ฐจ๋ณ„ ์Šคํ”„๋ฆฐํŠธ

โœ…๋ฐ์ผ๋ฆฌ ์Šคํฌ๋Ÿผ

๐Ÿค”์ฃผ๊ฐ„ ํšŒ๊ณ 

Clone this wiki locally