| ์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
- ์ฝ๋์ #ํ๋ก ํธ์๋ #๋ถํธ์บ ํ
- ๋ถํธ์บ ํ
- ์ฝ๋์ #ํ๋ก ํธ์๋ #๋ถํธ์บ ํ #ํ๋ก์ ํธ
- ํ๋ก ํธ์๋
- ์ ๋ฐ๋ฏธ #udemy #์ ์ง์ฝํฌ๋น #์ค๋์ดํผํฉํ ๋ฆฌ #์ธ์ฌ์ด๋์์ #๋ฏธ๋๋ด์ผ์ผ๊ฒฝํ #ํ๋ก์ ํธ์บ ํ #ํฌํธํด๋ฆฌ์ค๊ณผ์ #uiux๋์์ธ #uiux๋์์ด๋ #๋์์ด๋๊ต์ก #๋์์ด๋ํฌํธํด๋ฆฌ์ค
- ์ฝ๋์
- Today
- Total
๐ฑ
์ค๊ธ ํ๋ก์ ํธ: Linkbrary ๋ณธ๋ฌธ
์ค๊ธ ํ๋ก์ ํธ: Linkbrary
soo2051 2025. 3. 21. 21:12๐ข ํ๋ก์ ํธ ์๊ฐ
- ํ๋ก์ ํธ ์ธ์ : ํ๋ก ํธ์๋ 4๋ช
- ๊ธฐ๊ฐ : 24.12.13 - 25.01.02
- ํ๋ก์ ํธ : ์ํ๋ ๋งํฌ๋ฅผ ์ ์ฅ, ๊ฒ์, ๊ณต์ ๋ฐ ํด๋๋ก ๊ด๋ฆฌํ ์ ์๋ ์๋น์ค
- GitHub: https://github.com/codeit-fe11-part3-team4/linkbrary
- ํ์ : GitHub, Notion, Discord
- ๊ธฐ์ ์คํ : React, Next.js(App Route), Typescript, Tailwind CSS
๐ฉ๐ป๐ป ๋ด ์ญํ
- ํ์ผ ๊ตฌ์กฐ ๋ฐ tailwind ์ค์
- ํค๋, ํ์ด์ง๋ค์ด์ ๊ณตํต ์ปดํฌ๋ํธ ๊ตฌํ
- ๋งํฌ ์นด๋ ์ปดํฌ๋ํธ ๊ตฌํ (๋งํฌ ํ์ด์ง, ์ฆ๊ฒจ์ฐพ๊ธฐ ํ์ด์ง ๊ณตํต)
- ์ฆ๊ฒจ์ฐพ๊ธฐ ํ์ด์ง ๊ตฌํ
- ๋ฐํ
๐ป ํ๋ก์ ํธ ๊ณผ์
๐ API ์ฐ๋ – Swagger ๊ธฐ๋ฐ ๋ฐฑ์๋ API ์ฌ์ฉ
์ด๋ฒ ํ๋ก์ ํธ์์๋ ์ฝ๋์ ์ธก์์ ์ ๊ณตํ Swagger ๋ฌธ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ API๋ฅผ ์ฌ์ฉํ์ต๋๋ค. Swagger ๋ฌธ์๋ ๋ช ์ธ๊ฐ ์ ์ ๋ฆฌ๋์ด ์์๊ธฐ ๋๋ฌธ์, ๋น ๋ฅด๊ฒ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ํ์ ํ๊ณ ํ๋ก ํธ์๋์์ ํ์ํ ์์ฒญ์ ๊ตฌํํ ์ ์์์ต๋๋ค.
๐งฉ ์ปดํฌ๋ํธ ๊ตฌ์กฐ์ ์ญํ ๋ถ๋ด
ํ๋ก์ ํธ๋ ๋ค์๊ณผ ๊ฐ์ ํ์ด์ง ๋จ์๋ก ๊ตฌ์ฑ๋์ด ์์์ผ๋ฉฐ, ๊ฐ๊ฐ์ ์ปดํฌ๋ํธ ์ค์ฌ์ผ๋ก ๋ถํ ํ์ฌ ๊ฐ๋ฐํ์ต๋๋ค.
- ๋ฉ์ธ ๋๋ฉ ํ์ด์ง
- ๋ก๊ทธ์ธ/ํ์๊ฐ์ ํ์ด์ง
- ๋งํฌ ํ์ด์ง
- ์ฆ๊ฒจ์ฐพ๊ธฐ ํ์ด์ง
์ปดํฌ๋ํธ๋ ์ฌ์ฌ์ฉ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ๊ณ ๋ คํ์ฌ ๊ธฐ๋ฅ ๋จ์๋ก ๋๋์์ผ๋ฉฐ, ๊ฐ ๊ธฐ๋ฅ๋ณ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ํตํด ํ์ผ ๊ด๋ฆฌ๋ฅผ ์ฒด๊ณํํ์ต๋๋ค.
๐ ๋ฌธ์ ๋ฐ ํด๊ฒฐ ๊ณผ์
๋ฌธ์ (1) - ๋งํฌ ์นด๋ ์ปดํฌ๋ํธ ๊ณตํตํ ๋ฐ ์กฐ๊ฑด๋ถ UI ๋ ๋๋ง
1. ๋ฌธ์
๋งํฌ ํ์ด์ง์ ์ฆ๊ฒจ์ฐพ๊ธฐ ํ์ด์ง ๋ชจ๋ ๋งํฌ ์นด๋๋ฅผ ์ฌ์ฉํ๋๋ฐ, ๊ฐ๊ฐ์ ํ์ด์ง์์ ๋ณ๋ ๋ก์ง๊ณผ UI ๊ตฌ์กฐ๋ก ์ค๋ณต ๊ตฌํ์ด ๋ฐ์ํ๊ณ ์์์ต๋๋ค. ํนํ ์ผ๋ฐฅ ๋ฒํผ์ด๋ ์ฆ๊ฒจ์ฐพ๊ธฐ ๋ฒํผ๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ํ์ด์ง๋ณ๋ก ๋ ธ์ถ ์กฐ๊ฑด์ด ๋ฌ๋์ง๋ง ๋ช ํํ๊ฒ ๋ถ๋ฆฌ๋์ง ์์์ต๋๋ค.
2. ํด๊ฒฐ๋ฐฉ์
Card ์ปดํฌ๋ํธ๋ฅผ ๊ณตํตํํ๊ณ , ๋ด๋ถ์์ usePathname()์ ํตํด ํ์ฌ ํ์ด์ง ๊ฒฝ๋ก(/links, /favorite)๋ฅผ ํ๋ณํ์ฌ boolean ๊ฐ์ ์์ฑํ์ต๋๋ค. ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ผ๋ฐฅ ๋ฒํผ, ์ฆ๊ฒจ์ฐพ๊ธฐ ๋ฒํผ์ ์กฐ๊ฑด๋ถ๋ก ๋ ๋๋งํ์ต๋๋ค. ๋ํ ์ฆ๊ฒจ์ฐพ๊ธฐ ํ์ด์ง์์๋ ํด๋น ๋ฒํผ๋ค์ด ์จ๊ฒจ์ง๊ณ , ๋งํฌ ํ์ด์ง์์๋ ํด๋ฆญ ์ API๋ฅผ ํธ์ถํด ์ฆ๊ฒจ์ฐพ๊ธฐ ์ํ๋ฅผ ํ ๊ธํ๋๋ก ๊ตฌํํ์ต๋๋ค.
3. ๊ฒฐ๊ณผ
๋์ผํ UI ์ปดํฌ๋ํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ด์ง๋ณ ๋์์ ์์ฐ์ค๋ฝ๊ฒ ๋ถ๋ฆฌํ ์ ์์๊ณ , props ์์ด๋ ํ์ด์ง ๊ตฌ๋ถ์ด ๊ฐ๋ฅํด์ง๋ฉฐ ์ปดํฌ๋ํธ ์ฌ์ฌ์ฉ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ด ํฅ์๋์์ต๋๋ค.
→ ๊ฐ์ ๋ฐฉํฅ : pathname ์์กด์ด ๊ฐํด์ง๋ฉด์ ๋ผ์ฐํ ๋ณ๊ฒฝ ์ UI ๋ก์ง ๋ณ๊ฒฝ์ด ํ์ํ ๊ตฌ์กฐ๊ฐ ๋์๊ธฐ ๋๋ฌธ์, ์ถํ์๋ ์ํ ๊ธฐ๋ฐ ํน์ context ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ๋ถํ๋ ๊ตฌ์กฐ๋ ๊ณ ๋ คํ ์ ์์
๋ฌธ์ (2) - CardList ์ปดํฌ๋ํธ ๋์ ์คํจ์ Card ๋ด๋ถ ํตํฉ
1. ๋ฌธ์
์ด๊ธฐ ์ค๊ณ์์๋ CardList ์ปดํฌ๋ํธ์์ ์ ์ฒด ๋งํฌ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๊ณ ์ํ๋ฅผ ๊ด๋ฆฌํ ๋ค, ๊ฐ๊ฐ์ Card ์ปดํฌ๋ํธ๋ก props๋ฅผ ๋ด๋ ค๋ณด๋ด๋ ๋ฐฉ์์ผ๋ก ๊ตฌ์ฑํ๋ ค ํ์ต๋๋ค. ์ด ๋ฐฉ์์ ์ปดํฌ๋ํธ ๊ฐ์ ์ญํ ์ ๋ถ๋ฆฌํ ์ ์๋ ๊ตฌ์กฐ์์ง๋ง, ์ค์ ๊ตฌํ ๊ณผ์ ์์๋ ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค:
- props ๊น์ด์ ์์ด ๋ง์์ ธ ์ปดํฌ๋ํธ ๊ฐ์ ์ฐ๊ฒฐ์ด ์ ์ ๋ณต์กํด์ก๊ณ , ์ค๊ฐ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณตํ๋ ๊ณผ์ ๋ ๋ง์์ก์ต๋๋ค.
- ํ์ด์ง ์ ํ, ์ฆ๊ฒจ์ฐพ๊ธฐ ์ํ, ๊ฒ์ ํํฐ๋ง, ํด๋ ์์ด๋, ํ์ด์ง ์ฌ์ด์ฆ ๋ฑ ๋ค์ํ ์ํ์ ํ๋ฆ์ด ์ฐ๋๋๋ฉด์, ์ํ ์ ๋ฌ ๊ตฌ์กฐ๊ฐ ๊ผฌ์ด๊ธฐ ์์ํ๊ณ , ๊ทธ์ ๋ฐ๋ผ ํน์ ๋์์ด ํ ์ชฝ ์ปดํฌ๋ํธ์์๋ง ๋ฐ์๋๊ฑฐ๋ ๋น๋๊ธฐ ํ๋ฆ์ด ์ด๊ธ๋๋ ๊ฒฝ์ฐ๋ ์์์ต๋๋ค.
2. ํด๊ฒฐ๋ฐฉ์
๊ฒฐ๊ตญ CardList๋ ์ ๊ฑฐํ๊ณ , ๋ค์๊ณผ ๊ฐ์ ์ด์ ๋ก Card ์ปดํฌ๋ํธ ๋ด๋ถ์์ ์ํ ์์ฒญ๊ณผ ๊ด๋ฆฌ, ๋ ๋๋ง์ ํตํฉ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ๊ตฌ์กฐ๋ก ๊ตฌํํ์ต๋๋ค
- useEffect๋ก pathname, folderId, searchQuery, currentPage, pageSize๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค API๋ฅผ ํธ์ถํด ๋ฐ์ดํฐ ์์ฒญ์ ์ง์ ์ฒ๋ฆฌ
- putFavoriteLink API ์์ฒญ ํ ์ ์ฒด ๋งํฌ ์ํ๋ฅผ ๊ฐฑ์ ํ๋ ํ๋ฆ๋ ์ปดํฌ๋ํธ ๋ด๋ถ์์ ํตํฉ ๊ด๋ฆฌ
- searchQuery์ ๋ฐ๋ผ filteredLinks ์ํ๋ฅผ ๋ง๋ค์ด ๊ฒ์ ํํฐ๋ง๋ Card ๋ด๋ถ์์ ์ฒ๋ฆฌ
3. ๊ฒฐ๊ณผ
- props ์ ๋ฌ์ด ๋ณต์กํ๊ฒ ์ฝํ์๋ ๊ตฌ์กฐ๊ฐ ๋จ์ํ๋์ด ์ฝ๋์ ์ถ์ ๊ฐ๋ฅ์ฑ๊ณผ ๋๋ฒ๊น ํธ์์ฑ์ด ๋์์ก์ต๋๋ค.
- ๋ด๋ถ ์ํ ๊ธฐ๋ฐ ๋ ๋๋ง ํ๋ฆ์ด ๋ช ํํด์ก๊ณ , ๋ฒํผ ์กฐ๊ฑด๋ถ ๋ ๋๋ง, ์ฆ๊ฒจ์ฐพ๊ธฐ ๋์ ๋ฑ๋ ํ์ด์ง ๊ธฐ์ค์ผ๋ก ์ ๋์ํ์ต๋๋ค.
- ํ์ง๋ง ์ปดํฌ๋ํธ๊ฐ ์ ์ ์ปค์ง๋ฉด์ ๋ ๋๋ง, ์์ฒญ ์ฒ๋ฆฌ, UI ์ ์ด ๋ก์ง์ด ํ๋์ ๋ชฐ๋ฆฌ๊ฒ ๋์ด ๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ๊ฐ ๋ถ์กฑํ ๊ตฌ์กฐ๊ฐ ๋์์ต๋๋ค.
→ ๊ฐ์ ๋ฐฉํฅ
ํ ๊ตฌ์กฐ๋ ๋น ๋ฅธ ๊ตฌํ์๋ ์ ๋ฆฌํ์ง๋ง, ์ฅ๊ธฐ์ ์ผ๋ก๋ ์ ์ง๋ณด์์ฑ๊ณผ ํ์ฅ์ฑ์ ์์ด ๊ตฌ์กฐ์ ์ธ ํ๊ณ๊ฐ ์์์ต๋๋ค.
ํ์ฌ๋ Card ์ปดํฌ๋ํธ ๋ด๋ถ์์ ๋งํฌ์ ์ฆ๊ฒจ์ฐพ๊ธฐ ๊ด๋ จ API ์์ฒญ, ์ํ ๊ด๋ฆฌ, ๋ ๋๋ง๊น์ง ๋ชจ๋ ์ฒ๋ฆฌํ๊ณ ์์ด ์ปดํฌ๋ํธ๊ฐ ์ ์ ๋ฌด๊ฑฐ์์ง๊ณ ์์ผ๋ฉฐ, ๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ ์ธก๋ฉด์์๋ ์์ฌ์์ด ์์์ต๋๋ค.
์๋๋ CardList์์ API ์์ฒญ๊ณผ ์ํ๋ฅผ ์ ์ญ์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ Card์๋ ๋ ๋๋ง๋ง ์์ํ๋ ค ํ์ง๋ง, props ์ ๋ฌ ๊ตฌ์กฐ๊ฐ ๋ณต์กํด์ง๊ณ ๋น๋๊ธฐ ํ๋ฆ์ด ๊ผฌ์ด๋ฉด์ ์คํจํ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ props ์ ๋ฌ์ด ๋ฐ๋์ ๋ฌธ์ ๋ผ๋ ๊ฒ๋ณด๋ค๋, ์ญํ ๊ณผ ํ๋ฆ์ด ๋ช ํํ ์ ์๋์ง ์์ ์ค๊ณ์ ๋ฌธ์ ์์ต๋๋ค.
์ด์ ๋ฐ๋ผ ๊ฐ ํ์ด์ง์์ ํ์ํ API ํธ์ถ๊ณผ ์ํ ๊ด๋ฆฌ๋ฅผ ๋ด๋นํ๊ณ , Card ์ปดํฌ๋ํธ๋ UI ๋ ๋๋ง๋ง ๋งก๋๋ก ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ๋ ๋ฐฉํฅ์ด ์ ํฉํ ์ ์๊ฒ ๋ค๋ ์๊ฐ์ ํ๊ฒ ๋์์ต๋๋ค. ํ์ด์ง๋ ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ์ง ๊ฒฐ์ ํ๊ณ , Card๋ ๊ทธ ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ๋ณด์ฌ์ค์ง์๋ง ์ง์คํ๊ฒ ๋จ์ผ๋ก์จ ๊ตฌ์กฐ์ ๋ช ํ์ฑ๊ณผ ํ ์คํธ ์ฉ์ด์ฑ์ด ํฅ์๋ฉ๋๋ค. ๋ํ ํ์ด์ง ๋จ์์๋ React Query, Suspense, ์๋ฌ ํธ๋ค๋ง ๋ฑ ๋ค์ํ ์ ๋ต์ ์์ ๋กญ๊ฒ ์ ์ฉํ ์ ์๊ณ , ์ฆ๊ฒจ์ฐพ๊ธฐ ํ์ด์ง์ ๋งํฌ ํ์ด์ง์ฒ๋ผ ๋ฐ์ดํฐ ์์ค๊ฐ ๋ช ํํ ๋ค๋ฅธ ๊ฒฝ์ฐ์๋ ํ์ด์ง ๋จ์์ API๋ฅผ ๋ถ๊ธฐํ๋ ๊ฒ์ด ๋ ๋ช ๋ฃํ ํ๋ฆ์ ๋ง๋ค์ด๋ ๋๋ค.
props๊ฐ ๋ง์์ง๋ ์ํฉ์ ํ์ฐ์ ์ผ ์ ์์ผ๋, ์ด๋ ๋ฐ๋์ ์ํฐํจํด์ด ์๋๋ฉฐ ๋ช ํํ ์ค๊ณ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉด ์คํ๋ ค ๋ฐ์ดํฐ ํ๋ฆ์ ๋ ์ฝ๊ฒ ์ถ์ ํ๊ณ ํต์ ํ ์ ์๊ณ , ๋ถํ์ํ ์ ์ญ ์ํ ๊ด๋ฆฌ ๋๊ตฌ์ ๋์ ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค. ๋ฐ๋๋ก, ์ปดํฌ๋ํธ ๊ฐ ๋ฐ์ดํฐ ๊ณต์ ๊ฐ ์ค์ ๋ก ํ์ํ ๊ฒฝ์ฐ์๋ Context, Zustand์ ๊ฐ์ ์ํ ๊ด๋ฆฌ ๋๊ตฌ๋ฅผ ์ ์ฐํ๊ฒ ๋์ ํ์ฌ ์ญํ ๋ถ๋ฆฌ๋ฅผ ์ ์งํ๋ฉด์๋ ํ์ํ ๊ณต์ ๋ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
ํฅํ ๋ฆฌํฉํ ๋ง ์์๋ ์ปดํฌ๋ํธ์ ์ฑ ์ ๋จ์๋ฅผ ์ฌ์ ์ํ๊ณ , CardList → Card ๊ตฌ์กฐ๋ฅผ ์ฌ๋์ ํ๋ ์ํ ํ๋ฆ์ ํ์ด์ง ๋๋ ๋ํผ ์ปดํฌ๋ํธ์์ ์ปจํธ๋กคํ๋ ๋ฐฉํฅ์ผ๋ก ๊ฐ์ ํด๋ณด๋ ค ํฉ๋๋ค.
- ํ์ด์ง: ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ์ง ๊ฒฐ์ (API ํธ์ถ, ํํฐ๋ง, ํ์ด์ง๋ค์ด์ ๋ฑ)
- CardList: ๋ฐ๋ณต ๋ ๋๋ง, key ๋ฐ layout ๊ตฌ์ฑ ๋ฑ ๋ชฉ๋ก UI ์ฑ ์
- Card: ๋ฐ์ดํฐ ์๊ฐํ์ ์ ์ ์ธํฐ๋์ ๋ด๋น (UI ์ค์ฌ)
๋ฌธ์ (3) - ๋ฐ์ํ ํ์ด์ง๋ค์ด์ ์ ์ํ useViewport ํ ๊ตฌํ
1. ๋ฌธ์
์ด๊ธฐ์๋ pageSize ๊ฐ์ ๊ณ ์ (ํ๋์ฝ๋ฉ)ํ๊ฑฐ๋, ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์กฐ๊ฑด๋ฌธ์ผ๋ก ํ๋ฉด ํฌ๊ธฐ๋ฅผ ํ๋ณํด props๋ก ์ ๋ฌํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด ๊ตฌ์กฐ์์๋ ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค:
- window.innerWidth๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ์กฐ๊ฑด ๋ถ๊ธฐ๊ฐ ์ฌ๋ฌ ๊ณณ์ ํฉ์ด์ ธ ์์ด ๋ก์ง ์ค๋ณต์ด ๋ฐ์ํ๊ณ ,
- ํ์ด์ง ํฌ๊ธฐ ๋ณ๊ฒฝ ์ pageSize๊ฐ ์ค์๊ฐ์ผ๋ก ๋ฐ์๋์ง ์์,
ํ๋ฉด ๋๋น๊ฐ ๋ณ๊ฒฝ๋์ด๋ ๋ณด์ฌ์ฃผ๋ ์นด๋ ์๊ฐ ๋์ ์ผ๋ก ๋ฐ๋์ง ์์์ต๋๋ค.
๋ํ prop ์ ๋ฌ ๊ณผ์ ์์๋ viewportWidth์ pageSize ๊ฐ์ ๋๊ธฐํ๊ฐ ๊ผฌ์ฌ ํ์ด์ง๋ค์ด์ ์ด ๋น์ ์์ ์ผ๋ก ์๋ํ๊ฑฐ๋ ์ด๊ธฐํ๋์ง ์๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค.
2. ํด๊ฒฐ๋ฐฉ์
useViewport๋ผ๋ ์ปค์คํ ํ ์ ๋์ ํด ํ๋ฉด ํฌ๊ธฐ์ ํ์ด์ง ํฌ๊ธฐ๋ฅผ ํตํฉ์ ์ผ๋ก ๊ด๋ฆฌํ์ต๋๋ค. ๋ด๋ถ์์ resize ์ด๋ฒคํธ๋ฅผ ๊ฐ์งํ์ฌ width, pageSize, ๋๋ฐ์ด์ค ๊ตฌ๋ถ ์ํ(isPC, isTablet, isMobile)๋ฅผ ํจ๊ป ๊ด๋ฆฌํ์ผ๋ฉฐ, ์ปดํฌ๋ํธ์์๋ ์ด ํ ๋ง ํธ์ถํ๋ฉด, ํ์ฌ ํ๋ฉด์ ๋ง๋ pageSize๋ฅผ ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋๋ก ๊ตฌ์ฑํ์ต๋๋ค.
3. ๊ฒฐ๊ณผ
๊ธฐ์กด์ ๋ฐ์ํ๋ prop ์ ๋ฌ ์ค๋ฅ์ ํ๋์ฝ๋ฉ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์๊ณ , ๋ธ๋ผ์ฐ์ ํฌ๊ธฐ์ ๋ฐ๋ผ ํ์ด์ง ์นด๋ ์๊ฐ ์๋์ผ๋ก ๋ณ๊ฒฝ๋๋ฉด์ UX๊ฐ ํฅ์๋์์ต๋๋ค.
→ ๊ฐ์ ๋ฐฉํฅ : ์ด๊ธฐ ์ํ๊ฐ window ๊ฐ์ฒด์ ์์กดํ๊ธฐ ๋๋ฌธ์, ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง ํ๊ฒฝ(window๋ ์๋ฌ ๋ฐ์)์์ ์์ธ ์ฒ๋ฆฌ๋ฅผ ์ํ ์กฐ๊ฑด ๋ถ๊ธฐ๋ฅผ ๋ณด์ํ ํ์๊ฐ ์์ผ๋ฉฐ(useEffect ๋ด๋ถ์์๋ง window ๊ด๋ จ ์์ ํ๋๋ก ๊ตฌ์กฐํ), ์ถํ์๋ ์ํ ๊ด๋ฆฌ๋ฅผ ๋ ๋ช ํํ ํ๊ธฐ ์ํด Context ๊ธฐ๋ฐ ๋๋ ์ํ ๋๊ธฐํ๋ฅผ ์ํ ๋ก์ง ์ต์ ํ๋ ๊ณ ๋ ค
๐ ๋ฐฐ์ด ์ /๋๋ ์
1. App Router ๊ธฐ๋ฐ์ ํ์ด์ง ๊ตฌ์กฐ ์ค๊ณ ๋ฐ ๊ตฌํ ๊ฒฝํ
์ด๋ฒ ํ๋ก์ ํธ์์๋ Next.js์ App Router ๋ฐฉ์์ ์ฌ์ฉํ์ฌ ํ์ผ ๊ตฌ์กฐ๋ฅผ ์ค๊ณํ๊ณ ์ง์ ๊ตฌํํ์ต๋๋ค. ๊ธฐ์กด Pages Router์๋ ๋ค๋ฅด๊ฒ, App Router๋ ํด๋ ๊ธฐ๋ฐ์ ๊ตฌ์กฐ์ ๋ ์ด์์, ํด๋ผ์ด์ธํธ/์๋ฒ ์ปดํฌ๋ํธ์ ๋ถ๋ฆฌ, ์๋ฒ ์ก์ ๋ฑ ๋ค์ํ ๊ฐ๋ ์ด ๋์ ๋์ด ์์ด ์ฒ์์๋ ๋ฏ์ค์์ง๋ง, ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ ์ค์ ์ ์ฉ ๋ฐฉ์์ ์ตํ๊ณ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ค๊ณํ๋ ๋ฒ์ ๋ฐฐ์ธ ์ ์์์ต๋๋ค. ์ด ๊ฒฝํ์ ํตํด Next.js์ ์ต์ ๋ผ์ฐํ ๋ฐฉ์์ ๋ ๊น์ด ์ดํดํ๊ฒ ๋์๊ณ , ๊ตฌ์กฐ์ ์ธ ๊ฐ๋ฐ์ ๋ํ ๊ฐ๊ฐ๋ ๋์ผ ์ ์์์ต๋๋ค.
2. Context๋ฅผ ํ์ฉํ ์ ์ญ ์ํ ๊ด๋ฆฌ ๋ฐฉ์์ ๋ํ ์ค์ ๊ฒฝํ
๋ก๊ทธ์ธ ์ํ ๊ด๋ฆฌ๋ฅผ ์ํด Context API๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ AuthContext๋ฅผ ํ์์ด ๊ตฌํํ์๊ณ , ์ ๋ ํด๋น ๊ตฌ์กฐ๋ฅผ ํ์ฉํด useAuth() ํ ์ ํตํด ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์ฌ์ฉํ๋ ํ๋ฆ์ ์ดํดํ๊ณ ์ ์ฉํ์ต๋๋ค. ๋จ์ํ ์ฌ์ฉํ๋ ๊ฒ์์ ๊ทธ์น์ง ์๊ณ Context ๋ด๋ถ์ ํ๋ฆ์ ๋ถ์ํ๋ฉด์ ์ํ๋ฅผ ์ ์ญ์์ ์ด๋ป๊ฒ ๊ด๋ฆฌํ๋์ง๋ฅผ ํ์ ํ ์ ์์๊ณ , ์ด๋ฅผ ํตํด ์ ์ญ ์ํ ๊ด๋ฆฌ์ ํ์์ฑ๊ณผ ์ฅ์ ์ ์ฒด๊ฐํ ์ ์์์ต๋๋ค.
3. API ํ๋ฆ๊ณผ ๋ฐฑ์๋ ๋ก์ง ํ์ ์ ์ค์์ฑ
์นด๋ ์ปดํฌ๋ํธ๋ฅผ ๊ณตํตํํ๊ณ ์ฆ๊ฒจ์ฐพ๊ธฐ ํ์ด์ง์ ์ ์ฉํ๋ ๊ณผ์ ์์, ์ฆ๊ฒจ์ฐพ๊ธฐ API ํธ์ถ ํ๋ฆ์ ์ ํํ ์ดํดํ์ง ๋ชปํ ์ํ๋ก ์์
์ ์์ํด ์๊ฐ์ด ์ง์ฒด๋๋ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค. ์ฆ๊ฒจ์ฐพ๊ธฐ๋ ๋งํฌ๋ฅผ ๋ถ๋ฌ์ค๊ธฐ ์ํด์๋ ๋จผ์ ์ฆ๊ฒจ์ฐพ๊ธฐ ํด๋์ ๋งํฌ๋ฅผ ์ถ๊ฐํด์ผ ํ๋ค๋ ์ ์ ์กฐ๊ฑด์ ํ์
ํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์, ์๋ฌด๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ํธ์ถํด๋ ๊ฒฐ๊ณผ๊ฐ ๋ํ๋์ง ์์์ต๋๋ค. ์ดํ ํ์์ ๋์์ ๋ฐ์ API ์ฌ์ฉ ํ๋ฆ์ ๋ค์ ์ ๋ฆฌํ๊ณ ๋์์ผ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์์ต๋๋ค.
์ด ๊ณผ์ ์ ํตํด ๋จ์ํ ํ๋ฉด UI ๊ตฌํ๋ฟ๋ง ์๋๋ผ, ๊ธฐ๋ฅ ์๋์ ์ํด ํ์ํ ๋ฐฑ์๋ ๋ก์ง๊น์ง ์ ํํ ์ดํดํ ๋ค ์์
์ ๋ค์ด๊ฐ๋ ์ต๊ด์ด ์ผ๋ง๋ ์ค์ํ์ง๋ฅผ ๊นจ๋ฌ์์ต๋๋ค.
๐ข ์์ฌ์ด ์
1. API ๋ช ์ธ ํ์ธ ๋ฐ ํ๋ฆ ํ์ ์ ๋ถ์กฑ
์ฆ๊ฒจ์ฐพ๊ธฐ ํ์ด์ง๋ฅผ ๊ตฌํํ๋ฉด์, ์ฆ๊ฒจ์ฐพ๊ธฐ ๋งํฌ๋ฅผ ๋ถ๋ฌ์ค๊ธฐ ์ ์ ๋ณ๋์ API๋ฅผ ํตํด ํด๋น ๋งํฌ๋ฅผ ์ฆ๊ฒจ์ฐพ๊ธฐ ํด๋์ ๋ฑ๋กํด์ผ ํ๋ค๋ ๊ณผ์ ์ ๋์น๊ณ ์์ ์ ์์ํ์ต๋๋ค. ์ด๋ก ์ธํด ์๋ฌด ๋ฐ์ดํฐ๋ ๋ฐ์์ค์ง ๋ชปํ๋ ์ํ๊ฐ ์ง์๋์๊ณ , ๋ฌธ์ ์์ธ์ ์ฐพ๋ ๋ฐ ๋ง์ ์๊ฐ์ด ์์๋์์ต๋๋ค. ์ดํ ํ์๊ณผ์ ์ํต์ ํตํด API ๊ตฌ์กฐ์ ํ๋ฆ์ ์ฌ์ ๋นํ๋ฉด์ ํด๊ฒฐํ์ง๋ง, ๊ฐ๋ฐ ์ด๊ธฐ ๋จ๊ณ์์ ๋ฐฑ์๋ ๋ก์ง๊น์ง ์ถฉ๋ถํ ์ดํดํ๊ณ ํ๋ฆ์ ๋จผ์ ์ค๊ณํ๋๋ผ๋ฉด ๋ ์์ํ๊ฒ ๊ตฌํํ ์ ์์์ ๊ฒ์ด๋ผ๋ ์์ฌ์์ด ๋จ์์ต๋๋ค.
2. Context ๊ตฌ์กฐ์ ๋ํ ์ฌ์ฉ ์์ฃผ ์ ๊ทผ
๋ก๊ทธ์ธ ์ํ ๊ด๋ฆฌ๋ฅผ ์ํด Context API๋ฅผ ์ฌ์ฉํ๋ ๊ตฌ์กฐ๊ฐ ๋์ ๋์๊ณ , ์ ๋ ์ด๋ฅผ ํ์ฉํ์ฌ ํ์ํ ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์์์ง๋ง, ์ง์ Context๋ฅผ ์ค๊ณํ๊ณ ๊ตฌ์ฑํ๋ ๊ณผ์ ์๋ ์ฐธ์ฌํ์ง ๋ชปํ์ต๋๋ค. ํด๋น ๊ตฌ์กฐ์ ์ฅ์ ์ ๋ถ๋ช ํ ์ฒด๊ฐํ์ง๋ง, ๋จ์ํ ์ ๊ณต๋ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ ์์ค์ ๋จธ๋ฌด๋ฅธ ์ ์ด ์์ฌ์ ์ต๋๋ค. ๋ค์ ํ๋ก์ ํธ์์๋ ์ง์ Context๋ ์ ์ญ ์ํ ๊ด๋ฆฌ ๋๊ตฌ๋ฅผ ๊ตฌํํด๋ณด๋ฉฐ, ์ํ ํ๋ฆ์ ์ค๊ณํ๋ ๊ฒฝํ๋ ์๊ณ ์ ํฉ๋๋ค.
3. ์นด๋ ์ปดํฌ๋ํธ์ ๋ฆฌ์คํธ ์ปดํฌ๋ํธ ๋ถ๋ฆฌ ์คํจ
์ฒ์์๋ ๋งํฌ ๋ชฉ๋ก์ CardList์ Card ํํ๋ก ๋ถ๋ฆฌ๋ ๊ตฌ์กฐ๋ก ๊ตฌํํ๊ณ ์ ํ์ง๋ง, API ํธ์ถ ํ๋ฆ๊ณผ ์ํ ๊ด๋ฆฌ๊ฐ ์๊ฐ๋ฆฌ๋ฉด์ ์์๋ณด๋ค ๋ณต์กํ ๊ตฌ์กฐ๊ฐ ๋์๊ณ , ๊ฒฐ๊ตญ Card ์ปดํฌ๋ํธ ํ๋์์ ๋ชจ๋ ๋ก์ง์ ์ฒ๋ฆฌํ๊ฒ ๋์์ต๋๋ค. ์ด๋ก ์ธํด ์ปดํฌ๋ํธ๊ฐ ๋ฌด๊ฑฐ์์ง๊ณ ๊ด์ฌ์ฌ ๋ถ๋ฆฌ ์ธก๋ฉด์์๋ ์์ฌ์์ด ๋จ์์ต๋๋ค. ์ปดํฌ๋ํธ ๊ฐ ๋ฐ์ดํฐ ํ๋ฆ์ ๋ช ํํ ์ ์ํ์ง ์๊ณ ๋ก์ง์ ์ถ๊ฐํ ์ ์ด ์์ธ์ด์์ผ๋ฉฐ, ์ดํ์๋ ์ค๊ณ ๋จ๊ณ์์ ์ํ ๊ด๋ฆฌ ํ๋ฆ๊ณผ ์ปดํฌ๋ํธ ์ญํ ์ ๋ ๋ช ํํ ๊ตฌ๋ถํ ๋ค ๊ตฌํํ๋ ๋ฐฉํฅ์ผ๋ก ๊ฐ์ ํ ํ์๊ฐ ์๋ค๊ณ ๋๊ผ์ต๋๋ค.
'์ฝ๋์ ์คํ๋ฆฐํธ ํ๋ก ํธ์๋ 11๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ๊ณ ๊ธ ํ๋ก์ ํธ: GlobalNomad (0) | 2025.03.21 |
|---|---|
| ๊ธฐ์ด ํ๋ก์ ํธ: Fandom-k (1) | 2025.03.21 |
| [์ฝ๋์] ํ๋ก ํธ์๋ 11๊ธฐ ์ง์ (0) | 2025.03.18 |