Codeit FE Sprint 4๊ธฐ - 3ํ
๊ตฌ์น๋ชจ |
๊น์ฌ์ฑ |
๋ ธ์์ |
์ค์์ |
์ด๋ํ |
๊ฐ๋ณ ์ญํ โ๏ธ
- ๊ตฌ์น๋ชจ
- ๋ก๊ทธ์ธ & ํ์ ๊ฐ์ ๊ด๋ฆฌ
- ํ์ด์ง : ๋ง์ด ํ์ด์ง
- ๊น์ฌ์ฑ
- ์ปฌ๋ผ, ์นด๋ ๋๋ฉ์ธ
- ํ์ด์ง : ๋์๋ณด๋ ํ์ด์ง
- ๋ก์ปฌ ์คํ ๋ฆฌ์ง -> ์ฟ ํค, ๋ฏธ๋ค์จ์ด
- ๋ฌดํ ์คํฌ๋กค
- Dnd ์ ์ฉ
- ๋
ธ์์
- git flow ์ด๊ธฐ ์ค์ , ๋ ํฌ์งํ ๋ฆฌ ๊ด๋ฆฌ
- ๋ฌด์ค๋จ ๋ฐฐํฌ ๋ฐ ๋๋ฉ์ธ ์ฐ๊ฒฐ
- ํ์ด์ง: ์์ ํ์ด์ง
- react Query: ์๋ฒ ์ํ ์ด๊ธฐ ์ค์
- ํ์ด์ง ๋ค์ด์
- ์ค์์
- ์ด๋ ๋๋ฉ์ธ
- ํ์ด์ง : ๋ง์ด ๋์๋ณด๋, ์์ ํ์ด์ง
- ๋ฌดํ ์คํฌ๋กค
- ์ด๋ํ
- ํ์ด์ง : ๋ง์ด ๋์๋ณด๋, ๋๋ฉ ํ์ด์ง
- ํ์ด์ง๋ค์ด์ , ๋ฌดํ ์คํฌ๋กค
- Dnd ์ ์ฉ
- ์ค์ผ๋ ํค
2024.04.15(์) ~ 04.30(ํ)
์ค๋งํธํ๊ฒ ์์ ์ ์ผ์ ์ ๊ด๋ฆฌํ๋ ์๋น์ค
https://taskify-six-eta.vercel.app/
git clone https://github.com/only-arrow-function/Taskify.git
npm i
npm run dev
- ํ์๊ฐ์ ๋ฒํผ์ ํตํด, ํ์ ๊ฐ์ ํ์ด์ง๋ก ์ด๋
- ๋ก๊ทธ์ธ ๋ฒํผ์ ํตํด, ๋ก๊ทธ์ธ ํ์ด์ง๋ก ์ด๋
2. ๋๋ฉ์ธ ๋ ์ด์์ (์ปดํฌ๋ํธ ๋ช : components/dashboard/header & layout, components/side-menu)
- ํค๋
- ํค๋์์ ํ์ฌ ๋์๋ณด๋ ์ด๋ฆ, ํ๋กํ
- ํ๋กํ์ ํตํด, ๋ง์ด ํ์ด์ง๋ก ์ด๋
- ์ฌ์ด๋ ๋ฉ๋ด
- ๋์๋ณด๋ ์กฐํ (ํ์ด์ง๋ค์ด์ )
- ๋์๋ณด๋ ์์ฑ
- ํ์ ์ ๋ณด ์์
- ํ๋กํ ์ด๋ฏธ์ง ๋ณ๊ฒฝ
3. ํ์๊ฐ์ & ๋ก๊ทธ์ธ ํ์ด์ง (์ปดํฌ๋ํธ ๋ช : pages/login/index.tsx, pages/signup/index.tsx)
- ๋ก๊ทธ์ธ ๋ฐ ํ์ ๊ฐ์
- ์ ํจ์ฑ ๊ฒ์ฌ
- ๊ฐ๋ณ ๋์๋ณด๋ ์์ฑ (ํ์ด์ง๋ค์ด์ )
- ๋ค๋ฅธ ์ด์ฉ์์ ์ด๋ ์๋ฝ (๋ฌดํ ์คํฌ๋กค)
- ์ปฌ๋ผ ์์ฑ, ์ญ์ (๋ฌดํ ์คํฌ๋กค)
- ๊ฐ ์ปฌ๋ผ์ ์นด๋ ์์ฑ, ์ญ์
- ๊ฐ ์นด๋ ๋ณ ๋๊ธ ์์ฑ, ์ญ์
- ์์ ์ด ์์ฑํ ๋์๋ณด๋์ธ ๊ฒฝ์ฐ ์ ๊ทผ ๊ฐ๋ฅ
- ๋์๋ณด๋ ์ด๋ฆ ๋ณ๊ฒฝ, ์์ ๋ณ๊ฒฝ
- ๋์๋ณด๋ ์ญ์
- ๋์๋ณด๋ ์ด๋
- ๋์๋ณด๋ ๋งด๋ฒ ์กฐํ
โ ๊ฐ๋ฐ ์ค๋ ฅ ๋๋น, ๋ฏธํกํ๋ ์ปค๋ฎค๋์ผ์ด์
โ ๊ฐ์์ ์ผ๋ฆฌ ์๋ ์ฃผ์ฅ์ด ๋์์์ด ๋์ .
โ ํํ์ด ์ด๋ ค์ ๋ ๊ฐ๋ฐ ๊ฐ์น๊ด
โ tailwinnd.config.ts ํ์ผ์ ์ ์ฉ ๊ฒฝ๋ก์์ ๋ฒ์ด๋ ๊ฒฝ์ฐ tailwind๊ฐ ์ธ์ํ์ง ๋ชปํจ.
ํด๊ฒฐ ๋ฐฉ์
- ํ ์ผ์๋๋ ํด๋์ค ์ด๋ฆ์ ์ถ์ถํ ๋ ๋์ด์ง์ง ์์ ์์ ํ ๋ฌธ์์ด๋ก ์กด์ฌํ๋ ํด๋์ค๋ง ์ธ์. ์ฆ, font-${fontWeight}์ ๊ฐ์ด ์ฌ์ฉ ๋ถ๊ฐ. ๋ฐ๋ผ์, ์กฐ๊ฑด์ ๋ง๋ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ ์ฌ์ฉ.
- ํด๋์ค ์ด๋ฆ์ ๋ชจ์๋ ๊ฐ์ฒด๋ฅผ ๋ถ๋ฆฌํด์ ์ฌ์ฉํ์๋๋ฐ, ํด๋์ค๊ฐ ๋ฏธ์ ์ฉ. ์ด์ ๋, tailwinnd.config.ts ํ์ผ์ ์ ์ฉ ๊ฒฝ๋ก์์ ๋ฒ์ด๋ ๊ฒฝ์ฐ tailwind๊ฐ ์ธ์ํ์ง ๋ชปํจ.
- tailwinnd.config.ts์ ์ ์ ํ ๊ฒฝ๋ก์ ๋ฐฐ์น.
โ Redux, context-api์๋ ๋ค์ ๊ฒฐ์ด ๋ค๋ฅธ zustand ์์คํ ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ดํดํ์ง ๋ชปํ๊ณ ๊ฐ๋ฐ์ ์งํ.
์ค๋ช & ํด๊ฒฐ ๋ฐฉ์
- zustand๋ ๊ฐ์ฒด ์์ฒด๋ฅผ ๋ฐํํ๋ค(ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ๋ฆฌํด) : provider๊ฐ ์กด์ฌํ์ง ์๋๋ค.
- ์ฆ, ํ ์ผ๋ก ์ฌ์ฉํ ๊ฒฝ์ฐ, ์ด๋ฏธ ์์ฑ๋ ๊ฐ์ฒด์, ์ํ๋ฅผ ์ ์ฅํ๋ ๊ตฌ์กฐ๋ค. (์๋ฆฌ : https://react.dev/reference/react/useSyncExternalStore)
- ๋ฐ๋ผ์, ์ ์ญ์ ์ผ๋ก ์ฌ์ฉํ ์ํ๋ฅผ ์๋ฐํ ๋ถ๋ฆฌํด์ผ ํ๋ค. (๋ชจ๋ฌ์ ํ ๊ธ ํ ์ zustand๋ก ๊ด๋ฆฌํด, ๊ฐ์ ํ์ด์ง์์ ๋ชจ๋ ๋ชจ๋ฌ์ด ๋จ๋ ์ด์ ๋ฐ์.)
โ SWR VS react-Query : ๊ฐํธํจ vs ํญ ๋์ ์ํ๊ณ
์ค๋ช & ํด๊ฒฐ ๋ฐฉ์
- useSWRInfinite VS useinfinitequery: ๋ฌดํ ์คํฌ๋กค๊ณผ ํ์ด์ง๋ค์ด์ ์ ์ฟผ๋ฆฌ ํค ๊ด๋ฆฌ์ ์ด๋ ค์. ํนํ, ๋ฎคํ ์ด์ ์์ ๋ฌธ์ ๊ฐ ๋ฐ์.
- SWR์ ๋ฎคํ ์ด์ ์ ์์ ๋๊ฐ ๋์ ๋์ , ์ ์ญ์ ์ผ๋ก ํฉ์ด์ง๋ ์๋ฒ ์ํ ์ฟผ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ๋ํดํด ์ง๋ค๊ณ ํ๋จ.
โ useInfiniteQuery๋ฅผ ์ฌ์ฉํ๋๋ฐ ์ปค์ ๊ธฐ๋ฐ ํ์ด์ง๋ค์ด์ ์ผ ๋.
ํด๊ฒฐ ๋ฐฉ์
- initialPageParam๋ ํ์์ธ๋ฐ, ์ฒซ api ์์ฒญํ ๋ cursorId params๊ฐ ์กด์ฌํ๋ฉด ์ ๋๋ค.
- initialPageParam์ 0์ผ๋ก ํด์ ๋ถ๊ธฐ ์ฒ๋ฆฌ
โ next์ useRouter๋ก ํ๋ผ๋ฏธํฐ๊ฐ์ ๊ฐ์ ธ์์ SWR๋ก ๋น๋๊ธฐ ๋ฐ์ดํฐ ํจ์นญ์ ์งํํ๋ ๋ก์ง์์, ํ๋ผ๋ฏธํฐ๊ฐ์ ๊ฐ์ ธ์ค๊ธฐ ์ ์ SWR์ด ๋จผ์ ์คํ ๋์ด์ id๊ฐ์ undefined๊ฐ ๋จ๋ ์ด์ ๋ฐ์
ํด๊ฒฐ ๋ฐฉ์
- ์๋ฒ์ชฝ ๋์๊ณผ ํด๋ผ์ด์ธํธ์ชฝ ๋์์ด ๋น๋๊ธฐ๋ก ์์๊ฐ ์ํค๋ฉด์ ๋ฐ์ํ๋ ์ด์๋ก ํ๋จ
- ํ๋ฆฌ๋ ๋๋ง์ ์ด์ฉํด์ getServerSideProp์ผ๋ก ํ๋ผ๋ฏธํฐ๊ฐ์ ๊ฐ์ ธ์์ ํ์ด์ง์ ์ ๋ฌํ๋ ๋ฐฉ์์ผ๋ก ์์
โ ๏ธ ํ ํฐ๊ฐ ์์ ์ loginํ์ด์ง๋ก ๋ฆฌ๋ค์ด๋ ํธ ์ฒ๋ฆฌ ์ค ํ์ด์ง ๋ ๋๋ง๋๋ ์ด์
โ accessToken์ localStorage๋ก ๊ด๋ฆฌ -> ํ์ด์ง์์ localStorage์ ์ ๊ทผํด์ ๋ถ๊ธฐํ๋ ค๋ 1์ฐจ์ ์ผ๋ก ์ ์ ํ๋ฉด์ ํ์ด์ง๊ฐ ๋ ๋๋ง๋๊ณ ๋์ด๊ฐ๋ ์ด์ ๋ฐ์
ํด๊ฒฐ ๋ฐฉ์
- ํด๋ผ์ด์ธํธ์์ localStorage์ ๊ทผํ๊ธฐ ๋๋ฌธ์ ํ์ด์ง๊ฐ ๋ ๋๋ง ๋๋ ๋ชจ์ต์ด ๋ณด์๋ค๊ฐ ์ด๋ํ๋ ๋ฌธ์ ๋ก ํ๋จ
- ์๋ฒ์ธก์์ localStorage์ ์ ๊ทผ์ด ๋ถ๊ฐํ๊ธฐ ๋๋ฌธ์ ํ ํฐ ๊ด๋ฆฌ๋ฅผ ์๋ฒ์์๋ ์ ๊ทผ ๊ฐ๋ฅํ ์ฟ ํคํํ๋ก ๋ณํ ํ middleware๋ฅผ ์ถ๊ฐํด์ ์๋ฒ์์ ์ฟ ํค๋ฅผ ๊ฒ์ฌํด์ ๋ฆฌ๋ค์ด๋ ํธ ์ํค๋ ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ
- ๋จ, ๋ก๊ทธ์ธ ๋ ๋ฉํ์ด์ง ํ์๊ฐ์ ํ์ด์ง๋ middleware์๋ ์ ์ธ
โ "๊ธฐ์ ์คํ์ ์ ํ"
- ๊ธฐ๊ฐ์ด ์งง์ ํ๋ก์ ํธ์ด๊ธฐ์ ๊ธฐ์ ์คํ์ ๋ฐ๊พธ๋ ์ ์ด ํํํ ๋ ์น๋ช ์ ์ผ ์ ์์ง๋ง, ์คํ๋ฆฐํฐ์ด๊ธฐ ๋๋ฌธ์ ๊ธ์ ์ ์ธ ์๋ฏธ๋ก ๋ค๋ฅธ ๊ธฐ์ ์คํ์ ์ ํํ๋ ๊ฒ์ด ๊ฐ์ฅ ํฐ ์๋ฏธ.
- ํ๋ก์ ํธ ์งํ์ด ๋งค๋๋ฝ์ง ์์์ง๋ง, ์ด๋ ํ ํ๊ฒฝ์๊ฐ๋๋ผ๋ ์ ์ํ ์ ์๋ค๋ผ๋ ์์ ๊ฐ์ ํค์ ๊ณ , ๊ทธ๋งํผ ๋ง์ด ๋ฐฐ์๊ฐ ์ ์์์.