-
Notifications
You must be signed in to change notification settings - Fork 7
๐ 10.31 ๋์์ธ & ๊ธฐ์ ์ ์
Sujong Kwak edited this page Nov 4, 2024
·
5 revisions
- ๋ ํธ๋ก + 8๋นํธ ์คํ์ผ: ๊ฒ์ํ๋ ๋๋์ ์ด๋ฆฌ๊ธฐ ์ํด ๋ ํธ๋ก์ 8๋นํธ ๋๋์ ์์ด์ฝ๊ณผ ํฐํธ๋ฅผ ์ฌ์ฉ
- ์์ ์ถ์ฒ ์ฌ์ดํธ: Color Hunt
-
ํผ๊ทธ๋ง ํ
ํ๋ฆฟ ์ฌ์ดํธ: Free Figma Templates
- ๋ค์ํ ๋์์ธ ์์คํ ๋ฐ ์ปดํฌ๋ํธ๋ฅผ ์ถ์ถํ๊ธฐ ์ข์
-
์์ด์ฝ ๋ฐ ๋ํธ ๋ฆฌ์์ค ์ฌ์ดํธ
- 8-bit Icon Set (Figma Templates)
- Pixilart: ๋ค์ํ ๋ํธ ๊ทธ๋ํฝ ์ฐธ๊ณ ๊ฐ๋ฅ
- Piskel: ๋ํธ๋ฅผ ์ฐ์ด์ GIF ํ์์ผ๋ก ์ ๋๋ฉ์ด์ ์ ์ ๊ฐ๋ฅ
- ๊ธฐ๋ณธ ํฐํธ: Pretendard
-
์ปจ์
ํฐํธ: ๋ ํธ๋ก์ 8๋นํธ ๋๋์ ๊ฐ์กฐํ ์ ์๋ ํฐํธ
- DC์ธ๋๊ฒ์ ๊ฐค๋ฌ๋ฆฌ
- ๋ค์ด๋ฒ ๋ธ๋ก๊ทธ ํฐํธ ์๊ฐ
- ๊ฐ๋ฌด๋ฆฌ ํฐํธ
- Neo๋ฅ๊ทผ๋ชจ: ๊ฒ์ ๋ก๊ณ ์๋ ํ์ฉ ๊ฐ๋ฅ โก๏ธ ๊ฒฐ์ !
- ๋ฌ๋ฌด๋ฆฌ ํฐํธ
-
์ ํ ํฐํธ: Neo๋ฅ๊ทผ๋ชจ
- ์๊ฐ์ด ์ ๋นํ๊ณ ๊ฐ๋ ์ฑ์ด ์ข์ ์ฃผ๋ชฉ๋๊ฐ ๋์
- ๋ ํธ๋ก ๊ฒ์๊ณผ ์ด์ธ๋ ค์ ๊ฐ๊ฐ์ ์ธ ๋ถ์๊ธฐ ์ฐ์ถ ๊ฐ๋ฅ
- Adobe Color: ์ด๋ฏธ์ง ๊ธฐ๋ฐ์ ์์ ํ๋ ํธ ์์ฑ ๊ธฐ๋ฅ ํ์ฉ
- ํค๋, ์ฐธ๊ฐ์ ์ฌ์ด๋ ๋ฐ, ์บ๋ฒ์ค ์์ญ, ์ฑํ , ํ์ดํ ๋ฑ ๋ฆฌ์กํธ ์ปดํฌ๋ํธ ๋จ์๋ก ์ธ๋ถํํ์ฌ ๊ตฌ์กฐํํ๊ธฐ๋ก ๊ฒฐ์
// ... ์๋ฃ ์ ๋ฆฌ ์ค ...
๊ธฐ์ ๋ฒ์ฃผ | ์ ์ ๋ ๊ธฐ์ | ์ด์ |
---|---|---|
TS/JS | TypeScript | - ํ์
์ ์๋ก ์ธํด ์๊ธฐ์น ์์ ์ค๋ฅ ๋ฐฉ์ง - ํ์ ์ API ์คํค๋ง ๋ฑ ํ์ํ ํ์ ๋ฏธ๋ฆฌ ์ ์ โก๏ธ ํจ์จ์ฑ ์ฆ๋ |
ํ๋ ์์ํฌ | React | - SSR์ด ํ์ ์๋ ํ๋ก์ ํธ ํน์ฑ์ React ์ ํ- ํ์ ์ ๋ฉ์ธํ์ด์ง์๋ง SEO ์ ์ฉ ์์ |
๋ฒ๋ค๋ฌ | Vite | - ๋น ๋ฅธ ๊ฐ๋ฐ ํ๊ฒฝ ๊ตฌ์ถ ๋ฐ ๋น๋ ์๊ฐ ๋จ์ถ - ๋ค์ํ ํ๋ฌ๊ทธ์ธ ์ง์ ๋ฐ ๋ฐฉ๋ํด์ง๊ณ ์๋ ์ํ๊ณ |
CSS | Tailwind CSS | - ์ง๊ด์ ์ธ ๋์์ธ ์ ์ฉ๊ณผ ๋น ๋ฅธ ๊ตฌ์ถ ๊ฐ๋ฅ - cva , clsx , twMerge ์ฌ์ฉ์ผ๋ก ๋์์ธ ์์คํ
๊ตฌ์ถ ์ฉ์ด |
์ํ ๊ด๋ฆฌ (ํด๋ผ์ด์ธํธ) | Zustand | - ์ํ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ React ํ
๋ง์ผ๋ก๋ ๊ฐ๋ฐ ์๋๊ฐ ๋๋ ค์ง๋ ์ ์ ๋ณด์ํ๊ธฐ ์ํด ๋์
- Recoil ์ ์ ์ง ๊ด๋ฆฌ๊ฐ ๋ถ์กฑํ๊ณ , Redux ๋ ๋ถํ์ํ ๊ธฐ๋ฅ๊ณผ ํฐ ํจํค์ง ํฌ๊ธฐ๋ก ์ธํด ์ ์ธ- ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํฌ๊ธฐ ๋น๊ต์์ Zustand (2.9kB)์ Jotai (13.1kB)๋ก ์ขํ์ก์ผ๋ Flux ํจํด์ด ์ต์ํ Zustand ๋ก ๊ฒฐ๋ก - Flux ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ Zustand ๋ ํ๋ก์ ํธ๊ฐ ์ปค์ ธ๋ ์ํ ๊ด๋ฆฌ๊ฐ ์ฉ์ดํด, ์ฅ๊ธฐ์ ๊ด์ ์์ ์ ํฉํ๋ค๊ณ ํ๋จํ์ฌ ์ ํ |
์ํ ๊ด๋ฆฌ (์๋ฒ) | React Query | - ํด๋ผ์ด์ธํธ์ ์๋ฒ ์ํ๋ฅผ ๋ถ๋ฆฌํ์ฌ ๊ฐ๋ฐ ์๋๋ฅผ ๋์ด๊ณ ์ ์ง๋ณด์๋ฅผ ์ฉ์ดํ๊ฒ ํ๊ธฐ ์ํด React Query ๋์
์ ๊ณ ๋ ค- ํ๋ก์ ํธ์ ํน์ฑ์ ์๋ฒ์์ ์ค์๊ฐ ๋๊ธฐํ ๋ฐ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ด ์ค์ํ๋ฉฐ, ์ด๋ฅผ ์ํด ์๋ฒ ์ํ๋ฅผ ๊ด๋ฆฌํ ์ปค์คํ ํ ๋ฐ ์ ์ญ ์ํ ๊ตฌํ ์๊ฐ์ ๋จ์ถํ๊ณ ์ ํจ - ์ ํ๋ ๊ฐ๋ฐ ๊ธฐ๊ฐ ๋ด์ ํจ์จ์ฑ์ ๊ทน๋ํํ๊ธฐ ์ํด React Query ์ ๋ค์ํ ๊ธฐ๋ฅ๋ค์ด ์ ์ฉํ๋ค๊ณ ํ๋จ- React Query ์ ๋น๊ตํ์ ๋, SWR ์ ๋ ์ธ๋ฐํ ๋ ๋๋ง ์ ์ด๋ฅผ ์ํด ์ปค์คํ
ํ
์ผ๋ก ์ถ๊ฐ์ ์ธ ์ฝ๋ ์์ฑ์ด ํ์ํ๋ฏ๋ก ์ ํฉํ์ง ์๋ค๊ณ ํ๋จ |
ํ ์คํธ | X | - ์๊ฐ ์ ํ๊ณผ UI/DOM ํ
์คํธ ์ค์ฌ ํน์ฑ์ ๋์
ํ์ง ์์ - ์ถํ ๋ณต์กํ ์ปค์คํ ํ /ํจ์๊ฐ ์๊ธธ ์ ๋์ ๊ฒํ |
์ปดํฌ๋ํธ ๋ฌธ์ํ | Storybook | - UI/UX ํ์ธ ๋ฐ ํ ์คํธ & ์ปดํฌ๋ํธ ๋ฌธ์ํ ๊ฐ๋ฅ |
์ ๋๋ฉ์ด์ : ๊ธฐ๋ณธ์ ์ผ๋ก CSS ์ฌ์ฉ, ํ์ ์ Framer Motion ์ฌ์ฉ
๊ธฐ์ ๋ฒ์ฃผ | ์ ์ ๋ ๊ธฐ์ | ์ด์ |
---|---|---|
ํ๋ ์์ํฌ | Nest.JS | - ๋ด์ฅ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ํคํ
์ฒ ํจํด์ผ๋ก ๊ฐ๋ฐ ํจ์จ์ฑ ์ฆ๊ฐ - ์์กด์ฑ ์ฃผ์ (DI)๊ณผ ๋ชจ๋ํ๋ก ํ ์คํธ ์ฉ์ด - ์ค์จ๊ฑฐ ์๋ ๋ฌธ์ํ ๋ฐ DTO ์ ์ + ์ ํจ์ฑ ๊ฒ์ฌ ์ฉ์ด |
๋ฐ์ดํฐ๋ฒ ์ด์ค | MySQL, Redis | - ํ๋ก์ ํธ์ ์ค์๊ฐ ๋ฉํฐํ๋ ์ด์ด ๊ฒ์ ํน์ฑ์ ๋ง์ถฐ, MySQL ์ ๋ฌธ์ ์ ์์ด์ ๊ฐ์ ์๊ตฌ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด ์ ํ- Redis ๋ ๋ฎ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋๊ณผ ์ค์๊ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๊ฐ ํ์ํ์ฌ ๊ฒ์๋ฐฉ ์ ๋ณด, ์ ์, ์ํ ๋ฑ์ ์์ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด ๋์
- Redis ์ TTL ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ ์ข
๋ฃ๋ ๊ฒ์๋ฐฉ์ ์๋ ์ ๋ฆฌํ๋ฉฐ, Redis ์ ๋จ์ํ key-value ๊ตฌ์กฐ๋ก ๋น ๋ฅธ ๋ฐ์ดํฐ ์ ๊ทผ์ ์ฉ์ดํ๊ฒ ํจ |
๊ธฐ์ ๋ฒ์ฃผ | ์ ์ ๋ ๊ธฐ์ | ์ค๋ช |
---|---|---|
JSX ์ฝ๋ formatter | ESlint - Airbnb | - ์ฝ๋ ์ผ๊ด์ฑ์ ์ํด ์ด๊ธฐ์๋ ๊ท์น์ ํ์ดํธํ๊ฒ ์ค์ ํ๊ธฐ๋ก ํจ - ๊ฐ๋ฐ ์งํ ์ค ํ์ ๊ฐ์ ํฉ์์ ๋ฐ๋ผ ๊ท์น์ ์ ์ฐํ๊ฒ ๋ณ๊ฒฝํ ์ ์๋๋ก ํ์ฌ ์ฝ๋ ์ ๋ฆฌ์ ๋ ์ฉ์ดํ ๊ฒ์ผ๋ก ํ๋จ |
์ ์ฒด ์ฝ๋ formatter | Prettier | - ์ฝ๋ ์ผ๊ด์ฑ ์ ์ง๋ฅผ ์ํด ์ฌ์ฉ |
-
TypeDoc
๋ฌธ์ํ & Github Action์ผ๋ก ๋ฐฐํฌ -
clsx
์ฌ์ฉ ๊ฒํ (๋์์ธ ์์คํ ๊ตฌ์ถ ์ ์ ์ฉ) -
alias
์ค์ (@๋ก ์ ๊ทผ) -
husky
์ค์ (Git Hook ์ค์ & ESLint์ prettier ๊ฒ์ฌ)
src/
โโโ ๐ components/ # ์ปดํฌ๋ํธ ํด๋
โ โโโ ui/ # Headless UI ์ปดํฌ๋ํธ (Button, Input ๋ฑ)
โ โโโ common/ # ๊ณตํต ์ปดํฌ๋ํธ
โ โโโ domains/ # ๋๋ฉ์ธ๋ณ ์ปดํฌ๋ํธ (Game, Draw ๋ฑ)
โ
โโโ ๐ apis/ # API ๊ด๋ จ ์ค์
โ โโโ config.ts # ํ๊ฒฝ๋ณ์, Fetch ์ค์
โ โโโ services/ # API ํธ์ถ ํจ์
โ
โโโ ๐ assets/ # ๋น๋์ ํฌํจ๋๋ ์ ์ ํ์ผ
โ โโโ images/ # svg, ์ด๋ฏธ์ง
โ โโโ fonts/ # ํฐํธ ํ์ผ
โ
โโโ ๐ hooks/ # ์ปค์คํ
ํ
โ โโโ apis/ # React Query ๊ด๋ จ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ํ
(/src/api์ ๋๊ธฐํ ํ์)
โ โโโ custom/ # ์ผ๋ฐ ์ปค์คํ
ํ
โ
โโโ ๐ types/ # ํ์
์ ์ (2๊ฐ ์ด์ ์)
โ โโโ index.ts # ํ์
export ์ค์ ํ์ผ
โ โโโ *.types.ts # ๋๋ฉ์ธ๋ณ ํ์
ํ์ผ
โ
โโโ ๐ constants/ # ์์ ์ ์
โ โโโ index.ts # USER_INFO ๋ฑ ์์ ๋ชจ์
โ
โโโ ๐ stores/ # Zustand ์ ์ญ ์ํ
โ โโโ gameStore.ts # ๊ฒ์ ๊ด๋ จ ์ํ
โ โโโ userStore.ts # ์ ์ ๊ด๋ จ ์ํ
โ
โโโ ๐ utils/ # ์ ํธ๋ฆฌํฐ ํจ์ (๋ฆฌ์กํธ ์๋ช
์ฃผ๊ธฐ์ ๊ด๋ จ ์๋ ๊ณตํต ํจ์)
โ โโโ format.ts # ํฌ๋งท ๊ด๋ จ
โ โโโ validation.ts # ์ ํจ์ฑ ๊ฒ์ฌ ๋ฑ
โ
โโโ ๐ public/ # ๋น๋ ์ ์ธ ์ ์ ํ์ผ
โโโ favicon.ico # ํ๋น์ฝ ๋ฑ
- 1. ๊ฐ๋ฐ ํ๊ฒฝ ์ธํ ๋ฐ ํ๋ก์ ํธ ๋ฌธ์ํ
- 2. ์ค์๊ฐ ํต์
- 3. ์ธํ๋ผ ๋ฐ CI/CD
- 4. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ด Canvas ๊ตฌํํ๊ธฐ
- 5. ์บ๋ฒ์ค ๋๊ธฐํ๋ฅผ ์ํ ์์ CRDT ๊ตฌํ๊ธฐ
-
6. ์ปดํฌ๋ํธ ํจํด๋ถํฐ ์น์์ผ๊น์ง, ํจ์จ์ ์ธ FE ์ค๊ณ
- ์ข์ ์ปดํฌ๋ํธ๋ ๋ฌด์์ธ๊ฐ? + Headless Pattern
- ํจ์จ์ ์ธ UI ์ปดํฌ๋ํธ ์คํ์ผ๋ง: Tailwind CSS + cn.ts
- Tailwind CSS๋ก ๋์์ธ ์์คํ ๋ฐ UI ์ปดํฌ๋ํธ ์ธํ
- ์น์์ผ ํด๋ผ์ด์ธํธ ๊ตฌํ๊ธฐ: React ํ๊ฒฝ์์ ํจ์จ์ ์ธ ์น์์ผ ์ํคํ ์ฒ
- ์น์์ผ ํด๋ผ์ด์ธํธ ์ฝ๋ ๋ถ์ ๋ฐ ๊ณต์
- 7. ํธ๋ฌ๋ธ ์ํ ๋ฐ ์ฑ๋ฅ/UX ๊ฐ์
- 1์ฃผ์ฐจ ๊ธฐ์ ๊ณต์
- 2์ฃผ์ฐจ ๋ฐ๋ชจ ๋ฐ์ด
- 3์ฃผ์ฐจ ๋ฐ๋ชจ ๋ฐ์ด
- 4์ฃผ์ฐจ ๋ฐ๋ชจ ๋ฐ์ด
- 5์ฃผ์ฐจ ๋ฐ๋ชจ ๋ฐ์ด
- WEEK 06 ์ฃผ๊ฐ ๊ณํ
- WEEK 06 ๋ฐ์ผ๋ฆฌ ์คํฌ๋ผ
- WEEK 06 ์ฃผ๊ฐ ํ๊ณ