๐ค ๊ฐ๋ฐ ํ๊ฒฝ ์ธํ
ํ์ - boostcampwm-2022/web33-Mildo GitHub Wiki
1. ๊ฐ์
- ์ผ์ ๋ฐ ์ฅ์ : 11.15.(ํ) 11:30 ~ 16:00, ๊ฒ๋ํ์ด ๋ฐ ๋ผ์ด๋ธ ์์ด
- ์ฐธ์ฌ์ : ์ ์
- ๋ชฉ์ : live share๋ก ํจ๊ป ๊ฐ๋ฐ ํ๊ฒฝ์ ์ํ ์ธํ
์งํ
- ํ์ ์ค์๋ : ์ค
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 ์ฟผํ
์ด์
์ฌ์ฉ ์ฌ๋ถ
}