๐ŸŽค ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ธํŒ… ํšŒ์˜ - boostcampwm-2022/web33-Mildo GitHub Wiki

1. ๊ฐœ์š”

  1. ์ผ์‹œ ๋ฐ ์žฅ์†Œ : 11.15.(ํ™”) 11:30 ~ 16:00, ๊ฒŒ๋”ํƒ€์šด ๋ฐ ๋ผ์ด๋ธŒ ์‰์–ด
  2. ์ฐธ์—ฌ์ž : ์ „์›
  3. ๋ชฉ์  : live share๋กœ ํ•จ๊ป˜ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ์œ„ํ•œ ์„ธํŒ… ์ง„ํ–‰
  4. ํšŒ์˜ ์ค‘์š”๋„ : ์ค‘

2. ๊ธฐ์ˆ  ์Šคํƒ

2.1. ํ”„๋ก ํŠธ์—”๋“œ ์Šคํƒ

  • ํ”„๋ก ํŠธ์—”๋“œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ : react
  • ํ”„๋ก ํŠธ์—”๋“œ ๋ผ์šฐํ„ฐ : react-router-dom
  • ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ : jotai
  • ์Šคํƒ€์ผ : styled-components

2.2. ๋ฐฑ์—”๋“œ ์Šคํƒ

  • ๋ฐฑ์—”๋“œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ : koa
  • ๋ฐฑ์—”๋“œ ๋ผ์šฐํ„ฐ : koa-router
  • DB odm : mongoose
    • MongoDB ํด๋ผ์šฐ๋“œ ์‚ฌ์šฉํ•˜์—ฌ DB ๊ณต์œ 
  • nodemon

2.3. ๊ณตํ†ต

  • axios
    • FE์— ์šฐ์„ ์ ์œผ๋กœ ์„ค์น˜
  • dotenv
  • eslint
  • prettier

3. ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ธํŒ…

3.1. client

  • react ํ™˜๊ฒฝ์€ create-react-app(typescript)์œผ๋กœ ๊ตฌ์„ฑ
    • src์—์„œ App.tsx, index.tsx๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋ถˆํ•„์š”ํ•œ ๊ธฐ๋ณธ ํŒŒ์ผ ์‚ญ์ œ

3.2. server

  • nodemon์€ ๊ฐœ๋ฐœ์ž ์˜์กด์„ฑ ์„ค์น˜
    • yarn ๊ฐœ๋ฐœ์ž ์˜์กด์„ฑ ์„ค์น˜ ๋ฐฉ๋ฒ• โ†’ yarn add [package_name] --dev
  • server๋„ ts ์‚ฌ์šฉํ•  ๊ฒƒ์ธ์ง€?
    • ์ƒ์ค€ : FE์—์„œ ts๋กœ ํƒ€์ž…์„ ๊ฒ€์‚ฌํ•˜๋Š”๋ฐ, BE์—์„œ๋„ ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ํƒ€์ž…์„ ๊ฒ€์‚ฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Œ
    • ํ˜„์ • : client์™€ server๋ฅผ ๋ถ„๋ฆฌํ•ด์„œ ์ž‘์—…ํ•˜๋‹ˆ ์–ธ์–ด์˜ ์ผ๊ด€์„ฑ์€ ์ค‘์š”ํ•˜์ง€ ์•Š๊ณ , ํ˜‘์—… ์‹œ ํƒ€์ž…์„ ๋งž์ถฐ์•ผ ํ•˜๋‹ˆ๊นŒ ts๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Œ
  • koa๋„ express์ฒ˜๋Ÿผ ์ œ๋„ˆ๋ ˆ์ดํ„ฐ๊ฐ€ ์žˆ๋Š”์ง€?
    • ์—†์–ด์„œ ์ˆ˜๋™์œผ๋กœ ๊ตฌ์กฐ ์žก์•„์•ผํ•จ
      • ์ด์Šˆ ๋ถ„๋ฐฐํ•˜๊ณ  ํŽ˜์–ด๋กœ ์ง„ํ–‰

3.3. ๊ณตํ†ต

  • node ๋ฒ„์ „๋ถ€ํ„ฐ ๋งž์ถ”๊ธฐ โ†’ v18.12.1
  • yarn์„ ์šฐ์„ ์ ์œผ๋กœ ์„ค์น˜ โ†’ v1.22.19
  • prettier
  • eslint (eslint-config-naver)
    • client, server ๋”ฐ๋กœ ์„ค์ •
    • ๋„ค์ด๋ฒ„ ์ปจ๋ฒค์…˜ ์ ์šฉ
      • ๋งํฌ
      • ์—์–ด๋น„์—”๋น„ ์ปจ๋ฒค์…˜์€ ๋„ˆ๋ฌด ๋งŽ๊ณ , ์–ด์ฐจํ”ผ ๋„ค์ด๋ฒ„๊ฐ€ ์—์–ด๋น„์—”๋น„ ์ปจ๋ฒค์…˜ ์ˆ˜์ •ํ•ด์„œ ์‚ฌ์šฉํ•จ
    • extends์—์„œ prettier๋ฅผ ๊ฐ€์žฅ ๋ฐ‘์œผ๋กœ ๋‚ด๋ ค์•ผ eslint๊ฐ€ ์ •์ƒ์œผ๋กœ ์ž‘๋™
  • gitignore
    • client, server ๋”ฐ๋กœ ์„ค์ •
  • @types/ ๋ชจ๋“ˆ์ด ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋Š” devDependency์— ์ถ”๊ฐ€์ ์œผ๋กœ ์„ค์น˜
    • ์˜ˆ์‹œ
      • yarn add react-router-dom
      • yarn add @types/react-router-dom --dev
  • tsconfig
    • ํ˜„์ •์ด ์ด์ „ ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•œ config์„ mildo ์ปจ๋ฒค์…˜์— ๋งž๊ฒŒ ์‚ฌ์šฉ
  • ์‹œ๋ฉ˜ํ‹ฑ ๋ฒ„์ „๋‹ ์ปจ๋ฒค์…˜ (semantic versioning convention)
    • ์ฒ˜์Œ release ์‹œ : v1.0.0
    • ์ดํ›„ ์ž์ž˜ํ•œ ์˜ค๋ฅ˜ ์ˆ˜์ • : v1.0.1
    • ๊ธฐ๋Šฅ ์ถ”๊ฐ€ ๋ฐ ๋ณ€๊ฒฝ : v1.1.0

4. prettier ์„ค์ •

  • ์ฃผ์„์— ๊ฐ ์˜ต์…˜์˜ ๋‚ด์šฉ ํ‘œ์‹œ
{
    "printWidth": 80, // ์ค„ ๋ฐ”๊ฟˆ ํ•  ํญ ๊ธธ์ด
    "tabWidth": 2, // ํƒญ ๋„ˆ๋น„ 
    "useTabs": false, // ํƒญ ์‚ฌ์šฉ ์—ฌ๋ถ€
    "semi": true, // ์„ธ๋ฏธ์ฝœ๋ก  ์‚ฌ์šฉ ์—ฌ๋ถ€
    "singleQuote": true, // single ์ฟผํ…Œ์ด์…˜ ์‚ฌ์šฉ ์—ฌ๋ถ€
    "trailingComma": "none", // ์—ฌ๋Ÿฌ ์ค„์„ ์‚ฌ์šฉํ•  ๋•Œ, ํ›„ํ–‰ ์ฝค๋งˆ ์‚ฌ์šฉ ๋ฐฉ์‹
    "arrowParens": "avoid", // ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ ๊ด„ํ˜ธ ์‚ฌ์šฉ ๋ฐฉ์‹
    "endOfLine": "lf", // EoF ๋ฐฉ์‹, OS๋ณ„๋กœ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์ด ๋‹ค๋ฆ„ 
    "bracketSpacing": true, // ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์—์„œ ๊ด„ํ˜ธ์— ๊ณต๋ฐฑ ์‚ฝ์ž… ์—ฌ๋ถ€
    "jsxBracketSameLine": true, // JSX์˜ ๋งˆ์ง€๋ง‰ `>`๋ฅผ ๋‹ค์Œ ์ค„๋กœ ๋‚ด๋ฆด์ง€ ์—ฌ๋ถ€ 
    "jsxSingleQuote": true, // JSX์— singe ์ฟผํ…Œ์ด์…˜ ์‚ฌ์šฉ ์—ฌ๋ถ€
}