Step 1 Tech Stack Selection - 100-hours-a-week/16-team-katopia-fe GitHub Wiki
๋ณธ ํ๋ก์ ํธ FITCHECK๋ ์ด๋ฏธ์ง ์ค์ฌ์ ํจ์ SNS๋ก ์ธํฐ๋์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ค.
๊ธฐ์ ์คํ์ ๋จ์ํ ๊ตฌํ ํธ์์ฑ์ด ์๋, ์ค์ ์๋น์ค ํ๊ฒฝ์์์ ์ฑ๋ฅ, ํ์ฅ์ฑ, ์ด์ ์์ ์ฑ์ ์ต์ฐ์ ๊ธฐ์ค์ผ๋ก ์ ์ ํ์ต๋๋ค.
-
๊ณ ์ฉ๋ ์ด๋ฏธ์ง ๋ฐ์ดํฐ
- ํผ๋ ๋ฐ ํ๋กํ์์ ์ด๋ฏธ์ง ๋ ธ์ถ ๋น์ค์ด ๋งค์ฐ ๋์
-
์ฆ์ ์ฌ์ฉ์ ์ธํฐ๋์
- ์ข์์, ๋๊ธ, ๋ถ๋งํฌ, ํฌํ ๋ฑ ์ํ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ๋ฆฌ๋ ๋๋ง ๋น๋ ๋์
-
๊ถํ๋ณ UX ์ฐจ๋ฑ
- ๋น๋ก๊ทธ์ธ ์ฌ์ฉ์์๊ฒ๋ ์ฝํ ์ธ ์ผ๋ถ ๊ณต๊ฐ
- ํต์ฌ ๊ธฐ๋ฅ์ ๋ก๊ทธ์ธ ์ธ์ ๊ธฐ๋ฐ์ผ๋ก ์ ๊ณต
๋ฐ๋ผ์ ๋ณธ ํ๋ก์ ํธ๋ ์ฌ์ฉ์ ์ฒด๊ฐ ์ฑ๋ฅ๊ณผ ์ธํฐ๋์ ์์ ์ฑ์ ํต์ฌ ํ๋จ ๊ธฐ์ค์ผ๋ก ์ผ์์ต๋๋ค.
์ฌ์ฉ์ ์ฒด๊ฐ ์ฑ๋ฅ๊ณผ ์ธํฐ๋์ ์์ ์ฑ์ ๋จ์ํ ํ์ด์ง ๋ก๋ฉ ์๊ฐ๋ง์ผ๋ก ํ๋จํ๊ธฐ ์ด๋ ต์ต๋๋ค. ์ด๋ฏธ์ง ๋น์ค์ด ๋๊ณ ์ํ ๋ณ๊ฒฝ์ด ์ฆ์ ์๋น์ค์์๋ โ์ธ์ ๋ณด์ด๊ธฐ ์์ํ๋์งโ์ โ์ผ๋ง๋ ์ฆ๊ฐ์ ์ผ๋ก ๋ฐ์ํ๋์งโ๊ฐ ํต์ฌ ๊ธฐ์ค์ด ๋๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด๋ฌํ ์ฒด๊ฐ ์์๋ Web Vitals ์งํ๋ฅผ ํตํด ์ ๋์ ์ผ๋ก ์ธก์ ํฉ๋๋ค.
| ์งํ | ์ ์ | ์์ | ๊ทผ๊ฑฐ |
|---|---|---|---|
| LCP (Largest Contentful Paint) | ํ๋ฉด์์ ๊ฐ์ฅ ํฐ ์ฝํ ์ธ ๊ฐ ์์ ํ ๋ ๋๋ง ๋๋ ์์ | ํ ํผ๋ ์ง์ ํ ๋ฉ์ธ ์ด๋ฏธ์ง๊ฐ ์์ ํ ๋ก๋ฉ๋์ด ์ ๋ช ํ๊ฒ ๋ณด์ด๋ ์๊ฐ | ์ฌ์ฉ์๊ฐ ์ค์ง์ ์ผ๋ก ๋๋ผ๋ ๋ก๋ฉ ์๋ - next/image๋ฅผ ํตํ ์๋ ๋ฆฌ์ฌ์ด์ง ๋ฐ WebP ๋ณํ- ์ผ๋ฐ <img> ๋๋น LCP ๋จ์ถ |
| FCP (First Contentful Paint) | ํ๋ฉด์์ ๊ฐ์ฅ ์ฒซ๋ฒ์งธ ์ฝํ ์ธ ๊ฐ ๋ ๋๋ง ๋๋ ์์ | ํ์ด์ง ์ ์ ํ ํฐ ํ๋ฉด์์ ๋ก๊ณ ยทํ ์คํธยท์ค์ผ๋ ํค ๋ฑ ์ฒซ ์ฝํ ์ธ ๊ฐ ๋ํ๋๋ ์๊ฐ | ์ฌ์ฉ์๊ฐ "๋ก๋ฉ์ด ์์๋์๋ค"๋ ์๊ฐ์ ์ ํธ๋ฅผ ์ฃผ๋ ์งํ - Next.js์ Server-Side Rendering์ ํตํด ๋น ํ๋ฉด ๋ ธ์ถ ์ต์ํ |
| CLS (Cumulative Layout Shift) | ํ๋ฉด์ด ์ผ๋ง๋ ๋ถ์์ ํ์ง๋ฅผ ์ธก์ ํ๋ ์งํ | ๊ฒ์๋ฌผ์ ๋ณด๋ค๊ฐ ์ด๋ฏธ์ง ๋ก๋ฉ์ผ๋ก ์ข์์ ๋ฒํผ ์์น๊ฐ ๊ฐ์๊ธฐ ๋ฐ๋ฆฌ๋ ํ์ | ํ๋ฉด์์ ๋ ์ด์์์ด ๋ฐ๋ฆฌ๋ ์ ๋ - ์ด๋ฏธ์ง ๋น์จ ์ฌ์ ํ๋ณด- Placeholder ์ ์ฉ์ ํตํ ๋ ์ด์์ ์์ ์ฑ ํ๋ณด |
| TTI (Time to Interactive) | ํด๋ฆญ์ด๋ ์ ๋ ฅ ๊ฐ์ ์ ์ ์ ์ธํฐ๋์ ์ด ์ฆ๊ฐ์ ์ผ๋ก ๋ฐ์๋๋ ์์ | ํ๋ฉด์ ์ด๋ฏธ ๋ณด์ด์ง๋ง, ์ข์์ ๋ฒํผ์ด ์ค์ ๋ก ํด๋ฆญ ๊ฐ๋ฅํด์ง๋ ์์ | - ์ธํฐ๋์ ์์ ์ฐ์ ํ์ด๋๋ ์ด์ |
์ฌ์ฉ์๊ฐ ์ธํฐ๋์ ์ ์ํํ์ ๋ ๋ธ๋ผ์ฐ์ ๊ฐ ๊ทธ ๊ฒฐ๊ณผ๋ก ๋ค์ UI๋ฅผ ๊ทธ๋ ค๋ด๋๋ฐ๊น์ง ๊ฑธ๋ฆฌ๋ ์๊ฐ
- TanStack Query v5์ ๋๊ด์ ์ ๋ฐ์ดํธ ์ ์ฉ -> ๋๊ด์ ์ ๋ฐ์ดํธ๋? ์ฌ์ฉ์์ ๋์ ๊ฒฐ๊ณผ๋ฅผ ์๋ฒ์์ ์ฑ๊ณต์ ํ๋ค๋ ๊ฐ์ ํ์ ์ฆ์ UI๋ฅผ ๋ฐ์ํด์ฃผ๋ ๊ฒ์ ์๋ฏธํจ. ๋ง์ฝ, ์๋ฒ์์ ์คํจ์ ์๋ UI๋ก ๋๋ ค๋ฒ๋ฆผ.
- ์๋ฒ ์๋ต ์ด์ ์ UI ์ฆ์ ๋ฐ์ํ์ฌ INP ์ต์ํ
-
Lighthouse
- Web Vitals ๊ธฐ๋ฐ ์ด๊ธฐ ๋ก๋ฉ ์ฑ๋ฅ ์ ์ ๋น๊ต
-
React Profiler
- Zustand ์ ์ฉ ํ ๋ ๋๋ง ๋ฒ์ ๋ฐ ์ฑ๋ฅ ์๊ฐ์ ๊ฒ์ฆ
| ๋ถ๋ฅ | ๊ธฐ์ | ๋ฒ์ |
|---|---|---|
| Framework | Next.js (App Router) | ^16.x |
| Language | TypeScript | ^5.x |
| Server State | TanStack Query | ^5.x |
| Client State | Zustand | ^4.x |
| Form | React Hook Form | ^7.x |
| Validation | Zod | ^3.x |
| Styling | Tailwind CSS | ^3.x |
FITCHECK๋ ๋จ์ SPA๊ฐ ์๋๋ผ ์ธ๋ถ ์ ์ โ ์ฝํ ์ธ ์๋น โ ์ธํฐ๋์ ์ ํ ํ๋ฆ์ด ์ค์ํ ์๋น์ค์ ๋๋ค.
Next.js๋ ๋ค์ ์๊ตฌ์ฌํญ์ ๊ตฌ์กฐ์ ์ผ๋ก ๋ง์กฑํฉ๋๋ค.
- ์๋ฒ ๋ ๋๋ง ๊ธฐ๋ฐ ์ด๊ธฐ ํ๋ฉด ์ ๊ณต
- ์ฝํ ์ธ ๋จ์ ํ์ด์ง์ ์๋ฏธ ์๋ HTML ์ ๊ณต
- SEO ๋ฐ ๊ณต์ (OG) ๋์
- ์ด๋ฏธ์ง ์ค์ฌ ์๋น์ค์ ์ต์ ํ๋ ๊ธฐ๋ณธ ์ฑ๋ฅ ๊ตฌ์กฐ
Next.js App Router์ ๊ธฐ๋ณธ ์ ์ ๋ ๋ชจ๋ ์ปดํฌ๋ํธ๋ Server Component๋ก ์์ํ๋ค๋ ์ ์ ๋๋ค. ์ด๋ "ํด๋ผ์ด์ธํธ์์ ๊ผญ ํ์ํ ๊ฒฝ์ฐ์๋ง JS๋ฅผ ๋ด๋ ค๋ณด๋ธ๋ค."๋ ๋ช ํํ ๋ฐฉํฅ์ฑ์ ๊ฐ์ง๋ฉฐ, ๋ณธ ํ๋ก์ ํธ์ ํ๋ฉด ๊ตฌ์ฑ ๋ฐฉ์๊ณผ ์ ๋ง์ต๋๋ค.
- ํด๋ผ์ด์ธํธ JS ๋ฒ๋ค ํฌ๊ธฐ ๊ฐ์
- ์ด๊ธฐ ๋ก๋ฉ ์๋ ๊ฐ์
- ๋ฏผ๊ฐํ ๋ก์ง์ ํด๋ผ์ด์ธํธ์ ๋ ธ์ถํ์ง ์์
์ด ๊ตฌ์กฐ์์ use client๋ โ์ด ์ปดํฌ๋ํธ๊ฐ ์ ํด๋ผ์ด์ธํธ์ฌ์ผ ํ๋์งโ๋ฅผ ๋ช
์ํ๋ ์ ์ธ์
๋๋ค.
FITCHECK๋ ๋จ์ SPA๊ฐ ์๋๋ผ ์ฝํ ์ธ ๋ ธ์ถ ๊ตฌ์กฐ์ ์ฑํ ์ธํฐ๋์ ์ด ๊ณต์กดํ๋ ์๋น์ค์ ๋๋ค. ๋ ๋๋ง ๋ฐฉ์๊ณผ ํ๋ ์์ํฌ ์ ํ์ ๋ฐ๋ผ ์ฑ๋ฅ, ํ์ฅ์ฑ, ๋ง์ผํ ํจ์จ์ด ํฌ๊ฒ ๋ฌ๋ผ์ง ์ ์์ด Next.js์ React + Vite๋ฅผ ์ฃผ์ ํ๋ณด๋ก ๋น๊ตํ์ต๋๋ค.
| ํญ๋ชฉ | Next.js (์ฝํ ์ธ ยทํ์ฅ์ฑ ์ค์ฌ) | React + Vite (๊ฐ๋ฐ ํจ์จ ์ค์ฌ) |
|---|---|---|
| ๊ธฐ๋ณธ ๋ ๋๋ง | Server-first | Client-only |
| ๋น๋ก๊ทธ์ธ ํผ๋ | SEO ๊ธฐ๋ฐ ์ ์ ๊ฐ๋ฅ | ์ฒดํ์ฉ ํ๋ฉด์ ํ์ |
| OG/๊ณต์ | ์๋ HTML/๋ฉํ ์์ฑ | ๋ณ๋ ์๋ฒ ์์ ํ์ |
| ๋ฐ์ดํฐ ๋ณด์ | Server Component๋ก ๋ก์ง ์๋ | ๋ก์ง ์ ๋ถ ํด๋ผ์ด์ธํธ ๋ ธ์ถ |
| ์ฅ๊ธฐ ํ์ฅ | ์ฝํ ์ธ ยท๋ง์ผํ ์นํ์ | ๋ด๋ถ UX ์ค์ฌ |
๋ณธ ํ๋ก์ ํธ๋ ๋ก๊ทธ์ธ ์ด์ ์๋ ์ฝํ ์ธ ๊ฐ ๋ ธ์ถ๋๊ณ ์ด๋ฅผ ํตํด ์ ์ ๊ณผ ์ ํ์ด ์ด๋ฃจ์ด์ง๋ ๊ตฌ์กฐ์ ์๋น์ค์ ๋๋ค. ์ด๋ฌํ ํน์ฑ์ ์ด๊ธฐ HTML ๊ธฐ๋ฐ ์ฝํ ์ธ ์ ๊ณต, SEO ๋์, ๊ณต์ ์ต์ ํ๊ฐ ํ์์ ์ด๋ฉฐ, ๋ชจ๋ ๋ ๋๋ง์ ํด๋ผ์ด์ธํธ์ ์์กดํ๋ React+Vite ๊ตฌ์กฐ๋ ์ฅ๊ธฐ์ ์ผ๋ก ํ๊ณ๋ฅผ ๊ฐ์ง ์ ์๋ค๊ณ ์๊ฐํ์ต๋๋ค. Next.js๋ ์ด๋ฌํ ์๊ตฌ์ฌํญ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ถฉ์กฑํ๋ฉฐ ์ฝํ ์ธ ์ค์ฌ ์๋น์ค๋ก ํ์ฅ ๊ฐ๋ฅํ ๊ตฌ์กฐ๋ฅผ ์ ๊ณตํฉ๋๋ค.
React+Vite๋ ๋ชจ๋ ์ปดํฌ๋ํธ๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ก ์ทจ๊ธํฉ๋๋ค. ์ด๋ก ์ธํด ์ํ๋ ์ด๋ฒคํธ๊ฐ ์๋ ์ ์ UI ๊น์ง๋ ํด๋ผ์ด์ธํธ ๋ฒ๋ค์ ํฌํจ๋๋ฉฐ ์๋น์ค ๊ท๋ชจ๊ฐ ์ปค์ง์๋ก ๋ฒ๋ค ํฌ๊ธฐ ์ฆ๊ฐ์ ์ฑ๋ฅ ๊ด๋ฆฌ ๋ถ๋ด์ด ๋ฐ์ํ ์ ์์ต๋๋ค. ๋ฐ๋ฉด Nest.js(App Router)๋ Server Component๋ฅผ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ฌ์ฉํ๊ณ ํด๋ผ์ด์ธํธ ๋ก์ง์ด ํ์ํ ๊ฒฝ์ฐ์๋ง
use client๋ฅผ ๋ช ์ํ๋๋ก ํฉ๋๋ค. ์ด ๊ตฌ์กฐ๋ ๋ถํ์ํ ํด๋ผ์ด์ธํธ ๋ก์ง ํ์ฅ์ ์ฌ์ ์ ์ต์ ํ๊ณ ๋ ๋๋ง ์ฑ ์์ ์๋ฒ์ ํด๋ผ์ด์ธํธ๋ก ๋ช ํํ ๋ถ๋ฆฌํ ์ ์๊ฒ ํฉ๋๋ค. ๋ณธ ํ๋ก์ ํธ๋ ๋ฐ์ดํฐ ์กฐํ ์ค์ฌ ํ๋ฉด๊ณผ ์ฌ์ฉ์ ์ธํฐ๋์ UI๊ฐ ๋ช ํํ ๊ตฌ๋ถ๋๋ ์๋น์ค์ด๋ฏ๋ก, ์ ์ UI๋ Server Component, ์ฌ์ฉ์ ์ธํฐ๋์ ์ Client Component๋ก ๋ถ๋ฆฌํ์ฌ ์ฑ๋ฅ ์์ ์ฑ๊ณผ ์ ์ง๋ณด์ ์ธก๋ฉด์์ ํฉ๋ฆฌ์ ์ธ ๊ตฌ์กฐ๋ผ๊ณ ์๊ฐํ์ต๋๋ค.
๋ณธ ํ๋ก์ ํธ๋ ํ ๊ฒ์๋ฌผ, ๊ฒ์ ํผ๋, ํฌํ ๊ธฐ๋ฅ, ํ๋กํ ๋ฑ ์ด๋ฏธ์ง๊ฐ ์๋น์ค ๊ฒฝํ์ ์ค์ฌ์ด ๋๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ๊ณ ์์ต๋๋ค. ์ด๋ฌํ ์๋น์ค์์๋ ๋จ์ํ ์ด๋ฏธ์ง๋ฅผ ํ์ํ๋ ๊ฒ์ ๋์ด ์ด๋ป๊ฒ ์ ๋ฌํ๊ณ ์ธ์ ๋ก๋ฉํ๋ฉฐ ์ด๋ค ํฌ๊ธฐ๋ก ์ ๊ณตํ๋์ง๊ฐ ๊ณง ์ฑ๋ฅ๊ณผ ์ฌ์ฉ์ ๊ฒฝํ์ ์ข์ฐํฉ๋๋ค.
Next.js์ next/image๋ ๋จ์ํ ์ด๋ฏธ์ง ์ปดํฌ๋ํธ๊ฐ ์๋๋ผ ์ด๋ฏธ์ง ์ ๋ฌ ์ ๋ฐ์ ํ๋ ์์ํฌ ์ฐจ์์์ ์ต์ ํํ๋ ๋๊ตฌ์
๋๋ค.
์ด๋ฅผ ํตํด
- ๋๋ฐ์ด์ค ๋ฐ ๋ทฐํฌํธ์ ๋ง๋ ์ด๋ฏธ์ง ์๋ ์ ๊ณต
- Webp / AVIF ๊ธฐ๋ฐ์ ์๋ ํฌ๋งท ๋ณํ
- Lazy loading ๊ธฐ๋ณธ ์ ์ฉ์ผ๋ก ๋ถํ์ํ ๋คํธ์ํฌ ์์ฒญ ์ต์ํ
- ์ด๋ฏธ์ง ์์ญ ์ ํ๋ณด๋ฅผ ํตํ ๋ ์ด์์ ์์ ์ฑ ๋ณด์ฅ
์ด์ ๊ฐ์ ์ต์ ํ๊ฐ ๋ณ๋์ ์ถ๊ฐ ์ค์ ์์ด ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ ์ฉ๋ฉ๋๋ค. ํนํ, ๋์ผํ ์ด๋ฏธ์ง๊ฐ ํผ๋ ๊ฒ์๋ฌผ, ์์ธ ๊ฒ์๋ฌผ, ํ๋กํ ๋ฑ ์ฌ๋ฌ ํฌ๊ธฐ์ ๋งฅ๋ฝ์์ ๋ฐ๋ณต ์ฌ์ฉ๋๋ ๊ตฌ์กฐ์์ ์ผ๊ด๋ ์ฑ๋ฅ์ ์ ์งํ๋ฉด์๋ ๊ด๋ฆฌ ๋น์ฉ์ ์ต์ํํ ์ ์์ต๋๋ค.
React + Vite ํ๊ฒฝ์์๋ ์ด๋ฏธ์ง ์ต์ ํ๋ ๊ตฌํํ ์ ์์ผ๋ ๋ฆฌ์ฌ์ด์ง, ํฌ๋งท ๋ณํ, lazy loading ๋ฑ์ ๋ก์ง์ด ์ปดํฌ๋ํธ๋ณ ํน์ ์ ํธ ๋จ์๋ก ๋ถ์ฐ๋๊ธฐ ์ฝ์ต๋๋ค.
| ๊ตฌ๋ถ | JavaScript (Dynamic) | TypeScript (Static) |
|---|---|---|
| ์ปดํ์ผ ๋ฐฉ์ | ์ธํฐํ๋ฆฌํฐ(์คํ ์ ํด์) | ํธ๋์คํ์ผ(์ปดํ์ผ ํ JS๋ก ๋ณํ) |
| ์๋ฌ ๊ฐ์ง ์์ | ๋ธ๋ผ์ฐ์ ์คํ ์ค (Runtime) | ์ปดํ์ผ ์์ ์์ ์๋ฌ ๊ฐ์ง |
| ๋ฐ์ดํฐ ๊ตฌ์กฐ ์ ์ | ์๋ฌต์ (์ฃผ์์ ์์กด) | ๋ช ์์ (Interface / Type ์ ์) |
| ๊ฐ๋ฐ ๋๊ตฌ ์ง์ | ์ ํ์ (์ง์ ํ์ธ ํ์) | ๊ฐ๋ ฅํ ์๋ ์์ฑ ๋ฐ ๊ฐ์ด๋ |
| ์ ์ง๋ณด์ | ์ฝ๋๊ฐ ๊ธธ์ด์ง์๋ก ๊ด๋ฆฌ ์ด๋ ค์ | ์ฝ๋ ์์ ์ฑ์ด ๋๊ณ ์ ์ง๋ณด์ ์ฉ์ด |
| ์คํ ํ๊ฒฝ | ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์์ ์คํ ๊ฐ๋ฅ | JS๋ก ๋ณํ ํ ์คํ ๊ฐ๋ฅ |
- ๋ณต์กํ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋ฌธ์ํ : FITCHECK์ ์ค์ฒฉ๋ ๊ฐ์ฒด๊ตฌ์กฐ๋ ์ก์์ผ๋ก ํ์ ํ๊ธฐ ์ด๋ ต์ต๋๋ค. TypeScript๋ฅผ ํตํด ๋ฐ์ดํฐ ํ์์ ์ฝ๋๋ก ๋ฌธ์ํํจ์ผ๋ก์จ ๋์ผํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ ํํ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ๋ฐ ์ ๋ขฐ๋ ํ๋ณด : ์ํ ๋ณ๊ฒฝ ๋น๋๊ฐ ๋์ ์๋น์ค ํน์ฑ์ ์๋ชป๋ ์ํ ์ ๋ฐ์ดํธ๋ ์น๋ช ์ ์ธ ๋ฐํ์ ์ค๋ฅ๋ก ์ด์ด์ง๋๋ค. ์ปดํ์ผ ๋จ๊ณ์์ ํ์ ์ฒดํฌ๋ฅผ ๊ฐ์ ํจ์ผ๋ก์จ ํ๋ก ํธ์๋์ ์๋ฒ ๊ฐ ๋ฐ์ดํฐ ๊ท๊ฒฉ์ ์ผ์น์ํค๊ณ ๋ฐ์ดํฐ ์ ๋ขฐ๋๋ฅผ ํ๋ณดํ ์ ์์ต๋๋ค.
- ๋๊ท๋ชจ ๋ฆฌํฉํฐ๋ง์ ์์ ์ฑ : ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋๊ฑฐ๋ ์๋ฒ ์๋ต ํ์์ด ๋ฐ๋ ๋, TypeScript๋ ์์ ์ด ํ์ํ ๋ชจ๋ ๊ณณ์ ์๋ฌ๋ก ์๋ ค์ค๋๋ค. ์ด๋ ์ ์ง๋ณด์ ๋น์ฉ์ ํ๊ธฐ์ ์ผ๋ก ๋ฎ์ถ๋ฉฐ ๋๊ท๋ชจ ํ๋ก์ ํธ์์๋ ๊ธฐ๋ฅ์ ํ์ฅํ ์ ์๋ ๊ธฐ๋ฐ์ด ๋ ๊ฒ์ ๋๋ค.
TanStack Query๋ ์๋ฒ ์ํ๋ฅผ ํด๋ผ์ด์ธํธ ์ ํ๋ฆฌ์ผ์ด์ ์์ ํจ์จ์ ์ผ๋ก ๋ค๋ฃฐ ์ ์๋๋ก ๋์์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. ์ฝ๊ฒ ๋งํด, ์๋ฒ์์ ๋ฐ์์ค๋ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ณ , ๋ก๋ฉ, ์๋ฌ์ฒ๋ฆฌ, ์บ์ฑ, ๋ฆฌํจ์น ๋ฑ์ ๊ณผ์ ์ ๊ฐ๋จํ๊ฒ ์ฒ๋ฆฌํด์ฃผ๋ ๋๊ตฌ์ ๋๋ค.
-
์ง๋ฅํ ์บ์ฑ
๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ ๊ฐ์ ธ์ค๋ฉด ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํด๋ก๋๋ค. ์ฌ์ฉ์๊ฐ ๋ค๋ฅธ ํ์ด์ง์ ๊ฐ๋ค๊ฐ ๋ค์ ๋์์๋ ์๋ฒ์ ๋ ๋ฌผ์ด๋ณด์ง ์๊ณ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์ฆ์ ๋ณด์ฌ์ค๋๋ค. ํ๋ฉด์ด ๊น๋นก์ด์ง ์๊ณ ์์ฃผ ๋น ๋ฅด๊ฒ ๋๊ปด์ง๋ ์ด์ ์ ๋๋ค.
-
์ํ ์๋ ๊ด๋ฆฌ
-
isLoading: ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ์ค์ธ์ง? -
isError: ์๋ฒ๊ฐ ์ฃฝ์๊ฑฐ๋ ์๋ฌ๊ฐ ๋ฌ๋์ง? -
data: ์ฑ๊ณต์ ์ผ๋ก ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๊ฐ ๋ฌด์์ธ์ง? ์ด ๊ฐ๋ค์ ์ค์๊ฐ์ผ๋ก ์ ๊ณตํด์ฃผ๋ฏ๋ก ์ฝ๋๊ฐ ๋งค์ฐ ๋จ์ํด์ง๋๋ค.
-
๋ฐ์ดํฐ ๊ด๋ฆฌ
๋ฐ์ดํฐ๊ฐ ์ํ ๋ฐ์ดํฐ์ธ์ง ์ค์ค๋ก ํ๋จํฉ๋๋ค. ๋ฐ์ดํฐ๊ฐ ์ค๋๋์๋ค๊ณ ์๊ฐํ๋ฉด ์ฌ์ฉ์๊ฐ ๋ชจ๋ฅด๋ ์ฌ์ด์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๊ฐ์ ธ์ ํ๋ฉด์ ์ต์ ์ํ๋ก ๊ฐ์ ๋ผ์์ค๋๋ค.
FITCHECK์ ์๋ฒ์ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ๊ณผ ํด๋ผ์ด์ธํธ์ ์ฆ๊ฐ์ ์ธ ์๋ต์ฑ์ ๋์์ ํ๋ณดํ๊ธฐ ์ํด Next.js์ TanStack Query์ ์บ์๋ฅผ ์ํธ ๋ณด์์ ์ผ๋ก ๋ฐฐ์นํ๋ ์ ๋ต์ ์๊ฐํด๋ดค์ต๋๋ค.
| ๊ตฌ๋ถ | Next.js Server Cache | TanStack Query (Client) |
|---|---|---|
| ์์น | ์๋ฒ ๋ฉ๋ชจ๋ฆฌ / ํ์ผ ์์คํ | ์ฌ์ฉ์ ๋ธ๋ผ์ฐ์ ๋ฉ๋ชจ๋ฆฌ |
| ๋ชฉ์ | ์ธ๋ถ API/DB ์ฌํธ์ถ ๋ฐฉ์ง | UX ์ค์ฌ ๋ฐ์ดํฐ ๋๊ธฐํ |
| ๊ด๋ฆฌ | revalidateTag ๊ธฐ๋ฐ (์๋ฒ ์ค์ฌ) | staleTime, gcTime (ํด๋ผ์ด์ธํธ ์ค์ฌ) |
| ๋ฐ์ดํฐ | ๊ณตํต ํผ๋, ์ด๊ธฐ ์ง์ ๋ฐ์ดํฐ | ๊ฐ์ธํ ๋ฐ์ดํฐ, ์ํธ์์ฉ ๊ฒฐ๊ณผ |
์ ๋ ์บ์๋ฅผ ๋ณํํ๋๊ฐ?
-
์ธํฐ๋์ ์์ ์ฑ (๋๊ด์ ์ ๋ฐ์ดํธ)
ํฌํ๋ ์ข์์์ฒ๋ผ ๋น๋ฒํ ์ธํฐ๋์ ์ด ๋ฐ์ํ๋ ๋ณธ ํ๋ก์ ํธ์์ ์๋ฒ ์ก์ ๋ง ์ฌ์ฉํ๋ฉด ๋คํธ์ํฌ ์ง์ฐ์ด UI์ ๊ทธ๋๋ก ๋ ธ์ถ๋ฉ๋๋ค. TanStack Query๋ฅผ ํตํด ๋๊ด์ ์ ๋ฐ์ดํธ๋ฅผ ์ ์ฉํจ์ผ๋ก์จ ์๋ฒ ์๋ต ์ ์ UI๋ฅผ ์ฆ๊ฐ์ ์ผ๋ก ๋ฐ์ํ๊ณ ์คํจ ์์๋ง ๋กค๋ฐฑํ๋ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
-
๋ณต์กํ ๋น๋๊ธฐ ๋ฐ์ดํฐ ๋ก์ง์ ํ์คํ
Next.js๋ ์๋ฒ ๋จ์ ๋ฐ์ดํฐ ์ ๋ฌ์ ๊ฐ์ ์ด ์์ง๋ง ๋ฌดํ ์คํฌ๋กค ๊ฐ์ ๋์ ์ธ ๋ฐ์ดํฐ ๋ณํฉ๊ณผ ๋ฉ๋ชจ๋ฆฌ ์ ์ด์๋ ํ๊ณ๊ฐ ์์ต๋๋ค.
useInfiniteQuery๋ฅผ ์ฌ์ฉํ์ฌ ํ์ด์ง ๋์ ๊ณผ ์บ์ ์ญ์ ๋ฅผ ์ ์ธ์ ์ผ๋ก ๊ด๋ฆฌํจ์ผ๋ก์จ ์ฑ๋ฅ ์ต์ ํ์ ์ฝ๋ ๊ฐ๋ ์ฑ์ ๋์ผ ์ ์์ต๋๋ค.
- ์๋ฒ ์บ์ : ์ฒซ ์ง์ ์ ์ฌ์ฉ์๊ฐ ์ฆ์ ์ฝํ ์ธ ๋ฅผ ๋ณผ ์ ์๋๋ก ๋น ๋ฅธ LCP๋ฅผ ๋ณด์ฅํฉ๋๋ค.
- ํด๋ผ์ด์ธํธ ์บ์ : ํ์ด์ง ์ด๋์ด๋ ํญ ์ ํ ํ ๋ณต๊ท ์, ์๋ฒ ์์ฒญ ์์ด ๊ธฐ์กด ๋ฐ์ดํฐ๋ฅผ ์ฆ์ ๋ณด์ฌ์ฃผ๊ณ ๋ฐฑ๊ทธ๋ผ์ด๋์์๋ง ์ต์ ํ๋ฅผ ์งํํ์ฌ ๊น๋นก์ ์๋ ํ๋ฉด ์ ํ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
Zustand๋ Next.js ์์์ ์๋ฒ์ ์ ํ ์๊ด์๋ ํด๋ผ์ด์ธํธ UI ์ํ๋ฅผ ๊ด๋ฆฌํ๋ ๋๊ตฌ์ ๋๋ค.
| ๊ตฌ๋ถ | Redux | Zustand |
|---|---|---|
| ๋ณต์ก๋ | Action, Reducer, Store ๋ฑ ๊ตฌ์กฐ ๋ณต์ก | ๋จ์ผ Store ์ค์ฌ์ ์ง๊ด์ ๊ตฌ์กฐ |
| ๋ณด์ผ๋ฌํ๋ ์ดํธ | ๋งค์ฐ ๋ง์ (์ฝ๋ ๋น๋ํ) | ๊ฑฐ์ ์์ (ํ์ํ ๊ธฐ๋ฅ๋ง ๊ฐ๊ฒฐํ๊ฒ) |
| ๋ฒ๋ค ํฌ๊ธฐ | ๋ฌด๊ฑฐ์ (๋๊ท๋ชจ ํ๋ ์์ํฌ) | ๋งค์ฐ ๊ฐ๋ฒผ์ (์ด๊ฒฝ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ) |
| ํ์ต ๊ณก์ | ๋์ (๊ฐ๋ ์ดํด์ ์๊ฐ ์์) | ๋งค์ฐ ๋ฎ์ (Hooks ๊ธฐ๋ฐ์ผ๋ก ์ง๊ด์ ) |
-
UI ์ํ ๊ด๋ฆฌ์ ์ต์ ํ๋ ๊ฐ๋ฒผ์
๋ณธ ํ๋ก์ ํธ์ ํด๋ผ์ด์ธํธ ์ํ๋ ์๋ฒ ๋ฐ์ดํฐ์ ๋นํด ๊ตฌ์กฐ๊ฐ ๋จ์ํฉ๋๋ค. Redux์ ๋ฌด๊ฑฐ์ด ์ํคํ ์ฒ๋ฅผ ๋์ ํ์ฌ ์ฝ๋ ๋ณต์ก๋๋ฅผ ๋์ด๊ธฐ ๋ณด๋ค, ํ์ํ ์ํ๋ง Hook ํํ๋ก ์ฆ์ ์์ฑํ๊ณ ๊ตฌ๋ ํ ์ ์๋ Zustand๊ฐ ๊ฐ๋ฐ ํจ์จ์ฑ ์ธก๋ฉด์์ ์๋์ ์ด๋ผ๊ณ ํ๋จํ์ต๋๋ค.
-
์ ์ฐํ ์ํ ๊ตฌ๋ ๊ณผ ์ฑ๋ฅ ์ต์ ํ
Redux๋ ์ ์ฒด ์ํ ํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ฏ๋ก ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํด ์ ๊ฒฝ ์ธ ๋ถ๋ถ์ด ๋ง์ต๋๋ค. ๋ฐ๋ฉด Zustand๋ Selector ๊ธฐ๋ฅ์ ํตํด ํน์ ์ํ๊ฐ๋ง ์ ํ์ ์ผ๋ก ๊ตฌ๋ ํ๋ ๊ฒ์ด ๊ธฐ๋ณธ์ ๋๋ค. ์ด ๋๋ถ์ ๊ด๋ จ ์๋ ์ํ๊ฐ ๋ณํ๋๋ผ๋ ํด๋น ์ปดํฌ๋ํธ๋ ๋ฆฌ๋ ๋๋ง ๋์ง ์์์ ์ฑ๋ฅ ๊ด๋ฆฌ๊ฐ ์ค์ํ ๋ชจ๋ฐ์ผ ์น ํ๊ฒฝ์์ ์ต์ ํ ํ ์ ์์ต๋๋ค.
React์์ ํผ ์ํ๋ฅผ ์ต์ํ์ ๋ฆฌ๋ ๋๋ง์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํ ํผ ์ ์ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ๋น์ ์ด ์ปดํฌ๋ํธ๋ฅผ ํตํ ์ฑ๋ฅ ์ต์ ํ : ๊ธฐ์กด React์ useState ๋ฐฉ์์ ๊ธ์ ํ๋๋ฅผ ์ ๋ ฅํ ๋ ๋ง๋ค ์ ์ฒด ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง ๋์ด ํ๋๊ฐ ๋ง์์ง์๋ก ํ์ดํ ์ง์ฐ์ด ๋ฐ์ํฉ๋๋ค. React Hook Form์ ๋น์ ์ด ์ปดํฌ๋ํธ ๋ฐฉ์์ ํ์ฉํด ์ ๋ ฅ ์ค ๋ฐ์ํ๋ ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง์ ์ฐจ๋จํ๋ฉฐ ๋๊ท๋ชจ ํผ์์๋ ์ฌ์ฉ์์๊ฒ ๋๊น ์๋ ์ ๋ ฅ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
- ๊ตฌ๋ ๊ธฐ๋ฐ์ ์ํ ์ ๋ฐ์ดํธ : ํน์ ํ๋์ ๊ฐ๋ง ๊ฐ์ํ๊ฑฐ๋ ๋ณ๊ฒฝํ๋ ๊ธฐ๋ฅ์ด ๋งค์ฐ ํจ์จ์ ์ผ๋ก ์ค๊ณ๋์ด ์์ต๋๋ค. ํ๋ฉด ์ ์ฒด๋ฅผ ์๋ก ๊ทธ๋ฆฌ์ง ์๊ณ ๋ ํน์ ์ ๋ ฅ๊ฐ์ ๋ฐ๋ฅธ ๋์ ์ธ UI ๋ณํ๋ฅผ ๊ตฌํํ ์ ์์ด ์ฑ๋ฅ ๊ด๋ฆฌ์ ๋ณต์กํ UI ๊ตฌํ์ ํด๊ฒฐํ ์ ์์ต๋๋ค.
Typescript ๊ธฐ๋ฐ ์คํค๋ง ์ ์ธ ๋ฐ ๋ฐํ์ ๋ฐ์ดํฐ ๊ฒ์ฆ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
-
๊ธฐ์กด์ ์๋ ํ์ ์ ์ ๋ฐฉ์์ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ํ์ ์ ์ธ์ด ๋๊ธฐํ๋์ง ์์ ๋ฐํ์ ์๋ฌ์ ์ฃผ์ ์์ธ์ด ๋์์ต๋๋ค. Zod๋ฅผ ํตํด ํ๋์ ์คํค๋ง์์ ํ์ ์ถ๋ก ๊ณผ ๋ฐ์ดํฐ ๊ฒ์ฆ์ ๋์์ ์ํํจ์ผ๋ก์จ ์ ์ ํ์ ์์คํ ๊ณผ ์ค์ ๋ฐ์ดํฐ ์ฌ์ด์ ๊ฐ๊ทน์ ์๋ฒฝํ ์ ๊ฑฐํ์ต๋๋ค. ์ด๋ API ์๋ต์ด๋ ์ฌ์ฉ์ ์ ๋ ฅ ๋ฑ ์ธ๋ถ ๋ฐ์ดํฐ๊ฐ ์ ์ ๋๋ ์ง์ ์์ ๊ฐ๋ ฅํ ๋ฐฉ์ด๋ง ์ญํ ์ ์ํํฉ๋๋ค.
-
๋ช ๋ นํ ์กฐ๊ฑด๋ฌธ์ผ๋ก ํฉ์ด์ ธ ์๋ ๊ฒ์ฆ ๋ก์ง์ ๋จ์ผ ์คํค๋ง ์ ์๋ก ํตํฉํ์ต๋๋ค. ๋ฉ์๋ ์ฒด์ด๋ ๊ธฐ๋ฐ์ ์ ์ธ์ ๊ตฌ์กฐ๋ฅผ ํ์ฉํ์ฌ ๋ฐ์ดํฐ ๊ท๊ฒฉ์ ์ฝ๋ ์์ฒด๋ก ๋ฌธ์ํํ์ผ๋ฉฐ ๋น์ฆ๋์ค ๊ท์น ๋ณ๊ฒฝ ์ ํด๋น ์คํค๋ง๋ง ์์ ํ๋ฉด ํ์ ๊ณผ ๊ฒ์ฆ๋ก์ง์ด ์ฆ์ ๋๊ธฐํ๋๋ ๋์ ์ ์ง๋ณด์์ฑ์ ํ๋ณดํ์ต๋๋ค.
๋ณธ ํ๋ก์ ํธ์์๋ ์ ๋ ฅ ํผ๊ณผ ์ฌ์ฉ์ ์ธํฐ๋์ ์ด ๋น๋ฒํ ์๋น์ค๋ก ํด๋ผ์ด์ธํธ์์๋ React Hook Form์ ์ฌ์ฉํด ํผ ์ํ๋ฅผ ๊ฐ๋ณ๊ฒ ๊ด๋ฆฌํ๊ณ , Zod๋ฅผ ํตํด ์ ๋ ฅ ๋ฐ์ดํฐ์ ๊ตฌ์กฐ์ ๊ฒ์ฆ ๊ท์น์ ๋ช ํํ ์ ์ํ ์ ์์ต๋๋ค.
Next.js ํ๊ฒฝ์์๋ ๋์ผํ Zod ์คํค๋ง๋ฅผ ์๋ฒ์์๋ ์ฌ์ฌ์ฉํจ์ผ๋ก์จ ํด๋ผ์ด์ธํธ UX์ ์๋ฒ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ๋์์ ํ๋ณดํ ์ ์์ต๋๋ค.
- Tailwind css๋ ๋น๋ ํ์์ ์ ์ CSS ํ์ผ์ ์์ฑํ๋ฏ๋ก ๋ชจ๋ ์คํ์ผ ๋ก์ง์ด ์๋ฒ ์ปดํฌ๋ํธ ํ๊ฒฝ๊ณผ ์ถฉ๋ ์์ด ๋์ํฉ๋๋ค. ์ด๋ Next.js์ ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง ๋ฐ ์ ์ ์ฌ์์ฑ ๊ณผ์ ์์ ์คํ์ผ ๊ณ์ฐ์ ์ํ ์ถ๊ฐ ์ค๋ฒํค๋๋ฅผ ๋ฐ์์ํค์ง ์์ ์ด๊ธฐ์๋ต์๋๋ฅผ ์ต์ ํ ํ ์ ์์ต๋๋ค.
- ์คํ์ผ ์ํธ๊ฐ ๋ธ๋ผ์ฐ์ ์คํ ์์ ์ ๋์ ์ผ๋ก ์์ฑ๋์ง ์๊ธฐ ๋๋ฌธ์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฉ์ธ ์ค๋ ๋์ ๋ถ๋ด์ ์ค์ ๋๋ค. ํนํ ์ด๋ฏธ์ง ์ฝํ ์ธ ๊ฐ ์ค์ฌ์ธ FITCHECK ์๋น์ค์์ ์คํ์ผ ์ฐ์ฐ ๋น์ฉ์ ์ ๊ฑฐํจ์ผ๋ก์จ ์ฌ์ฉ์์ ๊ธฐ๊ธฐ ์ฌ์์ ๊ด๊ณ์์ด ๋ถ๋๋ฌ์ด ๋ ์ด์์ ๋๋๋ง๊ณผ ์๊ฐ์ ์์ ์ฑ์ ์ ๊ณตํฉ๋๋ค.
- ๋น ๋ฅธ UI ๋ฐ๋ณต ์ฃผ๊ธฐ๋ฅผ ์ฌ์ง ํ๋ก์ ํธ์์ ๋์์ธ ์ผ๊ด์ฑ์ ์ ์งํ๊ณ ๋ถํ์ํ ์ค๋ณต CSS ์์ฑ์ ๋ฐฉ์งํ์ฌ ์ ์ฒด ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ฒ ํฉ๋๋ค.
- ์ํ ๋ณํ์ ๋ฐ๋ผ ์คํ์ผ์ ๋์ ์ผ๋ก ์์ฑํ๋ ๊ณผ์ ์์ JS CPU ์ ์ ์จ์ด ์์นํฉ๋๋ค. ์ํธ์์ฉ์ด ์ฆ๊ณ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ๋ ๋๋งํด์ผ ํ๋ FITCHECK ์ธํฐํ์ด์ค ํน์ฑ์ ์ด๋ฌํ ๋ฐํ์ ์คํ์ผ ์ฐ์ฐ์ ์ฌ์ฉ์ ๊ฒฝํ์ ๋ฏธ์ธํ ๋ฒ๋ฒ ์์ ์ด๋ํ ์ ์๋ค๊ณ ํ๋จํ์ต๋๋ค.
- ์๋ฒ์์ ์์ฑ๋ HTML๊ณผ ํด๋ผ์ด์ธํธ ์คํ์ผ ์ํธ๋ฅผ ๋๊ธฐํ ํ๋ ๊ณผ์ ์์ ์ถ๊ฐ์ ์ธ ๋น์ฉ์ด ๋ฐ์ํฉ๋๋ค. ๊ธฐ์ ์ ๋ณต์ก๋๋ฅผ ๋ฎ์ถ๊ณ ๋ฐ์ดํฐ ๋ก๋ฉ ์๋๋ฅผ ๊ทน๋ํํ๊ธฐ ์ํด ์ ์ ์คํ์ผ๋ง ๋ฐฉ์์ ์ ํํ์ต๋๋ค.
| ๊ตฌ๋ถ | Next.js 15 | Next.js 16 |
|---|---|---|
| ๊ธฐ๋ณธ ๋ฒ๋ค๋ฌ | Webpack | Turbopack (๊ธฐ๋ณธ) |
| React ๋ฒ์ | React 18 | React 19 |
| ๋ ๋๋ง ์ต์ ํ | ๊ฐ๋ฐ์ ์๋ ์ต์ ํ | React Compiler ์๋ ์ต์ ํ |
| Prefetch ์ ๋ต | ํ์ด์ง ๋จ์ | Incremental Prefetching |
Next.js 15๊น์ง๋ Webpack์ ๊ธฐ๋ณธ ๋ฒ๋ค๋ฌ๋ก ์ฌ์ฉํ์ต๋๋ค. Webpack์ ์์ ์ ์ด์ง๋ง ๋ชจ๋ ๊ทธ๋ํ ์ ์ฒด๋ฅผ ๊ธฐ์ค์ผ๋ก ๋น๋๋ฅผ ์ํํ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ ๋จ๊ณ์์ ์ฝ๋ ๋ณ๊ฒฝ ์ ๋น๋ ์๋๊ฐ ์ ์ง์ ์ผ๋ก ๋๋ ค์ง๋ ํ๊ณ๊ฐ ์์์ต๋๋ค. ๋ฐ๋ฉด, Next.js 16๋ฒ์ ์์์ Turbopack์ Rust ๊ธฐ๋ฐ์ ๋ณ๋ ฌ ์ฒ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ํตํด ๊ฐ๋ฐ ํ๊ฒฝ์์ ๋น ๋ฅธ ๋น๋ ์๋๋ฅผ ์ ๊ณตํฉ๋๋ค. ๊ธฐ์กด Webpack์ด Javascript๋ก ์์ฑ๋์ด ๋จ์ผ ์ค๋ ๋ ์ฒ๋ฆฌ ๋ฐฉ์์ด์๋ ๋ฐ๋ฉด, Turbopack์ ๋ฉํฐ ์ค๋ ๋ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ํตํด ์ปดํ์ผ๊ณผ ๋ฒ๋ค๋ง์ ๋์์ ์ํํ ์ ์์ด ์๋๋ฉด์์ ์ฐจ์ด๋ฅผ ๋ณด์ธ๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค.
Next.js 15๊น์ง๋ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํด useMemo, useCallback, React.memo ๋ฑ์ ๊ฐ๋ฐ์๊ฐ ์ง์ ์ค๊ณํด์ผ ํ์ต๋๋ค. ์ด๋ ์ฝ๋ ๋ณต์ก๋ ์ฆ๊ฐ, ๊ณผ๋ํ ๋ฉ๋ชจ์ด์ ์ด์ ๋๋ ๋๋ฝ์ผ๋ก ์ธํ ์ฑ๋ฅ ๋ถ์์ ์ฑ ์ด๋ผ๋ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค. Next.js 16์ React 19๊ธฐ๋ฐ React Compiler๋ฅผ ๊ธฐ๋ณธ ์ง์ํ๋ฉฐ, ์ปดํ์ผ ๋จ๊ณ์์ ์๋์ผ๋ก ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง์ ์ ๊ฑฐํฉ๋๋ค. ์ด๋ก ์ธํด ์ํ ๋ณ๊ฒฝ ์ ํ์ํ ์ปดํฌ๋ํธ๋ง ์ฌ๋ ๋๋ง ๋ฉ๋๋ค.
Next.js 15์ prefetch๋ ํ์ด์ง ๋จ์๋ก ๋์ํ์ฌ ์ฌ์ฉ์๊ฐ ์ค์ ๋ก ์ง์ ํ์ง ์๋๋ผ๊ณ ํด๋น ํ์ด์ง ์ ์ฒด ๋ฆฌ์์ค๋ฅผ ๋ฏธ๋ฆฌ ๋ค์ด๋ก๋ํ๋ ๊ตฌ์กฐ์์ต๋๋ค. Next.js 16์ Incremental Prefetching์ ์ปดํฌ๋ํธ ๋จ์๋ฅผ ๊ธฐ์ค์ผ๋ก ํ์ํ ๋จ์๋ง ์ ์ง์ ์ผ๋ก prefetchํฉ๋๋ค. ์ด ๋ฐฉ์์ ๋คํธ์ํฌ ์ฌ์ฉ๋ ๊ฐ์๋๋ฉฐ ํด๋ฆญ ์ง์ ํ์ํ ๋ฆฌ์์ค๋ง ์ค๋น๋ฉ๋๋ค. ํ์ด์ง ์ ํ ์ฒด๊ฐ ์๋๋ฅผ ์์ ์ ์ด๊ฒ ํด์ค๋๋ค.
| ๊ตฌ๋ถ | TypeScript 4.x | TypeScript 5.x |
|---|---|---|
| ์ปดํ์ผ ์ฑ๋ฅ | ๋ณดํต | ๋ ๋น ๋ฆ |
| ํ์ ์ฒดํฌ ์๋ | ํ์ผ ์ ์ฆ๊ฐ ์ ๋๋ ค์ง | ๋๊ท๋ชจ ํ๋ก์ ํธ์์๋ ์์ ์ |
| ํ์ ์ถ๋ก ์ ํ๋ | ์ ํ์ | ๋ ์ ๊ตํจ |
| ํ์ ๋จ์ธ(as) ์ฌ์ฉ | ์์ฃผ ํ์ | ์ฌ์ฉ ๋น๋ ๊ฐ์ |
| ์ ๋ค๋ฆญ ์ถ๋ก | ๊ฒฝ์ฐ์ ๋ฐ๋ผ ๋ถ์์ | ๊ฐ์ ๋จ |
| ์กฐ๊ฑด๋ถ ํ์ ์ฒ๋ฆฌ | ๋ณต์กํ ์๋ก ๋ถ์์ | ์ ํ๋ ํฅ์ |
| IDE ๋ฐ์ ์๋ | ํ๋ก์ ํธ ์ปค์ง์๋ก ์ ํ | ์๋์์ฑยท์๋ฌ ํ์ ๊ฐ์ |
TypeScript 4.x์์๋ ๊ธฐ๋ณธ์ ์ธ ํ์ ์์ ์ฑ์ ํ๋ณดํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ํ๋ก์ ํธ ๊ท๋ชจ๊ฐ ์ปค์ง์๋ก ํ์ผ ์ ์ฆ๊ฐ์ ๋ฐ๋ฅธ ํ์ ์ฒดํฌ ์๋ ์ ํ, ๋ณต์กํ ์ ๋ค๋ฆญ ๋ฐ ์กฐ๊ฑด๋ถ ํ์ ์ฌ์ฉ ์ ํ์ ์ถ๋ก ํ๊ณ, ์ด๋ฅผ ๋ณด์ํ๊ธฐ ์ํ ์ฆ์ as ํ์ ๋จ์ธ ์ฌ์ฉ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ ๊ฐ๋ฐ ๊ณผ์ ์์ ์์ฐ์ฑ์ ๋จ์ด๋จ๋ฆด ๋ฟ ์๋๋ผ, ํ์ ์์คํ ์ ๋ํ ์ ๋ขฐ๋๋ฅผ ๋ฎ์ถ๋ ์์ธ์ด ๋ฉ๋๋ค.
TypeScript 5.x๋ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ๊ฐ์ ํ๋ ๋ฐ ์ด์ ์ ๋ง์ถ ๋ฒ์ ์ ๋๋ค. ์ปดํ์ผ ์ฑ๋ฅ๊ณผ ํ์ ์ถ๋ก ์ ํ๋๊ฐ ์ ๋ฐ์ ์ผ๋ก ํฅ์๋์ด, ์ฝ๋๋ฒ ์ด์ค๊ฐ ์ปค์ง๋๋ผ๋ ํ์ ์ฒดํฌ ์๋์ IDE ๋ฐ์์ฑ์ด ์์ ์ ์ผ๋ก ์ ์ง๋ฉ๋๋ค. ๊ทธ ๊ฒฐ๊ณผ ํ์ ์ค๋ฅ๋ฅผ ๋ฐํ์ ์ด์ ๋จ๊ณ์์ ๋ ๋ง์ด ์ฌ์ ์ ๋ฐ๊ฒฌํ ์ ์์ผ๋ฉฐ, ๋ถํ์ํ ํ์ ๋จ์ธ ์ฌ์ฉ์ด ์ค์ด๋ค์ด ์ฝ๋์ ์ ๋ขฐ์ฑ๊ณผ ๊ฐ๋ ์ฑ์ด ํจ๊ป ๊ฐ์ ๋ฉ๋๋ค.
๋ํ TypeScript 5.x๋ React 19์ Next.js 16์ ํ์ ๊ตฌ์กฐ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๊ณ๋์ด ์์ต๋๋ค. ์ต์ ํ๋ ์์ํฌ ํ๊ฒฝ์์ ๋ฐ์ํ ์ ์๋ ํ์ ์ถฉ๋์ด ์ค์ด๋ค๊ณ , ํ๋ ์์ํฌ ์ ๋ฐ์ดํธ์ ๋ฐ๋ฅธ ์ ์ง๋ณด์ ๋น์ฉ๋ ๋ฎ์ถ ์ ์์ต๋๋ค.
FITCHECK๋ ํฌํ, ํ๋ก์ฐ, ๊ฒ์๋ฌผ ๋ฑ ์๋ก ๊ฐํ๊ฒ ์ฐ๊ฒฐ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๋ค๋ฃจ๋ ์๋น์ค์ ๋๋ค. ์ด๋ฌํ ํ๊ฒฝ์์๋ ํ์ ์ ํ๋๊ฐ ๊ณง ๊ธฐ๋ฅ ์์ ์ฑ๊ณผ ์ง๊ฒฐ๋๊ธฐ ๋๋ฌธ์, ๋๊ท๋ชจ ์ฝ๋๋ฒ ์ด์ค์์๋ ํ์ ์์คํ ์ ์ผ๊ด์ฑ์ ์ ์งํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก TypeScript 5.x๋ ํ์ฅ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ์ฅ๊ธฐ์ ์ผ๋ก ๊ณ ๋ คํ์ ๋ ๊ฐ์ฅ ํฉ๋ฆฌ์ ์ธ ์ ํ์ง๋ผ๊ณ ํ๋จํ์ต๋๋ค.
| ๊ตฌ๋ถ | v4 (์ด์ ) | v5 (ํ์ฌ) |
|---|---|---|
| ์ธ์ ์ ๋ฌ | useQuery(key, fn, options) (ํผํฉ ๊ฐ๋ฅ) | useQuery({ ... }) (๊ฐ์ฒด๋ง ๊ฐ๋ฅ) |
| ์บ์ ์ญ์ ์๊ฐ | cacheTime | gcTime |
| ๋ก๋ฉ ์ํ๋ช | status: 'loading', isLoading | status: 'pending', isPending |
| ์ฑ๊ณต/์คํจ ์ฝ๋ฐฑ | onSuccess, onError (useQuery ๋ด ์กด์ฌ) | ์ ๊ฑฐ๋จ (useEffect๋ ์ ์ญ ์ค์ ๊ถ์ฅ) |
| Suspense | useQuery(..., { suspense: true }) | useSuspenseQuery() (์ ์ฉ ํ ) |
-
API ๊ตฌ์กฐ ๋จ์ํ : ๊ฐ์ฒด ๊ธฐ๋ฐ ์ธ์ ์ ๋ฌ Tanstack Query v4์์๋ key, fn, options๋ฅผ ํผํฉ ์ ๋ฌํ ์ ์์ด ํ ์ฌ์ฉ ๋ฐฉ์์ด ์ผ๊ด๋๊ธฐ ์ด๋ ต๊ณ ์ต์ ๋๋ฝ์ด๋ ์์์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ์ฌ์ ์ต๋๋ค. ํ์ง๋ง, Tanstack Query v5์์๋ ๋ชจ๋ ์ต์ ์ ๊ฐ์ฒด ํํ๋ก๋ง ์ ๋ฌํ๋๋ก ๊ฐ์ ํ์ฌ ํ ์ฌ์ฉ ๋ฐฉ์์ ํต์ผํ๊ณ ์ต์ ๊ฐ๋ ์ฑ์ ํฅ์์ํค๋ฉฐ ํ์ ์ถ๋ก ์ ์์ ํ์ํต๋๋ค.
-
์บ์ ์๋ช ์ฃผ๊ธฐ ๋ช ํํ : cacheTime -> gcTime Tanstack Query v4์ cacheTime์ ์ธ์ ์บ์๊ฐ ์ญ์ ๋๋์ง ์ง๊ด์ ์ผ๋ก ์ดํดํ๊ธฐ ์ด๋ ค์ด ๋จ์ด์์ต๋๋ค. v5์ gcTime์ ๊ฐ๋น์ง ์ปฌ๋ ์ ๋์์ด ๋๋ ์๊ฐ์ ๋ช ํํ ๋๋ฌ๋ด์ด ์บ์ ์ ์ง ์์ , ๋ฉ๋ชจ๋ฆฌ ํด์ ๊ธฐ์ค, ๋นํ์ฑ ์ฟผ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ๋ ๋ช ํํ๊ฒ ์ ์ดํ ์ ์์ต๋๋ค.
-
์ํ ๋ช ๋ช ๊ฐ์ : loading -> pending 'loading'์ ๋ฐ์ดํฐ๊ฐ ์์ ์๋ ์ํ ๋ฟ๋ง ์๋๋ผ ๋ค์ ๋ถ๋ฌ์ค๋ ์ํ ๋ฑ ์ค์์ ์ผ๋ก ์ฐ์ผ ์ ์์ต๋๋ค. v5์์๋ "์์ง ๊ฒฐ๊ณผ๊ฐ ๋์ค์ง ์์ ๋๊ธฐ์ค"์ด๋ผ๋ ์๋ฏธ์ธ pending์ ์ฌ์ฉํ์ฌ ์ํ๋ฅผ ๋ ์ธ๋ถํํ์ต๋๋ค.
-
์ฌ์ด๋ ์ดํํธ ๋ถ๋ฆฌ : ์ฑ๊ณต ๋ฐ ์คํจ ์ฝ๋ฐฑ ์ ๊ฑฐ v4์์๋ useQuery ๋ด๋ถ์ onSuccess, onError๋ฅผ ๋ ์ ์์ด ๋ฐ์ดํฐ ํจ์นญ๊ณผ ๋ถ์ํจ๊ณผ๊ฐ ์์ด๋ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค. v5์์๋ ๋ฐ์ดํฐ๋ ์ฟผ๋ฆฌ๋ก ๊ฐ์ ธ์ค๊ณ ๊ทธ์ ๋ฐ๋ฅธ ํ๋์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ์ปดํฌ๋ํธ๋ ์ ์ญ ์ค์ ์์ ์ฒ๋ฆฌํ๋ผ๋ ์ฒ ํ์ ๊ฐ์ ํ์ฌ ์ฝ๋์ ์ผ๊ด์ฑ์ ๋์์ต๋๋ค.
-
Suspense ์ฌ์ฉ์ฑ ๊ฐ์ v4์์๋ ์ต์ ์ค์ ๋ง์ผ๋ก๋ ๋ฐ์ดํฐ๊ฐ ๋ฌด์กฐ๊ฑด ์กด์ฌํ๋ค๋ ์ฌ์ค์ ํ์ ์คํฌ๋ฆฝํธ์ ์๋ฆด ์ ์์ด ๋ถํ์ํ ์์ธ ์ฒ๋ฆฌ ์ฝ๋๊ฐ ์์์ง๋ง v5์ ์ ์ฉ ํ ์ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ ๋๋ง ์ปดํฌ๋ํธ๊ฐ ์คํ๋จ์ ํ์ ์์ค์์ ๋ณด์ฅํฉ๋๋ค.
| ๊ตฌ๋ถ | Zustand 3.x | Zustand 4.x |
|---|---|---|
| ์ต์ React ํ์ค | ๋ ๊ฑฐ์ ํจํด ํผ์ฌ | useSyncExternalStore ๋์ |
| ์ํ ์์ ์ฑ | ๋์์ฑ ๋ ๋๋ง ์ ๋ฐ์ดํฐ ๋ถ์ผ์น ์ํ | Tearing(ํ๋ฉด ์ฐข์ด์ง) ๋ฐฉ์ง |
| TypeScript | ๊ธฐ๋ณธ ์์ค์ ํ์ ์ง์ | ์ ๊ตํ ํ์ ์ถ๋ก ์์คํ |
| ์ต์ ํ | ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง ๋ฐ์ ๊ฐ๋ฅ | Selector ์์ ์ฑ ๊ฐํ |
- React ์ต์ ํ์ค ์ค์ : React 18๋ถํฐ ํ์ค์ด ๋
useSyncExternalStore๋ฅผ ๋ด๋ถ์ ์ผ๋ก ์ฌ์ฉํ์ฌ, React 19์ ๋์์ฑ ๋ ๋๋ง ํ๊ฒฝ์์๋ ๋ฐ์ดํฐ๊ฐ ๊ผฌ์ด์ง ์๊ณ ํญ์ ์ผ๊ด๋ ๊ฐ์ ํ๋ฉด์ ๋ณด์ฌ์ค๋๋ค. - ์์ ํ ํ์ ์์คํ : 4๋ฒ์ ์์ ๊ฐํ๋ ํ์ ์ถ๋ก ๊ธฐ๋ฅ์ React 19์ ํจ๊ป ์ฌ์ฉํ๋ ์ต์ TypeScript ํ๊ฒฝ์์ ๊ฐ๋ ฅํ ์์ ์ฑ์ ์ ๊ณตํ๋ฉฐ ๊ฐ๋ฐ์์ ์ค์๋ฅผ ์ปดํ์ผ ๋จ๊ณ์์ ์ฐจ๋จํฉ๋๋ค.
- ์ฑ๋ฅ ์ต์ ํ ์๋ํ : Selector์ ์์ ์ฑ์ด ๋ํญ ๊ฐ์ ๋์ด ์ํ๊ฐ ๋ณํ ๋ ํ์ํ ์ปดํฌ๋ํธ๋ง ์ ํํ๊ฒ ๋ค์ ๊ทธ๋ฆฝ๋๋ค. ์ด๋ ์ฑ๋ฅ ๊ด๋ฆฌ๊ฐ ์ค์ํ ๋๊ท๋ชจ ํ๋ก์ ํธ์์ ๋ณ๋์ ์ต์ ํ ์์ ์์ด๋ ์๋์ ์ธ ํผํฌ๋จผ์ค๋ฅผ ์ ์งํ ์ ์๊ฒ ํด์ค๋๋ค.
| ๊ตฌ๋ถ | React Hook Form 6.x | React Hook Form 7.x |
|---|---|---|
| ์ค๊ณ ์ฒ ํ | ๊ธฐ๋ฅ ์ค์ฌ | ์ฑ๋ฅยท์ผ๊ด์ฑ ์ค์ฌ |
| ๋ ๋๋ง ๋ฐฉ์ | ์ํ ๋ณํ ์ ๋ฆฌ๋ ๋ ๊ฐ๋ฅ | ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง ์ต์ํ |
| Controlled / Uncontrolled | ํผํฉ ์ฌ์ฉ | Uncontrolled ์ค์ฌ ๋ช ํํ |
| API ์ผ๊ด์ฑ | ์ผ๋ถ ์ต์ ํผ์ฌ | API ๊ตฌ์กฐ ์ ๋ฆฌ ๋ฐ ๋จ์ํ |
| Form State ๊ด๋ฆฌ | ์์กด๋ ๋์ | ๊ตฌ๋ ๊ธฐ๋ฐ ์ํ ๊ด๋ฆฌ ๊ฐํ |
| ์ฑ๋ฅ ์ต์ ํ | ์๋ ์ต์ ํ ํ์ | ๊ธฐ๋ณธ ์ฑ๋ฅ ์ต์ ํ ์ ๊ณต |
| TypeScript ์ง์ | ์ฌ์ฉ ๊ฐ๋ฅ | ํ์ ์ถ๋ก ์ ํ๋ ํฅ์ |
| ๋๊ท๋ชจ Form ๋์ | ์ปค์ง์๋ก ๊ด๋ฆฌ ๋ถ๋ด | ๋ณต์กํ Form์๋ ์์ ์ |
React Hook Form 6.x๋ ํผ ๊ตฌ์ฑ์ ๋ํ ์์ ๋๊ฐ ๋์ง๋ง,ํผ์ด ๋ณต์กํด์ง์๋ก ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง๊ณผ Form State ์์กด ์ฆ๊ฐ๋ก ์ธํด ์ฑ๋ฅ ์ ํ์ ๊ด๋ฆฌ ๋ณต์ก๋๊ฐ ํจ๊ป ์ฆ๊ฐํ๋ ๊ตฌ์กฐ์ ๋๋ค. React Hook Form 7.x๋ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Form ์ํ ๊ด๋ฆฌ ๋ฐฉ์์ ๋ช ํํ ์ ๋ฆฌํ๊ณ ์ฑ๋ฅ ์ค์ฌ์ผ๋ก ์ฌ์ค๊ณ๋ ๋ฒ์ ์ ๋๋ค. ์ ๋ ฅ๊ฐ ๋ณ๊ฒฝ ์ ์ ์ฒด Form์ด ๋ฆฌ๋ ๋๋ง๋์ง ์๋๋ก ์ค๊ณ๋์ด, ์ ๋ ฅ ํ๋๊ฐ ๋ง์ ํ๋ฉด์์๋ UI ๋ฐ์์ฑ์ด ์์ ์ ์ผ๋ก ์ ์ง๋ฉ๋๋ค.
Form State๋ฅผ ํ์ํ ์ปดํฌ๋ํธ๋ง ์ ํ์ ์ผ๋ก ๊ตฌ๋ ํ๋๋ก ๊ตฌ์กฐ๊ฐ ์ ๋ฆฌ๋์ด, ์๋ฌ ํ์, validation ์ํ, submit ๊ฐ๋ฅ ์ฌ๋ถ ๋ฑ์ UI ๋ก์ง์ ๋ช ํํ ๋ถ๋ฆฌํ ์ ์์ต๋๋ค. TypeScript ํ์ ์ถ๋ก ์ด ๊ฐ์ ๋์ด, ํ๋ ์ด๋ฆ ์คํ๋ Form ๋ฐ์ดํฐ ๊ตฌ์กฐ ์ค๋ฅ๋ฅผ ์ปดํ์ผ ๋จ๊ณ์์ ์ฌ์ ์ ์ฐจ๋จํ ์ ์์ต๋๋ค.
๋ณธ ํ๋ก์ ํธ์์๋ ํ์๊ฐ์ , ํ๋กํ ์์ , ๊ฒ์๋ฌผ ์์ฑ ๋ฑ ํผ ๊ธฐ๋ฐ ์ธํฐ๋์ ์ด ์ฆ์ ์๋น์ค์์๋ ์ ๋ ฅ ์ค ์ฑ๋ฅ ์์ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ด ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ด๋ฌํ ์๊ตฌ์ฌํญ์ ์ข ํฉํ์ ๋, React Hook Form 7.x๋ ๋๊ท๋ชจ ํผ์์๋ ์ฑ๋ฅ๊ณผ ๊ตฌ์กฐ๋ฅผ ์์ ์ ์ผ๋ก ์ ์งํ ์ ์๋ ๊ฐ์ฅ ์ ํฉํ ์ ํ์ด๋ผ๊ณ ํ๋จํ์ต๋๋ค.
| ๊ตฌ๋ถ | Zod 2.x | Zod 3.x |
|---|---|---|
| ์ค๊ณ ๋ฐฉํฅ | ๊ธฐ๋ณธ์ ์ธ ์คํค๋ง ๊ฒ์ฆ | ํ์ ์ค์ฌ ์คํค๋ง ์ค๊ณ |
| TypeScript ์ฐ๋ | ์ ํ์ | Type Inference ๊ฐํ |
| ํ์ ์ถ๋ก ์ ํ๋ | ๋ถ๋ถ์ | ์ ํํ๊ณ ์ผ๊ด๋จ |
| ๋ฐํ์ ๊ฒ์ฆ | ๊ฐ๋ฅ | ์ ๊ตํ๊ณ ์์ ์ |
| ์๋ฌ ๊ตฌ์กฐ | ๋จ์ ๋ฉ์์ง ์ค์ฌ | ๊ตฌ์กฐํ๋ ์๋ฌ ์ ๋ณด |
| ์ปค์คํ ๊ฒ์ฆ | ๊ฐ๋ฅํ๋ ๋ณต์ก | ์ง๊ด์ ์ธ refine/superRefine |
| Form ์ฐ๋ | ๊ฐ๋ฅ | RHF ๋ฑ๊ณผ ์์ฐ์ค๋ฌ์ด ์ฐ๋ |
| API ์์ ์ฑ | ๋ณ๋ ๊ฐ๋ฅ์ฑ | ์์ ํ๋ API |
| ๋๊ท๋ชจ ์คํค๋ง | ๊ด๋ฆฌ ๋ถ๋ด | ํ์ฅ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ ๊ฐ์ |
Zod 2.x์์๋ ๊ธฐ๋ณธ์ ์ธ ์ ํจ์ฑ ๊ฒ์ฆ์ ๊ฐ๋ฅํ์ง๋ง, ์คํค๋ง์ TypeScript ํ์ ์ด ์์ ํ ์ผ์นํ์ง ์์ ํ๋ก์ ํธ ๊ท๋ชจ๊ฐ ์ปค์ง์๋ก ํ์ ๊ด๋ฆฌ ๋น์ฉ๊ณผ ๋ถ์ผ์น ์ํ์ด ์ปค์ง๋ ๊ตฌ์กฐ์์ต๋๋ค.
Zod 3.x๋ ์คํค๋ง ์ ์๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฐํ์ ๊ฒ์ฆ๊ณผ TypeScript ํ์ ์ถ๋ก ์ ๋์์ ํด๊ฒฐํ ์ ์๋๋ก ์ค๊ณ๋ ๋ฒ์ ์ ๋๋ค. ํ๋์ ์คํค๋ง๋ก ์ ๋ ฅ๊ฐ ๋ฐํ์ ๊ฒ์ฆ, Form ๋ฐ์ดํฐ ํ์ ์ถ๋ก , API ์์ฒญ ๋ฐ ์๋ต ํ์ ์ผ๊ด์ฑ์ ํจ๊ป ๊ด๋ฆฌํ ์ ์์ด, ํ๋ก ํธ์๋ ์ ๋ฐ์์ ๋จ์ผ ๊ธฐ์ค์ ์ ์งํ ์ ์์ต๋๋ค.
๋ํ React Hook Form๊ณผ ๊ฒฐํฉํ์ ๋ ๊ฒ์ฆ, ์๋ฌ ๊ด๋ฆฌ, ์กฐ๊ฑด๋ณ Validation ๋ก์ง์ด ์ ์ธ์ ์ผ๋ก ์ ๋ฆฌ๋์ด ํผ ๊ท๋ชจ๊ฐ ์ปค์ ธ๋ ๊ตฌ์กฐ๊ฐ ๋ณต์กํด์ง์ง ์์ต๋๋ค. ์ด๋ฌํ ํน์ฑ ๋๋ถ์ Zod 3.x๋ ์๋น์ค๊ฐ ํ์ฅ๋ ์๋ก ์ ์ง๋ณด์์ฑ๊ณผ ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ์์ ์ ์ผ๋ก ํ๋ณดํ ์ ์๋ ์ ํ์ง๋ผ๊ณ ํ๋จํ์ต๋๋ค.