22.11.07. - boostcampwm-2022/web24-Asnity GitHub Wiki

1์ฃผ์ฐจ์— ์‚ฐ์ถœํ•ด์•ผํ•˜๋Š” ๋ฌธ์„œ ์ •๋ฆฌ

๊ฐœ๋ฐœ ๋ฌธ์„œ

  • README.md
    • ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ, ์œ„ํ‚ค ๋งํฌ, ๋ฐ๋ชจ ๋งํฌ, ์ฃผ์š” ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์†Œ๊ฐœ, ๊ธฐ์ˆ  ์Šคํƒ, ์•„ํ‚คํ…์ฒ˜, ๊ทธ ์™ธ(์šฐ๋ฆฌ๊ฐ€ ๊ณต์œ ํ•  ๋งŒํ•œ ๊ฒฝํ—˜๋“ค), ํŒ€์› ์†Œ๊ฐœ
  • ๊ธฐํš์„œ
  • Feature List
    • ๊ธฐ๋Šฅ ์š”๊ตฌ์‚ฌํ•ญ ๋ฌธ์„œ=์ œํ’ˆ ๋ฐฑ๋กœ๊ทธ
    • ํ•ต์‹ฌ ๊ธฐ์ˆ  ์š”๊ตฌ์‚ฌํ•ญ
  • API, ERD(๋ชจ๋ธ๋ง)
  • ํ”ผ๊ทธ๋งˆ(๋””์ž์ธ, ํ”„๋กœํ† ํƒ€์ž…)
  • ํ”„๋ก ํŠธ-๋ฐฑ์—”๋“œ ๊ตฌ์กฐ(์•„ํ‚คํ…์ฒ˜)
  • ๊ธฐ์ˆ  ์Šคํƒ

๊ณ„ํš

  • ์ „์ฒด ๊ณ„ํš
  • ์Šคํ”„๋ฆฐํŠธ ๋ฐฑ๋กœ๊ทธ(์ฃผ์ฐจ๋ณ„)

๊ทธ๋ผ์šด๋“œ ๋ฃฐ

  • ํŒ€ ๋ฃฐ
  • ์ฝ”๋”ฉ ์ปจ๋ฒค์…˜
  • GitHub branch ์ „๋žต
  • GitHub commit ์ปจ๋ฒค์…˜
  • GitHub Issue ์ปจ๋ฒค์…˜
  • GitHub PR ์ปจ๋ฒค์…˜

ํšŒ๊ณ 

  • ๋ฐ์ผ๋ฆฌ ์Šคํฌ๋Ÿผ
  • ์ผ์ผ ํšŒ๊ณ 
  • ์ฃผ์ฐจ ํšŒ๊ณ 
  • ํ”ผ์–ด์„ธ์…˜
  • ๋ฉ˜ํ† ๋‹˜๊ณผ์˜ ๋ฏธํŒ…
  • ํ† ๋ก , ๊ธฐ์ˆ  ๋…ผ์˜(์™œ ๊ทธ ๊ธฐ์ˆ ์„ ์„ ์ •ํ–ˆ๋Š”๊ฐ€)
  • ๋งํฌ ๋ชจ์Œ

๋ฐœํ‘œ ์ž๋ฃŒ

  • ๊ณต์œ  ๋ฐœํ‘œ์ž๋ฃŒ
  • ๋ฐ๋ชจ์˜์ƒ

์˜ค๋Š˜ ํ•  ๊ฒƒ

  • ์šฐ๋ฆฌ๊ฐ€ ๋””์Šค์ฝ”๋“œ ํด๋ก ์ฝ”๋”ฉ์ธ๊ฑด ๋งž์ง€๋งŒ ๋ฌด์Šจ ์ปจ์…‰์ธ์ง€ ๊ธฐํš์˜๋„๊ฐ€์—†๋‹ค.
    • ์•ผ์Šค๋‹ˆํ‹ฐ๊ฐ€ ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋‹ˆ๊นŒ ์–ด๋–ค ์ปค๋ฎค๋‹ˆํ‹ฐ์ธ๊ฐ€์— ๋Œ€ํ•œ๊ฑธ ์ •ํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.
    • ๊ทค์ด๋‹ˆ๊นŒ ๊ฐ™์ด ์•‰์•„์„œ ๊ทค๊นŒ๋จน์œผ๋ฉด์„œ ์ด์•ผ๊ธฐํ•ด์š”.. ์ด๋Ÿฐ๊ฑฐ
  • ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์ƒ์„ฑ
  • ์˜ค๋Š˜ ์Šคํฌ๋Ÿผ ๊ธฐ๋ก
  • ๋ฌธ์„œ ํ…œํ”Œ๋ฆฟ ์ž‘์„ฑํ•˜๊ธฐ ํ…œํ”Œ๋ฆฟ ๋ชจ์Œ
  • ๊ทธ๋ผ์šด๋“œ ๋ฃฐ ์ •ํ•˜๊ธฐ
  • ํŒ€ ๋ฃฐ
  • ์ฝ”๋”ฉ ์ปจ๋ฒค์…˜ โ†’ ๊ฐœ๋ฐœํ™˜๊ฒฝ ์„ค์ •ํ•  ๋•Œ ์ž‘์„ฑํ•˜๊ธฐ
  • GitHub commit ์ปจ๋ฒค์…˜
  • GitHub Contribution ์ปจ๋ฒค์…˜: .github์— ํ…œํ”Œ๋ฆฟ ๋งŒ๋“ค๊ฒƒ์ž„
    • GitHub Issue ์ปจ๋ฒค์…˜
    • GitHub PR ์ปจ๋ฒค์…˜
  • GitHub branch ์ „๋žต
  • 1์ฃผ์ฐจ ์Šคํ”„๋ฆฐํŠธ ๋ฐฑ๋กœ๊ทธ -> ์ œํ’ˆ ๋ฐฑ๋กœ๊ทธ ์™„์„ฑ ์•ˆํ–ˆ์Œ
  • ์ œํ’ˆ ๋ฐฑ๋กœ๊ทธ (์™„์„ฑ์€ ์•„๋‹์ˆ˜๋„)

github description ๋ญ๋กœ ํ• ๊นŒ์š”

  • ๋„ˆ ์™œ ๊ทค๋จน์œผ๋Ÿฌ ์•ˆ์™”์–ด? ๐Ÿ‘๐Ÿ‘ ์ดˆ๋Œ€๋ฅผ ์•ˆํ•ด์คฌ๋Š” ๋ฐ ์–ด๋–ป๊ฒŒ ๊ฐ€์š”?
  • ๊ฐ™์ด ๊ฐ๊ทค ๋จน์„๋ž˜? ๐Ÿ‘
  • ๊ฐ™์ด ๊ทค ๊นŒ ๋จน์„๋ž˜?

GitHub branch ์ „๋žต ์ •ํ•˜๊ธฐ

  • main: deploy
  • dev: ๊ฐœ๋ฐœ
    • fe
    • be
  • release๊ฐ€ ๋ฐฐํฌ ์—ฐ๋™๋˜์–ด์žˆ๋Š”์ง€
  • ์™œ main์ด๋ž‘ release ๊ตฌ๋ถ„ํ•˜๋Š”์ง€? main์€ ํƒœ๊ทธ๋งŒ ๋‹ฌ๋˜๋ฐ

https://techblog.woowahan.com/2553/

ํ‹ฐ์ผ“, ๋ฐฑ๋กœ๊ทธ โ†’ ์ด์Šˆํ•˜๋‚˜๋‹น ๋ธŒ๋žœ์น˜ ํ•˜๋‚˜ ๋‹น PR ํ•˜๋‚˜

์˜ˆ) ๋ชจ๋‹ฌ์„ ๋งŒ๋“ค์ž!

  1. main ๋ธŒ๋žœ์น˜ ์žˆ์Œ
  2. main์œผ๋กœ๋ถ€ํ„ฐ dev ๋ธŒ๋žœ์น˜๋ฅผ ํŒ๋‹ค.
  3. dev๋กœ๋ถ€ํ„ฐ dev-frontend ๋ธŒ๋žœ์น˜๋ฅผ ํŒ๋‹ค.
  4. dev-frontend์œผ๋กœ๋ถ€ํ„ฐ feature/modal ๋ธŒ๋žœ์น˜๋ฅผ ํŒ๋‹ค.
  5. feature/modal ๋กœ๋ถ€ํ„ฐ issue#1/loayout ๋ธŒ๋žœ์น˜๋ฅผ ํŒ๋‹ค.
  6. issue#1/loayout์—์„œ ๋งŒ๋“ ๋‹ค. ์ปค๋ฐ‹ํ•œ๋‹ค. ํ‘ธ์‰ฌํ•œ๋‹ค.
  7. feature/modal๋กœ issue#1/loayout์˜ ์ปค๋ฐ‹์— ๋Œ€ํ•œ PR ๋‚ ๋ฆฐ๋‹ค. ์ฝ”๋“œ๋ฆฌ๋ทฐ๋ฐ›๋Š”๋‹ค. rebase๋กœ ๋จธ์ง€ ๋ˆŒ๋Ÿฌ์ค€๋‹ค.
  8. local๊ณผ remote์— ์žˆ๋Š” issue#1/loayout ๋ธŒ๋žœ์น˜ ์ง€์šด๋‹ค.
  9. local origin ์— ์žˆ๋Š” feature/modal๋กœ remote origin ์— ์žˆ๋Š” feature/modal์˜ ์ตœ์‹  ์ปค๋ฐ‹(rebase merge๋œ ์ปค๋ฐ‹) ๋•ก๊ฒจ์˜จ๋‹ค.
  10. local origin์— ์žˆ๋Š” feature/modal ๊ฐœ๋ฐœ ๋‹ค ๋๋‚จ.
  11. dev-frontend๋กœ feature/modal ์ปค๋ฐ‹์— ๋Œ€ํ•œ PR ๋‚ ๋ฆฐ๋‹ค. ๊ทธ๋ƒฅ merge(์•„๋‹ˆ๋ฉด ์ปค๋ฐ‹ ์ค„์ด๊ณ  ์‹ถ์œผ๋ฉด squash)
  12. localorigin์— ์žˆ๋Š” dev-frontend๋กœ remote origin์— ์žˆ๋Š” dev-frontend์˜ ์ตœ์‹  ์ปค๋ฐ‹ ๋•ก๊ฒจ์˜จ๋‹ค.
  13. dev-frontend์™€ dev-backend ๊ฐœ๋ฐœ ์™„๋ฃŒ
  14. dev๋กœ dev-frontend, dev-backend PR๋ณด๋‚ด๊ณ  ํ™•์ธ๋ฐ›๊ณ  ๊ทธ๋ƒฅ merge
  15. main๋กœ dev PR๋ณด๋‚ด๊ณ  ํ™•์ธ๋ฐ›๊ณ  ๊ทธ๋ƒฅ merge

๊ทผ๋ฐ ๋ชจ๋…ธ ๋ ˆํฌ๋ผ์„œ ํ”„๋ก ํŠธ๋ž‘ ๋ฐฑ์—”๋“œ ๋ฆด๋ฆฌ์ฆˆ ๋ธŒ๋žœ์น˜ ๋”ฐ๋กœ ํŒŒ์•ผํ•˜๋‚˜?

-> GitHub Branch ์ „๋žต

๋ฌผ์–ด๋ณผ ๊ฒƒ

  • git-flow์— ๋Œ€ํ•ด์„œ ์–ด๋–ป๊ฒŒ ์ดํ•ดํ•˜๋Š”์ง€ ๊ณต์œ 
  • git-flow์—์„œ rebase์™€ squash ์–ธ์ œ ์‚ฌ์šฉํ•˜๋Š”์ง€
  • ํ”„๋ก ํŠธ๋ž‘ ๋ฐฑ์—”๋“œ ๋”ฐ๋กœ ๋ฐฐํฌํ•˜๋Š” ๊ฒฝ์šฐ ๋ฆด๋ฆฌ์ฆˆ์šฉ ๋ธŒ๋žœ์น˜๋Š” ํ•˜๋‚˜? ๋‘ ๊ฐœ?

๋‚˜์ค‘์— ํ•ด๋ณผ ๊ฒƒ/ ์กฐ์‚ฌํ•ด๋ณผ ๊ฒƒ

  • ์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…
  • ์ฑ„ํŒ… redis์— ๋„ฃ๊ธฐ?
  • ์ธ์ฆ ๋ฐฉ์‹ ๊ฒฐ์ •ํ•˜๊ธฐ(local์ด๋ž‘ oauth, ํ† ํฐ์ด๋ž‘ ์„ธ์…˜)
  • socket์ด๋ž‘ api ์„œ๋ฒ„ ๋ถ„๋ฆฌํ•  ๊ฒƒ์ด๋ฏ€๋กœ nest ๊ฐ์ž ๋นŒ๋“œํ•ด์•ผํ•จ

์ฐธ๊ณ 

  • ์ œ์•ˆ์‚ฌํ•ญ

    ์–ด๋–ค ์˜์‚ฌ ๊ฒฐ์ •์„ ๋‚ด๋ฆฌ๊ฑฐ๋‚˜ ๊ธฐ์ˆ ์„ ์ƒˆ๋กœ ๋ฐฐ์šฐ๋ฉด์„œ ๊ฒช์—ˆ๋˜ ๋ฌธ์ œ๋“ค์„ ๋‚จ๊ฒจ๋‘๋ฉด ์ข‹์„ ๊ฒƒ๊ฐ™๋‹ค.

    ์™œ๋ƒ๋ฉด ์ด๋Ÿฐ๊ฑธ ๊ทธ๋•Œ๊ทธ๋•Œ ์ ์–ด๋‘์ง€ ์•Š์œผ๋ฉด, ์‹œ๊ฐ„์ด ์ง€๋‚ ์ˆ˜๋ก ๊ฒฐ๊ณผ๋งŒ ๋‚จ๊ณ  ๊ณผ์ •์ด ํ๋ฆฟํ•ด์ง€๊ธฐ ๋•Œ๋ฌธ

    ๋‚ด๊ฐ€ ํ•™์Šต ์Šคํ”„๋ฆฐํŠธ๋ฅผ ํ•˜๋ฉด์„œ ์‚ฌ์šฉํ–ˆ๋˜ ์˜ˆ์‹œ (์‚ฌ์‹ค ๋‹ค๋ฅธ ๊ฒƒ๋“ค์€ ๋” ์งง๊ฒŒ ์ผ๋Š”๋ฐ ์ž์„ธํžˆ ์ ์ง€์•Š์•„๋„ ๊ทธ ๋‹น์‹œ ์‚ฌ๊ณ ์˜ ํ๋ฆ„์„ ๊ธฐ๋กํ•ด๋‘๋Š” ๊ฒƒ์ด ๋ชฉ์ )

์˜์‚ฌ๊ฒฐ์ • ์˜ˆ์‹œ(๊ถŒ๋‚˜์˜)

์–ด๋–ค ๊ตฌ์กฐ๋กœ ๋งŒ๋“ค ๊ฒƒ์ธ๊ฐ€?

  1. ์ฒ˜์Œ ์ƒ๊ฐ

    • SPA๋ฅผ ์ €๋ฒˆ์— ์จ๋ณด์ง€ ์•Š์•˜์œผ๋‹ˆ, SPA๋กœ ๋งŒ๋“ค์ž.
    • ๋‚˜๋Š” SSR์„ ์ง€ํ–ฅํ•˜๋‹ˆ๊นŒ SSR๋กœ ๋งŒ๋“ค๋ฉด ๋˜๊ฒ ๋‹ค!
  2. ๋ฌธ์ œ ๋ฐ ๊ถ๊ธˆ์ฆ

    • ๊ทผ๋ฐ MVC ๋ชจ๋ธ์„ ๊ฐ€์ง€๊ณ  ๊ฐ€๋ฉด์„œ ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค์ง€?
    • Single page๋ฉด ์„œ๋ฒ„์—์„œ ์–ด๋–ป๊ฒŒ ์•Œ์•„์„œ ๋ณด๋‚ด์ค„ ์ˆ˜ ์žˆ์ง€?
    • webpack๊นŒ์ง€ ๋ผ์—ฌ์žˆ์œผ๋‹ˆ๊นŒ, ๋ฒˆ๋“ค์€ ์–ด๋””์— ์ƒ์„ฑํ•ด์ค˜์•ผํ•˜์ง€?
    • ๋ผ์šฐํ„ฐ ๋ณ„๋กœ ์ถ”์ƒํ™”๋ฅผ ํ•ด์ฃผ์–ด์•ผํ• ๊นŒ?
  3. ํ•™์Šต ๋ฐ ํ•ด๊ฒฐ ๊ณผ์ •

    • SPA๋Š” ๋Œ€๋ถ€๋ถ„ SSR๋ณด๋‹ค CSR์„ ์ ์šฉํ•˜์—ฌ ๋งŽ์ด ์“ฐ๋‹ˆ๊นŒ ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋Š” SPA+ CSR๋กœ ๊ฒฐ์ •

    • CSR์˜ ๊ฒฝ์šฐ Model๋งŒ Server์ด๊ณ  View , Controller ๋Š” Client์—์„œ ์ฒ˜๋ฆฌํ•œ๋‹ค.

      • SSR, CSR์„ ์ฐพ์•„๋ณด๋‹ค๊ฐ€ ์ด ๋ธ”๋กœ๊ทธ์˜ ๊ทธ๋ฆผ์„ ๋ณด๊ณ  ์‹ค๋งˆ๋ฆฌ๋ฅผ ์žก์•˜๋‹ค.
    • webpack์€ ์šฐ์„  dist์— ๋‹ค ๋ชจ์•„๋‘๊ณ  ๋ฐฐํฌํ• ๋•Œ๋Š” webpack ๋นŒ๋“œ๋ฅผ ๋”ฐ๋กœ ํ•œ ๋‹ค์Œ์— ์‹คํ–‰ํ•˜๋„๋ก ํ–ˆ๋‹ค.

    • ๋ผ์šฐํ„ฐ ๋ณ„ ์ถ”์ƒํ™”

  4. ๊ฒฐ๋ก  ๋ฐ ์ƒ๊ฐ

    • SPA๋กœ ๊ตฌํ˜„ํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์œผ๋‚˜, ์‚ฌ์‹ค Header ๊ฒ€์ƒ‰๋ฐ”๋‚˜ ๊ณ„์ •์ •๋ณด ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ๊ณตํ†ต์ธ๋ฐ ์—”ํŠธ๋ฆฌ ์ฝ”๋“œ์—์„œ ๋งŒ๋“ค์–ด๋‘๊ณ  article๋งŒ ๊ฐˆ์•„๋ผ์šฐ๋Š” ๊ฒƒ์ด ๋” ์ข‹์€ ๋ฐฉ์‹์ธ ๊ฒƒ ๊ฐ™๋‹ค (๋‘๋ฒˆ ์งธ ์ฝ”๋“œ๋ฆฌ๋ทฐ)
    • CSR๋กœ ํ•ด๋ณด๋‹ˆ, ๋˜ SSR์€ ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ•˜๋Š” ๊ฑด์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค..

์›น ํ”„๋ก ํŠธ์— Observer Pattern ์ ์šฉํ•˜๊ธฐ

  1. ์ฒ˜์Œ ์ƒ๊ฐ
    • ์ƒํƒœ๊ฐ€ ๋ณ€ํ•˜๋ฉด rendering ๋‹ค์‹œํ•˜๋Š”๊ฒŒ ์ „์— ํ•œ๊ฑฐ๋ž‘ ๋™์ผํ•œ ์ด์น˜์•„๋‹Œ๊ฐ€?
    • ์ผ๋‹จ ๊ณต๋ถ€ํ•ด๋ณด๊ณ  ๋‹ค์‹œ ์ƒ๊ฐํ•˜์ž.
  2. ๋ฌธ์ œ ๋ฐ ๊ถ๊ธˆ์ฆ
    • ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ ๊ตณ์ด observer pattern์„ ์ ์šฉํ•ด์•ผํ•˜๋Š” ์ด์œ ๋ฅผ ๋ชจ๋ฅด๊ฒ ๋‹ค.
  3. ํ•™์Šต ๋ฐ ํ•ด๊ฒฐ ๊ณผ์ •
    • ๋‚ด๊ฐ€ ์˜๋ฌธ์„ ๊ฐ€์ง„ ์ƒ๊ฐ์ด ๋”ฑ ์žˆ์—ˆ๊ณ  ์ค‘์•™ ์ง‘์ค‘์‹ ์ €์žฅ์†Œ๋ฅผ ๊ด€๋ฆฌํ•  ๋•Œ ํšจ๊ณผ์  ์ด๋ผ๋Š” ๋ง์ด ๋”ฑ ์žˆ๋‹ค.
    • ๊ทธ๋ ‡๋‹ค๋ฉด, ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์˜ SPA ์—์„œ Homeโ†’Categoryโ†’Home ์ด๋ ‡๊ฒŒ ํ™”๋ฉด์„ ๋ฐ”๊ฟ”์ค„ ๋•Œ ๋งˆ๋‹ค ๊ณ„์† ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜๋ฉด Server์— ๋ถ€๋‹ด์ด ๋“ค์–ด์„œ ์“ด๋‹ค๊ณ  ์ƒˆ๋ฒฝ 3์‹œ 27๋ถ„์— ํ˜ผ์ž ์ถ”๋ก 
  4. ๊ฒฐ๋ก  ๋ฐ ์ƒ๊ฐ
    • ๋‹ค์Œ๋‚  ์ผ์–ด๋‚˜์„œ ์ƒ๊ฐํ•˜๊ณ  ์กฐ์›๋“ค๊ณผ ํ† ๋ก  ํ•œ ๋‚ด์šฉ
      • Component Level์˜ ์ƒํƒœ ๊ด€๋ฆฌ
        • component level ์ƒํƒœ ๊ด€๋ฆฌ์˜ ๊ฒฝ์šฐ ํ•˜์œ„ component๊ฐ€ ์ฆ๊ฐ€ํ•˜๊ฒŒ ๋˜๋ฉด, ํ•ด๋‹น ์ƒํƒœ๋ฅผ ์กฐ์ƒ์ด ๋ฐ›์•„์˜ค๊ธฐ ์œ„ํ•ด์„œ๋Š”๋งŽ์€ callback์ด ์ด๋ฃจ์–ด์ ธ์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฒˆ๊ฑฐ๋กญ๋‹ค.
        • Observer pattern์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์ค‘์•™ ์ง‘์ค‘์‹ ์ €์žฅ์†Œ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ๋•Œ๋ฌธ์— ํ›จ์”ฌ ์šฉ์ดํ•˜๋‹ค.
      • Observer? Pub-Sub?
        • Observer๋Š” 1:N์˜ ๊ด€๊ณ„, Pub-Sub๋Š” M:N์˜ ๊ด€๊ณ„๋ฅผ ๊ฐ€์ง„๋‹ค.
        • ๊ทธ๋Ÿฌ๋‚˜ ๋ณดํ†ต observer pattern์„ ์“ด๋‹ค๊ณ  ํ•˜๋ฉด ์ค‘์•™ ๊ด€๋ฆฌ์ž๊ฐ€ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ํ•ด์ค€๋‹ค๋Š” super-set์˜ ์˜๋ฏธ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.