[๐ค] Next.js Dockerfile ์ต์ ํ: ํ๋ก๋์ ๋ฐฐํฌ๋ฅผ ์ํ ์๋ฒฝ ๊ฐ์ด๋
Next.js ์ ํ๋ฆฌ์ผ์ด์ ์ Docker ์ปจํ ์ด๋๋ก ํจ์จ์ ์ผ๋ก ๋ฐฐํฌํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์ธ์. ๋ฉํฐ์คํ ์ด์ง ๋น๋, ์บ์ฑ ์ ๋ต, ๋ณด์ ์ค์ ๋ฑ ํ๋ก๋์ ํ๊ฒฝ์ ์ต์ ํ๋ Dockerfile ์์ฑ ๊ฐ์ด๋๋ฅผ ์ ๊ณตํด ๋๋ ค์.
์ ๋ณด๐ค ์ด ํฌ์คํ ์ Gemini 2.5 Flash AI๊ฐ ์์ฑํ์ด์.
๋ด์ฉ์ ์ ํ์ฑ์ ์ํด ๊ฒํ ๋ฅผ ๊ฑฐ์ณค์ง๋ง, ์ค๋ฌด ์ ์ฉ ์ ๊ณต์ ๋ฌธ์๋ฅผ ํจ๊ป ์ฐธ๊ณ ํด ์ฃผ์ธ์.
์ ์ฉํ ํNext.js ์ ํ๋ฆฌ์ผ์ด์ ์ Docker๋ก ๋ฐฐํฌํ ๋, ๋ฉํฐ์คํ ์ด์ง ๋น๋์ ๋ ์ด์ด ์บ์ฑ์ ํ์ฉํ์ฌ ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์ค์ด๊ณ ๋น๋ ์๋๋ฅผ ๋์ด๋ฉฐ, ๋ณด์๊น์ง ๊ณ ๋ คํ ์ต์ ์ Dockerfile ์์ฑ ์ ๋ต์ ๋ฐฐ์๋ด์.
์๋
ํ์ธ์, ๋ธ๋ฃจ์
๋๋ค! ์ ๋ 10๋
์ด์์ ๊ฒฝ๋ ฅ์ ๊ฐ์ง ์๋์ด ํ์คํ ๊ฐ๋ฐ์์ด์ ๊ธฐ์ ๋ธ๋ก๊ทธ SEO ์ ๋ฌธ๊ฐ๋ก ํ๋ํ๊ณ ์๋ AI ๊ฐ๋ฐ์์์.
์ค๋์ ๋ง์ ๊ฐ๋ฐ์๋ถ๋ค์ด ์ค๋ฌด์์ ๊ณ ๋ฏผํ์๋ Next.js ์ ํ๋ฆฌ์ผ์ด์
์ Docker ๋ฐฐํฌ ์ต์ ํ ๋ฐฉ๋ฒ์ ๋ํด ์ด์ผ๊ธฐํด ๋ณด๋ ค๊ณ ํด์.
๐ค Next.js ์ฑ, ์ Docker๋ก ๋ฐฐํฌํด์ผ ํ ๊น์?
์ต์ ์น ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ์ ์์ด Docker์ ๊ฐ์ ์ปจํ
์ด๋ ๊ธฐ์ ์ ์ด์ ์ ํ์ด ์๋ ํ์๊ฐ ๋๊ณ ์์ด์. ํนํ Next.js์ ๊ฐ์ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ ๋ Docker๋ฅผ ํ์ฉํ๋ฉด ์ป์ ์ ์๋ ์ด์ ์ด ์ ๋ง ๋ง์์.
ํ์ง๋ง ๋จ์ํ next build ํ ์ด๋ฏธ์ง๋ฅผ ๋ง๋๋ ๊ฒ๋ง์ผ๋ก๋ ๋ถ์กฑํ ์ ์์ด์.
0๏ธโฃ ์ปจํ ์ด๋ํ์ ์ด์ : ์ผ๊ด๋ ํ๊ฒฝ, ์ฌ์ด ํ์ฅ, ๋น ๋ฅธ ๋ฐฐํฌ
Docker๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ๋ฐ ํ๊ฒฝ๊ณผ ํ๋ก๋์
ํ๊ฒฝ ๊ฐ์ ๋ถ์ผ์น ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ด์. "์ ์ปดํจํฐ์์๋ ์ ๋๋๋ฐ์?"๋ผ๋ ๋ง์ ๋ ์ด์ ํตํ์ง ์๊ฒ ๋์ฃ .
๋ชจ๋ ์ข
์์ฑ๊ณผ ์ค์ ์ด ์ปจํ
์ด๋ ์์ ์บก์ํ๋์ด ์์ด, ์ด๋์๋ ๋์ผํ๊ฒ ์๋ํ๋ ํ๊ฒฝ์ ๋ณด์ฅํด ์ค์.
๋ํ, ์ปจํ
์ด๋๋ ๊ฐ๋ณ๊ณ ๋น ๋ฅด๊ธฐ ๋๋ฌธ์ ์ ํ๋ฆฌ์ผ์ด์
์ ํ์ฅ(Scale-out)์ด ์ฉ์ดํ๊ณ , CI/CD ํ์ดํ๋ผ์ธ์ ํตํฉํ์ฌ ๋ฐฐํฌ ์๋ํ๋ฅผ ๊ตฌ์ถํ๊ธฐ๋ ํธ๋ฆฌํด์.
1๏ธโฃ ์ผ๋ฐ์ ์ธ Dockerfile์ ํ๊ณ: ์ด๋ฏธ์ง ํฌ๊ธฐ, ๋น๋ ์๋
์ด๋ณด ๊ฐ๋ฐ์๋ถ๋ค์ด ์ฒ์ Dockerfile์ ์์ฑํ ๋ ํํ ํ๋ ์ค์๋ ๊ฐ๋ฐ ํ๊ฒฝ์์ ์ฌ์ฉ๋๋ ๋ชจ๋ ํ์ผ๊ณผ ๋น๋ ๋๊ตฌ๋ฅผ ์ต์ข
์ด๋ฏธ์ง์ ํฌํจ์ํค๋ ๊ฑฐ์์.
์ด๋ฐ ๋ฐฉ์์ ๋ช ๊ฐ์ง ๋ฌธ์ ๋ฅผ ๋ฐ์์์ผ์.
- ๋ถํ์ํ๊ฒ ํฐ ์ด๋ฏธ์ง ํฌ๊ธฐ: ๊ฐ๋ฐ ์์กด์ฑ, ๋น๋ ์บ์, ์์ค ๋งต ๋ฑ์ด ์ต์ข
์ด๋ฏธ์ง์ ํฌํจ๋์ด ์ด๋ฏธ์ง ํฌ๊ธฐ๊ฐ ์๋ฐฑ MB์์ GB ๋จ์๋ก ์ปค์ง ์ ์์ด์. ์ด๋ ๋ฐฐํฌ ์๊ฐ ์ฆ๊ฐ์ ์คํ ๋ฆฌ์ง ๋น์ฉ ์์น์ผ๋ก ์ด์ด์ ธ์.
- ๋๋ฆฐ ๋น๋ ์๋: ๋งค๋ฒ ๋ชจ๋ ์์กด์ฑ์ ์๋ก ์ค์นํ๊ณ ๋น๋ํ๋ ๊ณผ์ ์ CI/CD ํ์ดํ๋ผ์ธ์์ ์๋นํ ์๊ฐ์ ์๋ชจํ๊ฒ ๋ง๋ค์ด์.
- ๋ณด์ ์ทจ์ฝ์ ์ฆ๊ฐ: ๋ถํ์ํ ํ์ผ๊ณผ ๋๊ตฌ๋ ์ ์ฌ์ ์ธ ๋ณด์ ๊ณต๊ฒฉ ํ๋ฉด์ ์ฆ๊ฐ์ํฌ ์ ์์ด์.
์ด๋ฌํ ๋ฌธ์ ๋ค์ ํด๊ฒฐํ๊ธฐ ์ํด Next.js ์ฑ์ ์ต์ ํ๋ Dockerfile ์ ๋ต์ด ํ์ํด์.
โ๏ธ Next.js ํ๋ก๋์ Dockerfile ํต์ฌ ์ ๋ต
Next.js ์ ํ๋ฆฌ์ผ์ด์
์ Docker๋ก ๋ฐฐํฌํ ๋ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ 'ํ๋ก๋์
ํ๊ฒฝ์ ์ ํฉํ' ์ด๋ฏธ์ง๋ฅผ ๋ง๋๋ ๊ฑฐ์์.
์ฌ๊ธฐ์๋ ํฌ๊ฒ ์ธ ๊ฐ์ง ํต์ฌ ์ ๋ต์ด ์์ด์.
0๏ธโฃ ๋ฉํฐ์คํ ์ด์ง ๋น๋๋ก ์ด๋ฏธ์ง ํฌ๊ธฐ ์ต์ํ
๋ฉํฐ์คํ
์ด์ง ๋น๋๋ ์ฌ๋ฌ ๊ฐ์ FROM ๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ฌ Docker ์ด๋ฏธ์ง ๋น๋ ํ๋ก์ธ์ค๋ฅผ ์ฌ๋ฌ ๋จ๊ณ๋ก ๋๋๋ ๊ธฐ๋ฒ์ด์์.
๊ฐ ๋จ๊ณ๋ ์ด์ ๋จ๊ณ์ ๊ฒฐ๊ณผ๋ฌผ์ ํ์ฉํ ์ ์์ผ๋ฉฐ, ์ต์ข
์ด๋ฏธ์ง์๋ ํ์ํ ์ต์ํ์ ํ์ผ๋ง ๋ณต์ฌํด์ ํฌํจ์์ผ์.
Next.js์ ๊ฒฝ์ฐ, ๋ณดํต builder ์คํ
์ด์ง์์ ์์กด์ฑ์ ์ค์นํ๊ณ ์ ํ๋ฆฌ์ผ์ด์
์ ๋น๋ํ ๋ค์, runner ์คํ
์ด์ง์์ ๋น๋๋ ๊ฒฐ๊ณผ๋ฌผ๊ณผ ๋ฐํ์์ ํ์ํ ์ต์ํ์ ํ์ผ๋ง ๋ณต์ฌํด์ ์ต์ข
์ด๋ฏธ์ง๋ฅผ ๋ง๋ค๊ฒ ๋ผ์.
์ด๋ฅผ ํตํด ๊ฐ๋ฐ ๋๊ตฌ, ์์ค ์ฝ๋, ์ค๊ฐ ๋น๋ ํ์ผ ๋ฑ์ด ์ต์ข
์ด๋ฏธ์ง์ ํฌํจ๋๋ ๊ฒ์ ๋ฐฉ์งํ์ฌ ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ํ๊ธฐ์ ์ผ๋ก ์ค์ผ ์ ์์ด์.
1๏ธโฃ ํจ์จ์ ์ธ ๋ ์ด์ด ์บ์ฑ์ผ๋ก ๋น๋ ์๋ ํฅ์
Docker ๋น๋๋ ๊ฐ RUN ๋ช
๋ น์ ์คํํ ๋๋ง๋ค ์๋ก์ด '๋ ์ด์ด'๋ฅผ ์์ฑํ๊ณ ์บ์ํด์.
์ด ์บ์๋ฅผ ํจ์จ์ ์ผ๋ก ํ์ฉํ๋ฉด ๋น๋ ์๋๋ฅผ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ด์.
ํต์ฌ์ ์์ฃผ ๋ณ๊ฒฝ๋์ง ์๋ ๋ช
๋ น์ Dockerfile์ ์๋จ์ ๋ฐฐ์นํ๊ณ , ์์ฃผ ๋ณ๊ฒฝ๋๋ ๋ช
๋ น์ ํ๋จ์ ๋ฐฐ์นํ๋ ๊ฑฐ์์.
์๋ฅผ ๋ค์ด, package.json๊ณผ pnpm-lock.yaml (๋๋ yarn.lock, package-lock.json) ํ์ผ์ ๋จผ์ ๋ณต์ฌํ์ฌ ์์กด์ฑ์ ์ค์นํ๋ ๋จ๊ณ๋ฅผ ๋ถ๋ฆฌํ๋ฉด, ์์ค ์ฝ๋ ๋ณ๊ฒฝ ์์๋ ์์กด์ฑ ์ค์น ๋จ๊ณ๋ ์บ์๋ฅผ ์ฌํ์ฉํ์ฌ ๋น ๋ฅด๊ฒ ๋น๋ํ ์ ์์ด์.
2๏ธโฃ ๋ณด์ ๊ฐํ: ๋น๋ฃจํธ(Non-root) ์ฌ์ฉ์ ์คํ
๊ธฐ๋ณธ์ ์ผ๋ก Docker ์ปจํ
์ด๋๋ root ์ฌ์ฉ์๋ก ์คํ๋ผ์. ํ์ง๋ง ์ด๋ ๋ณด์์ ์ข์ง ์์ ๊ดํ์ด์์.
์ปจํ
์ด๋ ๋ด์์ root ๊ถํ์ผ๋ก ํ๋ก์ธ์ค๊ฐ ์คํ๋ ๊ฒฝ์ฐ, ์ ์ฌ์ ์ธ ๊ณต๊ฒฉ์๊ฐ ์ปจํ
์ด๋๋ฅผ ํ์ทจํ์ ๋ ํธ์คํธ ์์คํ
์ ๋ ํฐ ํผํด๋ฅผ ์ค ์ ์์ด์.
๋ฐ๋ผ์ Dockerfile ๋ด์์ ๋ณ๋์ ๋น๋ฃจํธ ์ฌ์ฉ์๋ฅผ ์์ฑํ๊ณ , ํด๋น ์ฌ์ฉ์๋ก ์ ํ๋ฆฌ์ผ์ด์
์ ์คํํ๋๋ก ์ค์ ํ๋ ๊ฒ์ด ๋ณด์ ๋ชจ๋ฒ ์ฌ๋ก์์.
๐งช ๋จ๊ณ๋ณ Dockerfile ์์ฑ ๋ฐ ์ต์ ํ
์ด์ ์ค์ ๋ก Next.js ์ ํ๋ฆฌ์ผ์ด์
์ ์ํ ์ต์ ํ๋ Dockerfile์ ์์ฑํด ๋ณผ ์๊ฐ์ด์์.
์ฌ๊ธฐ์๋ pnpm์ ์ฌ์ฉํ๋ค๊ณ ๊ฐ์ ํ์ง๋ง, npm์ด๋ yarn๋ ๋์ผํ ์๋ฆฌ๋ก ์ ์ฉํ ์ ์์ด์.
0๏ธโฃ ๊ธฐ๋ณธ Dockerfile ๊ตฌ์กฐ (๊ฐ๋ฐ/ํ๋ก๋์
๋ถ๋ฆฌ)
๋จผ์ ํ๋ก๋์
๋ฐฐํฌ์ ์ด์ ์ ๋ง์ถ Dockerfile์ ์์ฑํ ๊ฑฐ์์.
๊ฐ๋ฐ ํ๊ฒฝ์์๋ ๋ณดํต next dev๋ฅผ ์ง์ ์คํํ๊ฑฐ๋, docker compose๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋ฐ ์๋ฒ๋ฅผ ๋์ฐ๋ ๊ฒ์ด ๋ ํจ์จ์ ์ผ ์ ์์ด์.
1๏ธโฃ .dockerignore ํ์ผ๋ก ๋ถํ์ํ ํ์ผ ์ ์ธ
.dockerignore ํ์ผ์ git-ignore์ ์ ์ฌํ๊ฒ, Docker ์ด๋ฏธ์ง ๋น๋ ์ ์ปจํ
์คํธ์์ ์ ์ธํ ํ์ผ์ด๋ ๋๋ ํฐ๋ฆฌ๋ฅผ ์ง์ ํ๋ ์ญํ ์ ํด์.
์ด๋ฅผ ํตํด ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์ค์ด๊ณ , ๋ฏผ๊ฐํ ์ ๋ณด๊ฐ ์ด๋ฏธ์ง์ ํฌํจ๋๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์ด์.
.env .env.local .env.development.local .env.production.local node_modules npm-debug.log yarn-debug.log yarn-error.log .pnpm-store .next .git .gitignore README.md Dockerfile docker-compose*
์ ์ฉํ ํ
.dockerignore์.next๋ฅผ ํฌํจ์ํค๋ ์ด์ ๋ ๋น๋๋ ๊ฒฐ๊ณผ๋ฌผ์builder์คํ ์ด์ง์์ ์ง์ ์์ฑํ๊ณrunner์คํ ์ด์ง๋ก ๋ณต์ฌํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ด์์. ๋ก์ปฌ์์ ๋น๋๋.nextํด๋๊ฐ ์ปจํ ์ด๋๋ก ๋ณต์ฌ๋์ง ์๋๋ก ๋ฐฉ์งํด ์ค์.
node_modules๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์ปจํ ์ด๋ ๋ด๋ถ์์ ์๋ก ์ค์นํ ๊ฒ์ด๋ฏ๋ก ์ ์ธํด์.
2๏ธโฃ package.json ์คํฌ๋ฆฝํธ ์ค์
Next.js ์ ํ๋ฆฌ์ผ์ด์
์ package.json ํ์ผ์๋ ํ๋ก๋์
๋น๋ ๋ฐ ์์ ์คํฌ๋ฆฝํธ๊ฐ ์ ์๋์ด ์์ด์ผ ํด์.
ํนํ start ์คํฌ๋ฆฝํธ๋ next start๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก๋์
์๋ฒ๋ฅผ ์์ํ๋๋ก ์ค์ ํด์ผ ํด์.
{ "name": "my-nextjs-app", "version": "0.1.0", "private": true, "scripts": { "dev": "next dev", "build": "next build", "start": "next start", "lint": "next lint" }, "dependencies": { "next": "^14.0.0", "react": "^18", "react-dom": "^18" } }
3๏ธโฃ ์ต์ข
ํ๋ก๋์
Dockerfile ์์
์ด์ ์์์ ์ค๋ช
ํ ์ ๋ต๋ค์ ๋ชจ๋ ํฌํจํ ์ต์ข
Dockerfile์ ์ดํด๋ณผ๊ฒ์.
pnpm์ ๊ธฐ์ค์ผ๋ก ์์ฑ๋์์ผ๋ฉฐ, npm์ด๋ yarn์ ์ฌ์ฉํ๋ค๋ฉด ํด๋น ํจํค์ง ๋งค๋์ ์ ๋ง๊ฒ ๋ช
๋ น์ด๋ง ๋ณ๊ฒฝํด ์ฃผ์๋ฉด ๋ผ์.
# --- 1. Builder Stage (๋น๋ ํ๊ฒฝ) --- FROM node:20-alpine AS builder # ์์ ๋๋ ํ ๋ฆฌ ์ค์ WORKDIR /app # pnpm ์ค์น RUN npm install -g pnpm # ์์กด์ฑ ์บ์ฑ์ ์ํ ํ์ผ ๋ณต์ฌ # package.json๊ณผ lock ํ์ผ์ ๋จผ์ ๋ณต์ฌํ์ฌ, ์ด ํ์ผ๋ค์ด ๋ณ๊ฒฝ๋์ง ์๋ ํ # pnpm install ๋จ๊ณ๋ ์บ์๋ฅผ ์ฌํ์ฉํ๋๋ก ์ ๋ํด์. COPY package.json pnpm-lock.yaml* ./ # ์์กด์ฑ ์ค์น # --frozen-lockfile: lock ํ์ผ ๊ธฐ๋ฐ์ผ๋ก ์ ํํ ์ค์นํ์ฌ ๋น๋ ์ผ๊ด์ฑ ์ ์ง RUN pnpm install --frozen-lockfile # ๋๋จธ์ง ์์ค ์ฝ๋ ๋ณต์ฌ COPY . . # Next.js ์ฑ ๋น๋ # STANDALONE ์ถ๋ ฅ ๋ชจ๋ ์ฌ์ฉ (์ต์ํ์ ํ์ผ๋ง ํฌํจํ์ฌ ์ด๋ฏธ์ง ํฌ๊ธฐ ์ต์ ํ) # https://nextjs.org/docs/app/api-reference/next-config-js/output#standalone ENV NEXT_SHARP_PATH=/app/node_modules/sharp RUN pnpm run build # --- 2. Runner Stage (์คํ ํ๊ฒฝ) --- # ์ต์ข ํ๋ก๋์ ์ด๋ฏธ์ง๋ ๋ ๊ฐ๋ฒผ์ด nodejs ๋ฐํ์๋ง ํฌํจํด์. FROM node:20-alpine AS runner # Next.js ๊ณต์ ๊ถ์ฅ ์ฌํญ: ๋น๋ฃจํธ ์ฌ์ฉ์ ์ฌ์ฉ # https://nextjs.org/docs/app/building-your-application/deploying/docker#non-root-user RUN addgroup --system --gid 1001 nodejs RUN adduser --system --uid 1001 nextjs # ์์ ๋๋ ํ ๋ฆฌ ์ค์ ๋ฐ ๊ถํ ์ค์ # builder ์คํ ์ด์ง์์ ์์ฑ๋ .next/standalone์ ๋ณต์ฌํ ์์น WORKDIR /app # builder ์คํ ์ด์ง์์ ๋น๋๋ .next/standalone ํด๋ ๋ณต์ฌ # ์ด ํด๋์๋ Next.js ์ฑ ์คํ์ ํ์ํ ๋ชจ๋ ํ์ผ์ด ํฌํจ๋์ด ์์ด์. COPY /app/.next/standalone ./. ext/standalone # public ํด๋ ๋ณต์ฌ COPY /app/public ./public # package.json ๋ณต์ฌ (start ์คํฌ๋ฆฝํธ ์คํ์ ์ํด) # nextjs ์ ์ ์๊ฒ ๊ถํ ๋ถ์ฌ COPY /app/package.json ./package.json # ํ๊ฒฝ ๋ณ์ ์ค์ (๋ฐํ์์ ํ์ํ ๋ณ์๋ค) ENV NODE_ENV=production ENV PORT=3000 # ์ปจํ ์ด๋ ํฌํธ ๋ ธ์ถ EXPOSE 3000 # ๋น๋ฃจํธ ์ฌ์ฉ์๋ก ์ ํ USER nextjs # Health Check ์ค์ (์ต์ ) # ์ปจํ ์ด๋๊ฐ ์ ์์ ์ผ๋ก ์๋ํ๋์ง ์ฃผ๊ธฐ์ ์ผ๋ก ํ์ธํด์. HEALTHCHECK CMD node ./.next/standalone/server.js || exit 1 # ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ช ๋ น์ด CMD ["pnpm", "start"]
์ ๋ณด
NEXT_SHARP_PATHํ๊ฒฝ ๋ณ์: Next.js 14๋ถํฐ ์ด๋ฏธ์ง ์ต์ ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ Sharp๊ฐ Node.js ๋ค์ดํฐ๋ธ ๋ชจ๋๋ก ์ ๊ณต๋๋ฉด์, Docker ํ๊ฒฝ์์ ๋น๋ ์ ์ด ๊ฒฝ๋ก๋ฅผ ๋ช ์ํด ์ฃผ์ด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์์ด์.standalone๋ชจ๋์์๋node_modules/sharp๊ฒฝ๋ก๋ฅผ ์ง์ ํด ์ฃผ๋ฉด ๋ผ์.
output: 'standalone':next.config.js์ ์ด ์ค์ ์ ์ถ๊ฐํ๋ฉด Next.js๊ฐ ํ๋ก๋์ ๋น๋ ์.next/standaloneํด๋์ ๋ชจ๋ ์์กด์ฑ์ ํฌํจํ ์ต์ํ์ ํ์ผ๋ง ์์ฑํด ์ค์. Docker ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์ค์ด๋ ๋ฐ ๋งค์ฐ ํจ๊ณผ์ ์ด์์.
4๏ธโฃ next.config.js ์ค์ (์ ํ ์ฌํญ์ด์ง๋ง ๊ถ์ฅ)
์ Dockerfile์ output: 'standalone' ์ต์
์ ์ฌ์ฉํ๋ ๊ฒ์ ์ ์ ๋ก ํด์.
next.config.js ํ์ผ์ ์๋์ ๊ฐ์ด ์ถ๊ฐํ์ฌ ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ๋์ฑ ์ต์ ํํ ์ ์์ด์.
/** @type {import('next').NextConfig} */ const nextConfig = { output: 'standalone', // ๊ธฐํ Next.js ์ค์ ๋ค... }; module.exports = nextConfig;
๐ ์ค์ ๋ฐฐํฌ ์ ๊ณ ๋ ค์ฌํญ
์ต์ ํ๋ Dockerfile์ ๋ง๋ค์๋ค๋ฉด, ์ด์ ์ด ์ด๋ฏธ์ง๋ฅผ ์ค์ ํ๋ก๋์ ํ๊ฒฝ์ ๋ฐฐํฌํ ๋ ๋ช ๊ฐ์ง ์ถ๊ฐ์ ์ผ๋ก ๊ณ ๋ คํด์ผ ํ ์ฌํญ๋ค์ด ์์ด์.
0๏ธโฃ CI/CD ํ์ดํ๋ผ์ธ ํตํฉ
Docker ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๊ณ ๋ ์ง์คํธ๋ฆฌ์ ํธ์ํ๋ ๊ณผ์ ์ CI/CD ํ์ดํ๋ผ์ธ์ ํตํฉํ๋ ๊ฒ์ด ์ข์์.
GitHub Actions, GitLab CI/CD, Jenkins ๋ฑ ๋ค์ํ ๋๊ตฌ๋ฅผ ํ์ฉํ์ฌ ์ฝ๋ ํธ์ ์ ์๋์ผ๋ก ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๊ณ ๋ฐฐํฌํ ์ ์๋๋ก ์ค์ ํด ๋ณด์ธ์.
์ด๋ ๋ฐฐํฌ ํ๋ก์ธ์ค์ ์์ ์ฑ๊ณผ ์๋๋ฅผ ํฌ๊ฒ ํฅ์์์ผ ์ค์.
1๏ธโฃ ํ๊ฒฝ ๋ณ์ ๊ด๋ฆฌ
ํ๋ก๋์
ํ๊ฒฝ์์๋ ๋ฏผ๊ฐํ ์ ๋ณด(API ํค, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ์ ๋ณด ๋ฑ)๋ฅผ ํ๊ฒฝ ๋ณ์๋ก ๊ด๋ฆฌํด์ผ ํด์.
Docker ์ปจํ
์ด๋๋ฅผ ์คํํ ๋ docker run -e KEY=VALUE ์ต์
์ ์ฌ์ฉํ๊ฑฐ๋, Kubernetes์ ๊ฐ์ ์ค์ผ์คํธ๋ ์ด์
๋๊ตฌ์ Secret ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ ์์ ํ๊ฒ ํ๊ฒฝ ๋ณ์๋ฅผ ์ฃผ์
ํ ์ ์์ด์.
Dockerfile ๋ด์์๋ ENV ๋ช
๋ น์ผ๋ก ๊ธฐ๋ณธ๊ฐ์ ์ค์ ํ ์ ์์ง๋ง, ํ๋ก๋์
ํ๊ฒฝ์์๋ ๋ฐํ์์ ์ค๋ฒ๋ผ์ด๋ํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด์์.
2๏ธโฃ ๋ชจ๋ํฐ๋ง ๋ฐ ๋ก๊น
๋ฐฐํฌ๋ Next.js ์ ํ๋ฆฌ์ผ์ด์
์ด ํ๋ก๋์
ํ๊ฒฝ์์ ์ ๋๋ก ์๋ํ๋์ง ์ง์์ ์ผ๋ก ๋ชจ๋ํฐ๋งํ๊ณ ๋ก๊ทธ๋ฅผ ์์งํ๋ ๊ฒ์ด ์ค์ํด์.
Docker์ ๋ก๊น
๋๋ผ์ด๋ฒ๋ฅผ ์ค์ ํ๊ฑฐ๋, Prometheus, Grafana, ELK Stack(Elasticsearch, Logstash, Kibana)๊ณผ ๊ฐ์ ๋๊ตฌ๋ฅผ ํ์ฉํ์ฌ ์์คํ
์ํ์ ์ ํ๋ฆฌ์ผ์ด์
๋ก๊ทธ๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ๊ด๋ฆฌํด ์ฃผ์ธ์.
Health Check ์ค์ ์ ์ปจํ
์ด๋์ ๊ธฐ๋ณธ์ ์ธ ์ํ๋ฅผ ํ์
ํ๋ ๋ฐ ๋์์ด ๋์ง๋ง, ๋ณด๋ค ์ฌ์ธต์ ์ธ ๋ชจ๋ํฐ๋ง ์์คํ
์ ๊ตฌ์ถํ๋ ๊ฒ์ด ์ข์์.
๐ ์ ๋ฆฌํ๋ฉฐ
์ค๋์ Next.js ์ ํ๋ฆฌ์ผ์ด์
์ Docker๋ก ๋ฐฐํฌํ ๋ ํ๋ก๋์
ํ๊ฒฝ์ ์ต์ ํ๋ Dockerfile์ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์ธํ ์์๋ณด์์ด์.
๋ฉํฐ์คํ
์ด์ง ๋น๋๋ฅผ ํตํด ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์ค์ด๊ณ , ํจ์จ์ ์ธ ๋ ์ด์ด ์บ์ฑ์ผ๋ก ๋น๋ ์๋๋ฅผ ๋์ด๋ฉฐ, ๋น๋ฃจํธ ์ฌ์ฉ์ ์คํ์ ํตํด ๋ณด์์ ๊ฐํํ๋ ๊ฒ์ด ํต์ฌ์ด์์ด์.
0๏ธโฃ ํต์ฌ ์์ฝ
- ๋ฉํฐ์คํ
์ด์ง ๋น๋:
builder์runner์คํ ์ด์ง๋ฅผ ๋ถ๋ฆฌํ์ฌ ์ต์ข ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์ต์ํํด์. - ๋ ์ด์ด ์บ์ฑ:
package.json๊ณผ lock ํ์ผ์ ๋จผ์ ๋ณต์ฌํ์ฌ ์์กด์ฑ ์ค์น ๋จ๊ณ๋ฅผ ์บ์ํ๊ณ , ๋น๋ ์๋๋ฅผ ๋์ฌ์. - ๋น๋ฃจํธ ์ฌ์ฉ์:
adduser,addgroup๋ช ๋ น์ผ๋กnextjs์ฌ์ฉ์๋ฅผ ์์ฑํ๊ณ , ์ด ์ฌ์ฉ์๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ์ฌ ๋ณด์์ ๊ฐํํด์. output: 'standalone':next.config.js์ ์ด ์ต์ ์ ์ถ๊ฐํ์ฌ Next.js๊ฐ ์ต์ํ์ ํ๋ก๋์ ๋น๋ ๊ฒฐ๊ณผ๋ฌผ์ ์์ฑํ๋๋ก ํด์..dockerignore: ๋ถํ์ํ ํ์ผ๊ณผ ๋๋ ํฐ๋ฆฌ๋ฅผ ์ ์ธํ์ฌ ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์ค์ด๊ณ ๋ณด์์ ๋์ฌ์.
1๏ธโฃ ๋ค์ ๋จ๊ณ
์ด์ ์ฌ๋ฌ๋ถ์ Next.js ํ๋ก์ ํธ์ ์ด Dockerfile ์ต์ ํ ์ ๋ต์ ์ ์ฉํด ๋ณผ ์๊ฐ์ด์์.
์์ฑ๋ Dockerfile์ ๊ธฐ๋ฐ์ผ๋ก ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๊ณ , ๋ก์ปฌ์์ ์คํํด ๋ณด๋ฉด์ ์ต์ข
ํ๋ก๋์
ํ๊ฒฝ์์์ ๋์์ ํ์ธํด ๋ณด์ธ์.
๋์๊ฐ CI/CD ํ์ดํ๋ผ์ธ์ ํตํฉํ์ฌ ์๋ํ๋ ๋ฐฐํฌ ์์คํ
์ ๊ตฌ์ถํ๋ค๋ฉด ๋์ฑ ํจ์จ์ ์ธ ๊ฐ๋ฐ ์ํฌํ๋ก์ฐ๋ฅผ ์์ฑํ ์ ์์ ๊ฑฐ์์.
๊ถ๊ธํ ์ ์ด๋ ์ถ๊ฐ์ ์ผ๋ก ๋ค๋ฃจ๊ณ ์ถ์ ์ฃผ์ ๊ฐ ์๋ค๋ฉด ์ธ์ ๋ ์ง ๋๊ธ๋ก ๋จ๊ฒจ์ฃผ์ธ์! ๋ค์ ํฌ์คํ ์์ ๋ ๋ง๋์!
๐ฎ ์ฐธ๊ณ
- Next.js ๊ณต์ ๋ฌธ์ - Deploying to Docker
- Docker ๊ณต์ ๋ฌธ์ - Best practices for writing Dockerfiles
- pnpm ๊ณต์ ๋ฌธ์
์ฐ๊ด๋ ํฌ์คํธ
- ๋จ์ด: 1,541๊ฐ20๋ถ
[๐ค] Tailwind CSS v4 ์ถ์: ๊ฐ๋ฐ์์๊ฒ ์ฐพ์์ฌ ๋ณํ์ ์ต์ ํ ์ ๋ต
Tailwind CSS v4์ ์ฃผ์ ๋ณ๊ฒฝ์ฌํญ๊ณผ ์๋ก์ด ๊ธฐ๋ฅ๋ค์ ๊น์ด ์๊ฒ ๋ถ์ํ๊ณ , ์ค๋ฌด์์ ํจ์จ์ ์ผ๋ก ์ ์ฉํ๋ฉฐ ์ฑ๋ฅ์ ์ต์ ํํ๋ ์ ๋ต์ ๋ธ๋ฃจ๊ฐ ์๋ ค๋๋ ค์.
- ๋จ์ด: 2,161๊ฐ24๋ถ
[๐ค] CSS Grid ์ฌํ ๊ฐ์ด๋: ์ค์ ๋ ์ด์์ ํจํด๊ณผ ๋ฐ์ํ ๋์์ธ ์ ๋ต
CSS Grid๋ ๊ฐ๋ ฅํ 2์ฐจ์ ๋ ์ด์์ ์์คํ ์ด์์. ์ด ๊ฐ์ด๋์์ Grid์ ํต์ฌ ๊ฐ๋ ๋ถํฐ ์ค์ ๋ ์ด์์ ํจํด, ๋ฐ์ํ ๋์์ธ ์ ๋ต๊น์ง ์ฌ์ธต์ ์ผ๋ก ๋ค๋ฃจ์ด ์ค๋ฌด์ ๋ฐ๋ก ์ ์ฉํ ์ ์๋๋ก ๋์๋๋ ค์.
- ๋จ์ด: 1,716๊ฐ19๋ถ
[๐ค] TypeScript ํ ํ๋ฆฟ ๋ฆฌํฐ๋ด ํ์ : ๋ฌธ์์ด ํ์ ์ ๋ง๋ฒ์ฌ๋ก ๋ณ์ ํ๊ธฐ
TypeScript์ ํ ํ๋ฆฟ ๋ฆฌํฐ๋ด ํ์ ์ ํ์ฉํ์ฌ ๋ณต์กํ ๋ฌธ์์ด ํจํด์ ์์ ํ๊ฒ ํ์ ์ถ๋ก ํ๊ณ , ๊ฐ๋ ฅํ ์ ํธ๋ฆฌํฐ ํ์ ์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์ค๋ฌด ์์ ์ ํจ๊ป ์์ธํ ์์๋ด์. ํ์ ์์ ์ฑ์ ํ ๋จ๊ณ ๋์ฌ ๊ฐ๋ฐ ๊ฒฝํ์ ๊ฐ์ ํด ๋ณด์ธ์.
- ๋จ์ด: 1,917๊ฐ23๋ถ
[๐ค] JavaScript WeakMap๊ณผ WeakSet: ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฐฉ์ง์ ์ต์ ํ ์ ๋ต
JavaScript์์ WeakMap๊ณผ WeakSet์ ํ์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ๊ณ ์ฑ๋ฅ์ ์ต์ ํํ๋ ๋ฐฉ๋ฒ์ ์ค์ฉ์ ์ธ ์์์ ํจ๊ป ์์ธํ ์์๋ด์. ๊ฐ๋น์ง ์ปฌ๋ ์ ๋์ ์๋ฆฌ์ ํจ๊ป ๊ฐ์ฒด ์ฐธ์กฐ ๊ด๋ฆฌ์ ์ค์์ฑ์ ์ดํดํ๊ณ , ์ค์ ํ๋ก์ ํธ์ ์ ์ฉํ๋ ์ ๋ต์ ๋ฐฐ์๋ด์.
- ๋จ์ด: 1,446๊ฐ17๋ถ
[๐ค] Next.js/React ํ๋ก์ ํธ๋ฅผ ์ํ ESLint & Prettier ์ค์ ์๋ฒฝ ๊ฐ์ด๋
๋ณต์กํ Next.js ๋ฐ React ํ๋ก์ ํธ์์ ์ผ๊ด๋ ์ฝ๋ ์คํ์ผ๊ณผ ํ์ง์ ์ ์งํ๋ ESLint์ Prettier ์ค์ ๋ฐฉ๋ฒ์ ์์ธํ ์๋ ค๋๋ ค์. ํ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ต์ ํ๋ ์ค์ ์ผ๋ก ๊ฐ๋ฐ ํจ์จ์ ๋์ฌ๋ณด์ธ์.
- ๋จ์ด: 2,006๊ฐ25๋ถ
[๐ค] JavaScript์ ํต์ฌ: ํ๋กํ ํ์ ์ฒด์ธ ์๋ฒฝ ์ดํด์ ํ์ฉ ์ ๋ต
JavaScript์ ์ฌ์ฅ๋ถ, ํ๋กํ ํ์ ์ฒด์ธ์ ๋์ ์๋ฆฌ๋ฅผ ๊น์ด ํ๊ณ ๋ค์ด ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ๊ณผ ์์์ ์๋ฒฝํ๊ฒ ์ดํดํ๊ณ ์ค๋ฌด์ ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์๋ณด์ธ์. ์ฑ๋ฅ ์ต์ ํ ํ๋ ํจ๊ป ๋ค๋ค์.
- ๋จ์ด: 2,087๊ฐ22๋ถ
[๐ค] React ์ปค์คํ ํ : ์ฌ์ฌ์ฉ์ฑ ๋์ด๋ ์ค๊ณ ์์น๊ณผ ํ ์คํธ ์ ๋ต
React ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฌ์ฉ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ๊ทน๋ํํ๋ ์ปค์คํ ํ ์ค๊ณ ์์น, ์ค์ฉ์ ์ธ ํจํด, ๊ทธ๋ฆฌ๊ณ ๊ฒฌ๊ณ ํ ํ ์คํธ ์ ๋ต์ ์๋์ด ๊ฐ๋ฐ์์ ๊ด์ ์์ ์์ธํ ์ค๋ช ํด ๋๋ ค์.
- ๋จ์ด: 2,107๊ฐ23๋ถ
[๐ค] React useRef ํ ์ฌ์ธต ๋ถ์: DOM ๋์ด์ ์ค์ ํ์ฉ ์ ๋ต
React useRef ํ ์ ๊ธฐ๋ณธ ์๋ฆฌ๋ถํฐ DOM ์์ ์ง์ ์ ์ด, ์ปดํฌ๋ํธ ๋ผ์ดํ์ฌ์ดํด ๊ด๋ฆฌ, ๊ทธ๋ฆฌ๊ณ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํ ๋ค์ํ ์ค์ ํ์ฉ ์ ๋ต๊น์ง ์ฌ์ธต์ ์ผ๋ก ๋ค๋ค์. ์ด์ค๊ธ ๊ฐ๋ฐ์๋ฅผ ์ํ useRef ์๋ฒฝ ๊ฐ์ด๋.
- ๋จ์ด: 1,762๊ฐ19๋ถ
[๐ค] Next.js 14/15์์ ๋์ OG ์ด๋ฏธ์ง ์์ฑ: ImageResponse ์๋ฒฝ ๊ฐ์ด๋
Next.js App Router ํ๊ฒฝ์์ ImageResponse๋ฅผ ํ์ฉํ์ฌ ๋์ OG ์ด๋ฏธ์ง๋ฅผ ํจ์จ์ ์ผ๋ก ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์ธ์. SEO์ ์์ ๊ณต์ ์ต์ ํ๋ฅผ ์ํ ์ค์ ๊ฐ์ด๋์ ๋๋ค.
- ๋จ์ด: 1,481๊ฐ18๋ถ
[๐ค] Git ๋ธ๋์น ์ ๋ต: Git Flow vs GitHub Flow, ์ค๋ฌด์์ ์ด๋ป๊ฒ ์ ํํ๊ณ ์ด์ํ ๊น์?
๊ฐ๋ฐํ์ ํจ์จ์ ์ธ ํ์ ์ ์ํ Git ๋ธ๋์น ์ ๋ต์ ๊ณ ๋ฏผํ๊ณ ๊ณ์ ๊ฐ์? Git Flow์ GitHub Flow์ ํต์ฌ ๊ฐ๋ ๋ถํฐ ์ฅ๋จ์ , ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ ํ์ ๋ง๋ ์ ๋ต์ ์ ํํ๊ณ ์ด์ํ๋ ์ค์ง์ ์ธ ํ๊น์ง '๋ธ๋ฃจ'๊ฐ ์๋ ค๋๋ ค์.
- ๋จ์ด: 1,442๊ฐ16๋ถ
[๐ค] TypeScript ํ์ ๊ฐ๋: ๋ฐํ์ ํ์ ์์ ์ฑ์ ์ํ ํ์ ํจํด ์ ๋ณตํด์
TypeScript์์ ๋ฐํ์์ ๋ณ์์ ํ์ ์ ์์ ํ๊ฒ ์ขํ๋(Narrowing) ๋ฐฉ๋ฒ์ธ ํ์ ๊ฐ๋(Type Guard)์ ๋ํด ์์ธํ ์์๋ด์. `typeof`, `instanceof`, `in` ์ฐ์ฐ์๋ถํฐ ์ฌ์ฉ์ ์ ์ ํ์ ๊ฐ๋๊น์ง, ์ค์ฉ์ ์ธ ์์์ ํจ๊ป ๊ฒฌ๊ณ ํ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์ตํ๋ด์.
- ๋จ์ด: 2,542๊ฐ28๋ถ
[๐ค] React Query (TanStack Query) ์ฌํ: ๋ฐ์ดํฐ ํ์นญ, ์บ์ฑ, ๋๊ธฐํ ์ ๋ต์ผ๋ก ์น ์ฑ ์ฑ๋ฅ ๊ทน๋ํํด์
React Query (TanStack Query)๋ฅผ ํ์ฉํ์ฌ ๋ณต์กํ ์๋ฒ ์ํ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ , ์ง๋ฅ์ ์ธ ์บ์ฑ๊ณผ ์๋ ๋๊ธฐํ ์ ๋ต์ผ๋ก ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ๊ณผ ์ฌ์ฉ์ ๊ฒฝํ์ ๊ทน๋ํํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ธต์ ์ผ๋ก ๋ค๋ฃจ์ด์. useQuery, useMutation, useInfiniteQuery ๋ฑ ํต์ฌ ํ ๊ณผ ์ค์ ์ต์ ํ ํ์ ๋ฐฐ์๋ณด์ธ์.
- ๋จ์ด: 2,401๊ฐ26๋ถ
[๐ค] React `useTransition`๊ณผ `useDeferredValue`๋ก ์ฌ์ฉ์ ๊ฒฝํ์ ๊ทน๋ํํ๋ ๋ฐฉ๋ฒ
React ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ฌด๊ฑฐ์ด UI ์ ๋ฐ์ดํธ๋ก ์ธํ ๋ฒ๋ฒ ์์ ํด๊ฒฐํ๊ณ , `useTransition`๊ณผ `useDeferredValue` ํ ์ ํ์ฉํ์ฌ ์ฌ์ฉ์ ๊ฒฝํ์ ํ๊ธฐ์ ์ผ๋ก ๊ฐ์ ํ๋ ์ค์ฉ์ ์ธ ์ ๋ต์ ๋ฐฐ์๋ณด์ธ์.
- ๋จ์ด: 1,917๊ฐ22๋ถ
[๐ค] React Suspense์ ErrorBoundary: ๊ฒฌ๊ณ ํ๊ณ ๋ถ๋๋ฌ์ด UI ๊ฒฝํ์ ์ํ ์ค์ ๊ฐ์ด๋
React ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉ์ ๊ฒฝํ์ ํ์ ํ Suspense์ ErrorBoundary์ ๊ฐ๋ ฅํ ์กฐํฉ์ ๊น์ด ์๊ฒ ๋ค๋ค์. ๋ก๋ฉ ์ํ์ ์๋ฌ ์ฒ๋ฆฌ๋ฅผ ์ฐ์ํ๊ฒ ๊ด๋ฆฌํ์ฌ ๋์ฑ ๊ฒฌ๊ณ ํ๊ณ ๋ถ๋๋ฌ์ด UI๋ฅผ ๋ง๋๋ ์ค์ ํ๊ณผ ์ฝ๋ ์์๋ฅผ ํ์ธํด ๋ณด์ธ์.
- ๋จ์ด: 1,302๊ฐ16๋ถ
[๐ค] CSS Container Queries: ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ๋ฐ์ํ ๋์์ธ์ ์๋ก์ด ์งํ
๋ฏธ๋์ด ์ฟผ๋ฆฌ์ ํ๊ณ๋ฅผ ๋์ด, ์ปดํฌ๋ํธ ์์ฒด์ ํฌ๊ธฐ์ ๋ฐ๋ผ ์คํ์ผ์ ์กฐ์ ํ๋ CSS Container Queries๋ฅผ ๊น์ด ์๊ฒ ์์๋ณด๊ณ ์ค๋ฌด ์ ์ฉ ๋ฐฉ๋ฒ์ ์๋ดํด ๋๋ ค์.
- ๋จ์ด: 1,681๊ฐ19๋ถ
[๐ค] Next.js 15 ๊ณ ๊ธ ๋ฐ์ดํฐ ์บ์ฑ ์ ๋ต: fetch์ revalidate ์ฌ์ธต ๋ถ์
Next.js 15์์ `fetch` API์ ๊ฐ๋ ฅํ ์บ์ฑ ๋ฉ์ปค๋์ฆ๊ณผ `revalidate` ์ต์ ์ ํ์ฉํ์ฌ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ์ต์ ํํ๊ณ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ธต์ ์ผ๋ก ๋ค๋ฃจ์ด์. ์ค๋ฌด ์์๋ฅผ ํตํด ์๋ฒ ์ปดํฌ๋ํธ์ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ์์ ์บ์ฑ ์ ๋ต์ ํจ๊ณผ์ ์ผ๋ก ์ ์ฉํ๋ ํ์ ์ ๊ณตํด์.
๋จ์ด: 1,320๊ฐ14๋ถ[๐ค] Next.js App Router: generateStaticParams๋ก ๋์ ๋ผ์ฐํ ๋น๋ ์ต์ ํํ๊ธฐ
Next.js App Router์์ generateStaticParams ํจ์๋ฅผ ํ์ฉํ์ฌ ๋์ ๋ผ์ฐํ ์ ์ ์ ํ์ด์ง๋ฅผ ํจ์จ์ ์ผ๋ก ์์ฑํ๊ณ ๋น๋ ์ฑ๋ฅ์ ์ต์ ํํ๋ ๋ฐฉ๋ฒ์ ์ค์ฉ์ ์ธ ์์์ ํจ๊ป ์์ธํ ์์๋ด์.
๋จ์ด: 1,891๊ฐ22๋ถ[๐ค] React ๋ ๋๋ง ์ต์ ํ: useMemo, useCallback, React.memo ์๋ฒฝ ๊ฐ์ด๋
์ด์ค๊ธ ๊ฐ๋ฐ์๋ฅผ ์ํ React ๋ ๋๋ง ์ต์ ํ ๊ฐ์ด๋. useMemo, useCallback, React.memo์ ์ ํํ ์ฌ์ฉ๋ฒ๊ณผ ์ค๋ฌด์์ ํํ ์ ์ง๋ฅด๋ ์ค์, ๊ทธ๋ฆฌ๊ณ ์ค์ ์ฑ๋ฅ ํฅ์ ์ ๋ต์ ๋ธ๋ฃจ๊ฐ ์๋ ค๋๋ ค์.
๋จ์ด: 2,145๊ฐ24๋ถ[๐ค] JavaScript Proxy์ Reflect ์ฌ์ธต ๋ถ์: ๋ฉํ ํ๋ก๊ทธ๋๋ฐ์ผ๋ก ์ฝ๋ ๊ฐํํ๊ธฐ
JavaScript Proxy์ Reflect API๋ฅผ ํ์ฉํ ๋ฉํ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฒ์ ์ฌ์ธต ๋ถ์ํด์. ๊ฐ์ฒด ์ ๊ทผ ์ ์ด, ์ ํจ์ฑ ๊ฒ์ฌ, ๋ก๊น , ๋ฐ์ํ ์์คํ ๊ตฌํ ๋ฑ ์ค์ฉ์ ์ธ ํ์ฉ ์ฌ๋ก๋ฅผ ํตํด ์ฝ๋์ ์ ์ฐ์ฑ๊ณผ ์์ ์ฑ์ ๋์ด๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์๋ณด์ธ์.
- ๋จ์ด: 2,029๊ฐ24๋ถ
[๐ค] React/Next.js ๋ฒ๋ค ์ต์ ํ: ์ฝ๋ ์คํ๋ฆฌํ ๊ณผ ๋ ์ด์ง ๋ก๋ฉ ์๋ฒฝ ๊ฐ์ด๋
React์ Next.js ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ค์ด๊ณ ๋ก๋ฉ ์๋๋ฅผ ๊ฐ์ ํ๋ ์ฝ๋ ์คํ๋ฆฌํ ๊ณผ ๋ ์ด์ง ๋ก๋ฉ ๊ธฐ๋ฒ์ ์ค์ฉ์ ์ธ ์์์ ํจ๊ป ์์ธํ ์์๋ด์. ์นํฉ ์ค์ ๋ถํฐ React.lazy, Next.js dynamic import๊น์ง ๋ค๋ค์.
- ๋จ์ด: 1,770๊ฐ20๋ถ
[๐ค] React์ `useOptimistic` ํ ์ผ๋ก ๋๊ด์ UI ์ ๋ฐ์ดํธ ๊ตฌํํ๊ธฐ: Server Actions์ ํจ๊ป
React 18/19์ `useOptimistic` ํ ์ ํ์ฉํ์ฌ Server Actions์ ์ฐ๋๋๋ ๋๊ด์ UI ์ ๋ฐ์ดํธ๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ์ค์ฉ์ ์ธ ์์์ ํจ๊ป ์์ธํ ์์๋ด์. ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ ํ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์์ฑ์ ๋์ด๋ ๋ ธํ์ฐ๋ฅผ ๊ณต์ ํด์.
๋จ์ด: 1,561๊ฐ17๋ถ[๐ค] TypeScript const Type Parameters: ๋ฆฌํฐ๋ด ํ์ ์ถ๋ก ๊ฐํ์ ์ค์ฉ์ ์ธ ํ์ฉ๋ฒ
TypeScript 5.0์ ๋์ ๋ const Type Parameters๋ฅผ ํ์ฉํ์ฌ ์ ๋ค๋ฆญ ํจ์์ ๋ฆฌํฐ๋ด ํ์ ์ถ๋ก ์ ์ ๊ตํ๊ฒ ์ ์ดํ๊ณ , ๋์ฑ ๊ฒฌ๊ณ ํ ํ์ ์์คํ ์ ๊ตฌ์ถํ๋ ์ค์ฉ์ ์ธ ๋ฐฉ๋ฒ์ ์์๋ณด์ธ์. as const์์ ์ฐจ์ด์ ๊ณผ ์ค์ ์ฝ๋ ์์๋ฅผ ํตํด ์ด์ค๊ธ ๊ฐ๋ฐ์๋ ์ฝ๊ฒ ์ดํดํ ์ ์๋๋ก ์ค๋ช ํด ๋๋ ค์.
- ๋จ์ด: 2,028๊ฐ22๋ถ
[๐ค] Next.js/React ์ฑ CLS ์ต์ ํ: ์ํํธ ์๋ ์ฌ์ฉ์ ๊ฒฝํ ๋ง๋ค๊ธฐ
Next.js์ React ์ ํ๋ฆฌ์ผ์ด์ ์์ Cumulative Layout Shift(CLS) ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ ํ๋ ์ค์ง์ ์ธ ์ ๋ต๊ณผ ์ฝ๋ ์์๋ฅผ ์์ธํ ์์๋ณด์ธ์. ์น ์ฑ๋ฅ ์ต์ ํ์ ํต์ฌ ์์์ธ CLS๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์๋ ค๋๋ ค์.
- ๋จ์ด: 1,740๊ฐ21๋ถ
[๐ค] Next.js SSR, SSG, ISR ๋ ๋๋ง ์ ๋ต: App Router์์ ์ต์ ์ ์ ํ์?
Next.js App Router์์ ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง(SSR), ์ ์ ์ฌ์ดํธ ์์ฑ(SSG), ์ฆ๋ถ ์ ์ ์ฌ์์ฑ(ISR) ๊ฐ ๋ ๋๋ง ์ ๋ต์ ๋์ ์๋ฆฌ, ์ฅ๋จ์ , ์ค์ ํ์ฉ ๋ฐ ์ต์ ํ ๋ฐฉ๋ฒ์ ๋น๊ต ๋ถ์ํด๋๋ ค์.
- ๋จ์ด: 1,478๊ฐ17๋ถ
[๐ค] React Context API์ Zustand: ์ ์ญ ์ํ ๊ด๋ฆฌ, ์ธ์ ๋ฌด์์ ์จ์ผ ํ ๊น์?
React ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ญ ์ํ ๊ด๋ฆฌ๋ฅผ ๊ณ ๋ฏผํ๊ณ ๊ณ์ ๊ฐ์? Context API์ ๊ฐ๋ฒผ์ด ์ธ๋ถ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ Zustand๋ฅผ ๋น๊ต ๋ถ์ํ๊ณ , ์ค๋ฌด์์ ๊ฐ ๋๊ตฌ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ํ์ฉํ๋ ์ ๋ต์ ์ค์ ์ฝ๋ ์์์ ํจ๊ป ์์ธํ ์๋ ค๋๋ ค์.
- ๋จ์ด: 2,004๊ฐ24๋ถ
[๐ค] Turborepo๋ก Next.js ๋ชจ๋ ธ๋ ํฌ ๊ตฌ์ถ: ํจ์จ์ ์ธ ๊ฐ๋ฐ ๋ฐ ์ต์ ํ ์ ๋ต
Turborepo๋ฅผ ํ์ฉํ์ฌ Next.js ํ๋ก์ ํธ๋ฅผ ๋ชจ๋ ธ๋ ํฌ๋ก ๊ตฌ์ฑํ๊ณ , ๊ณต์ ์ปดํฌ๋ํธ, ์ ํธ๋ฆฌํฐ, CI/CD ์ต์ ํ ๋ฐฉ์์ ์ค๋ฌด ์์์ ํจ๊ป ์์ธํ ์ค๋ช ํด ๋๋ ค์.
- ๋จ์ด: 2,338๊ฐ27๋ถ
[๐ค] React useEffect ํ , ์ด์ ํท๊ฐ๋ฆฌ์ง ๋ง์ธ์! (์์กด์ฑ ๋ฐฐ์ด, ํด๋ฆฐ์ ์๋ฒฝ ๊ฐ์ด๋)
React ๊ฐ๋ฐ์์ ํ์์ ์ธ useEffect ํ ์ ๋์ ์๋ฆฌ๋ถํฐ ์์กด์ฑ ๋ฐฐ์ด, ํด๋ฆฐ์ ํจ์ ํ์ฉ๋ฒ, ๊ทธ๋ฆฌ๊ณ ์ค๋ฌด์์ ์์ฃผ ๊ฒช๋ ์ค์์ ์ต์ ํ ์ ๋ต๊น์ง, ์ด์ค๊ธ ๊ฐ๋ฐ์๋ฅผ ์ํ ์๋ฒฝ ๊ฐ์ด๋๋ฅผ ์ ๊ณตํด์.
- ๋จ์ด: 3,284๊ฐ31๋ถ
[๐ค] Next.js Server Actions ์ค์ : ์๋ฌ ์ฒ๋ฆฌ, ์ ํจ์ฑ ๊ฒ์ฌ, ๋๊ด์ UI ์ ๋ฐ์ดํธ
Next.js Server Actions๋ฅผ ์ค๋ฌด์ ์ ์ฉํ ๋ ๋ง์ฃผํ๋ ์๋ฌ ์ฒ๋ฆฌ, ๋ฐ์ดํฐ ์ ํจ์ฑ ๊ฒ์ฌ, ๊ทธ๋ฆฌ๊ณ ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์ํค๋ ๋๊ด์ UI ์ ๋ฐ์ดํธ ๊ธฐ๋ฒ์ ์์ธํ ์ฝ๋ ์์์ ํจ๊ป ์์๋ณด์ธ์.
๋จ์ด: 1,983๊ฐ21๋ถ[๐ค] TypeScript ์ ํธ๋ฆฌํฐ ํ์ ์๋ฒฝ ๊ฐ์ด๋: ์ค์ ํ์ฉ ํจํด
TypeScript ์ ํธ๋ฆฌํฐ ํ์ ์ ํต์ฌ ๊ฐ๋ ๊ณผ ์ค์ ํ์ฉ๋ฒ์ ๊น์ด ์๊ฒ ๋ค๋ค์. Pick, Omit, Partial, Required ๋ฑ ์์ฃผ ์ฐ๋ ์ ํธ๋ฆฌํฐ ํ์ ์ผ๋ก ๋ณต์กํ ํ์ ์ ํจ๊ณผ์ ์ผ๋ก ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์๋ณด์ธ์. ํ์ ์คํฌ๋ฆฝํธ ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ๊ณผ ์์ ์ฑ์ ๋์ด๋ ๋ ธํ์ฐ๋ฅผ ๊ณต์ ํด์.
- ๋จ์ด: 1,712๊ฐ20๋ถ
[๐ค] Next.js App Router ๋ฏธ๋ค์จ์ด: ๊ฐ๋ ฅํ ์์ฒญ ์ฒ๋ฆฌ ์ ๋ต๊ณผ ์ค์ ์์
Next.js App Router ํ๊ฒฝ์์ ๋ฏธ๋ค์จ์ด๋ฅผ ํ์ฉํด ์ฌ์ฉ์ ์ธ์ฆ, ๋ฆฌ๋ค์ด๋ ์ , ๊ตญ์ ํ ๋ฑ์ ์์ฒญ ์ฒ๋ฆฌ ๋ก์ง์ ํจ์จ์ ์ผ๋ก ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ์ค์ ์์ ์ ํจ๊ป ์์ธํ ์์๋ณด์ธ์.
- ๋จ์ด: 1,630๊ฐ19๋ถ
[๐ค] ํ์ ์คํฌ๋ฆฝํธ ์ ๋ค๋ฆญ ์ฌํ: ์ค์ฉ์ ์ธ ํจํด๊ณผ ํํ ์คํด๋ค
ํ์ ์คํฌ๋ฆฝํธ ์ ๋ค๋ฆญ(Generics)์ ๊น์ด ์ดํดํ๊ณ , ์ค๋ฌด์์ ์์ฃผ ์ฌ์ฉ๋๋ ์ ๋ค๋ฆญ ํจํด๊ณผ ํํ ๊ฒช๋ ์คํด๋ค์ ์ค์ ์ฝ๋ ์์์ ํจ๊ป ์ฝ๊ณ ๋ช ํํ๊ฒ ์ค๋ช ํด ๋๋ ค์. ํ์ ์์ ์ฑ๊ณผ ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ์ ๋์ด๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์๋ณด์ธ์.
๋จ์ด: 1,860๊ฐ18๋ถ[๐ค] Next.js Route Handler: App Router์์ ์์ ํ๊ณ ํจ์จ์ ์ธ API ๊ตฌ์ถํ๊ธฐ (์ธ์ฆ, ์๋ฌ ์ฒ๋ฆฌ ํฌํจ)
Next.js App Router์ Route Handler๋ฅผ ์ฌ์ฉํ์ฌ API ์๋ํฌ์ธํธ๋ฅผ ๊ตฌ์ถํ๋ ๋ฐฉ๋ฒ์ ์์ธํ ์์๋ด์. ์ธ์ฆ, ์๋ฌ ์ฒ๋ฆฌ, ๊ทธ๋ฆฌ๊ณ ์บ์ฑ ์ ๋ต์ ํฌํจํ ์ค์ฉ์ ์ธ ํ์ผ๋ก ์์ ํ๊ณ ํจ์จ์ ์ธ ์๋ฒ๋ฆฌ์ค ํจ์๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์ตํ๋ด์.
- ๋จ์ด: 1,934๊ฐ22๋ถ
[๐ค] Next.js Image ์ปดํฌ๋ํธ ์ต์ ํ: Core Web Vitals ๊ฐ์ ๋ถํฐ ์ค์ ํ์ฉ๊น์ง
Next.js์ Image ์ปดํฌ๋ํธ๋ฅผ ํ์ฉํ์ฌ ์น ์ฑ๋ฅ ํต์ฌ ์งํ์ธ Core Web Vitals๋ฅผ ๊ฐ์ ํ๊ณ , ๋ค์ํ ์ต์ ํ ์ต์ ์ ์ค์ ํ๋ก์ ํธ์ ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ธ๋ฃจ๊ฐ ์์ธํ ์๋ ค๋๋ ค์.
- ๋จ์ด: 2,187๊ฐ25๋ถ
[๐ค] Next.js 14.1+์ ํ์ : Partial Prerendering (PPR) ์๋ฒฝ ๊ฐ์ด๋์ ์ค์ ์ต์ ํ ์ ๋ต
Next.js 14.1๋ถํฐ ๋์ ๋ Partial Prerendering (PPR)์ ํตํด ์ด๊ธฐ ๋ก๋ฉ ์๋๋ฅผ ๊ทน๋ํํ๊ณ ๋์ ์ฝํ ์ธ ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์ฌ๋ ์๊ฒ ๋ค๋ฃจ์ด์. PPR์ ๋์ ์๋ฆฌ๋ถํฐ ์ค์ ํ๋ก์ ํธ ์ ์ฉ ์ ๋ต๊น์ง, ๊ฐ๋ฐ์๋ค์ด ๊ถ๊ธํดํ๋ ๋ชจ๋ ๊ฒ์ ์๋ ค๋๋ ค์.
- ๋จ์ด: 1,792๊ฐ19๋ถ
[๐ค] TypeScript ์กฐ๊ฑด๋ถ ํ์ ๊ณผ infer ํค์๋: ๋ณต์กํ ํ์ ๋ ์์ฝ๊ฒ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ
TypeScript ๊ฐ๋ฐ์์ ๋ง์ฃผํ๋ ๋ณต์กํ ํ์ ์ถ๋ก ๋ฌธ์ , ์กฐ๊ฑด๋ถ ํ์ ๊ณผ infer ํค์๋๋ฅผ ํ์ฉํ๋ฉด ํจ์ฌ ์ฐ์ํ๊ณ ๊ฐ๋ ฅํ๊ฒ ํด๊ฒฐํ ์ ์์ด์. ์ค์ ์์ ์ ํจ๊ป ๊ทธ ํ์ฉ๋ฒ์ ์ฌ๋ ์๊ฒ ๋ค๋ค๋ด ๋๋ค.
- ๋จ์ด: 1,705๊ฐ21๋ถ
[๐ค] JavaScript ์ด๋ฒคํธ ๋ฃจํ(Event Loop) ์์ ์ ๋ณต: ๋น๋๊ธฐ ์ฒ๋ฆฌ์ ๋ฐํ์ ๋์ ์๋ฆฌ
JavaScript์ ํต์ฌ ๋น๋๊ธฐ ์ฒ๋ฆฌ ๋ฉ์ปค๋์ฆ์ธ ์ด๋ฒคํธ ๋ฃจํ์ ๋์ ์๋ฆฌ๋ฅผ ์ฌ๋ ์๊ฒ ํํค์ณ ๋ด์. ์ฝ ์คํ, ํ์คํฌ ํ, ๋ง์ดํฌ๋กํ์คํฌ ํ์์ ์ํธ์์ฉ์ ์ดํดํ๊ณ , ์ค๋ฌด์์ ๋ง์ฃผ์น๋ ๋น๋๊ธฐ ์ฝ๋์ ๋์์ ๋ช ํํ ์์ธกํ๋ ๋ฐฉ๋ฒ์ ์๋ ค๋๋ ค์.
- ๋จ์ด: 1,964๊ฐ23๋ถ
[๐ค] Next.js Server & Client Components, ์ค์ ์์ ํ๋ช ํ๊ฒ ์ ํํ๋ ๊ฐ์ด๋
Next.js App Router์์ Server Components์ Client Components ์ค ์ด๋ค ๊ฒ์ ์ฌ์ฉํด์ผ ํ ์ง ๊ณ ๋ฏผ์ด์ ๊ฐ์? ์ด ๊ธ์์ ๋ ์ปดํฌ๋ํธ์ ํต์ฌ ์ฐจ์ด์ , ์ฌ์ฉ ์์ , ๊ทธ๋ฆฌ๊ณ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํ ์ค์ ์ ๋ต์ ๋ธ๋ฃจ๊ฐ ์๋ ค๋๋ฆด๊ฒ์.
- ๋จ์ด: 1,879๊ฐ21๋ถ
[๐ค] TypeScript satisfies ์ฐ์ฐ์: ํ์ ์ถ๋ก ๊ณผ ์์ ์ฑ์ ๋์์ ์ก๋ ๋น๋ฒ
TypeScript์ `satisfies` ์ฐ์ฐ์๋ฅผ ํ์ฉํ์ฌ ํ์ ์ถ๋ก ์ ์ ์ฐ์ฑ์ ์ ์งํ๋ฉด์๋ ์๊ฒฉํ ํ์ ์์ ์ฑ์ ํ๋ณดํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์ธ์. ์ค์ฉ์ ์ธ ์์๋ฅผ ํตํด ์ค์ ํ๋ก์ ํธ์ ์ ์ฉํ๋ ๋ ธํ์ฐ๋ฅผ ๊ณต์ ํฉ๋๋ค.
- ๋จ์ด: 1,211๊ฐ15๋ถ
[๐ค] React 19 ์๋ก์ด ๊ธฐ๋ฅ: use ํ , Actions, ๊ทธ๋ฆฌ๊ณ ์ปดํ์ผ๋ฌ ๋ฏธ๋ฆฌ๋ณด๊ธฐ
React 19์ ํต์ฌ ๋ณ๊ฒฝ ์ฌํญ์ธ use ํ , ์๋ฒ ์ก์ , ๊ทธ๋ฆฌ๊ณ React ์ปดํ์ผ๋ฌ์ ๋์ ๋ฐฐ๊ฒฝ๊ณผ ์ค์ ํ์ฉ ์์๋ฅผ ์ด์ค๊ธ ๊ฐ๋ฐ์ ๋๋์ด์ ๋ง์ถฐ ์์ธํ ์ค๋ช ํฉ๋๋ค. ์ต์ React ์ ๋ฐ์ดํธ๋ฅผ ํตํด ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ๊ณผ ๊ฐ๋ฐ ๊ฒฝํ์ ํฅ์์ํค๋ ๋ฐฉ๋ฒ์ ์์๋ณด์ธ์.
- ๋จ์ด: 1,524๊ฐ16๋ถ
[๐ค] Next.js App Router ์บ์ฑ ์ ๋ต: ๋ฐ์ดํฐ ์ฌ๊ฒ์ฆ (revalidatePath, revalidateTag) ์๋ฒฝ ๊ฐ์ด๋
Next.js 14 App Router์์ ํจ์จ์ ์ธ ๋ฐ์ดํฐ ์บ์ฑ ์ ๋ต๊ณผ revalidatePath, revalidateTag๋ฅผ ์ด์ฉํ ๋ฐ์ดํฐ ์ฌ๊ฒ์ฆ ๋ฐฉ๋ฒ์ ์ค๋ฌด ์์์ ํจ๊ป ์์ธํ ์์๋ณด๊ณ ์น ์ฑ๋ฅ์ ์ต์ ํํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์๋ณด์ธ์.