framework/NextJS
๐ง Next.js ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ๊ฐ์ด๋
octo54
2025. 5. 27. 10:50
๋ฐ์ํ
๐ง Next.js ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ๊ฐ์ด๋
Next.js ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ์๋ฒ ์ฑ๋ฅ, ์์ ์ฑ, ๋ฐฐํฌ ํ๊ฒฝ์์์ ๋น์ฉ ๋ฑ์ ์ง์ ์ ์ธ ์ํฅ์ ์ค๋๋ค.
์ด ๊ฐ์ด๋์์๋ App Router ๊ธฐ๋ฐ ํ๋ก์ ํธ์์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ์ดํดํ๊ณ ์ต์ ํํ๋ ๋ฐฉ๋ฒ์ ์๊ฐํฉ๋๋ค.
โ 1. Next.js ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ ๊ฐ์
์ฃผ์ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์ฑ ์์
๊ตฌ์ฑ ์์ ์ค๋ช
๋ ๋๋ง ๋ฉ๋ชจ๋ฆฌ | ๊ฐ ์์ฒญ๋ง๋ค ๋ ๋๋ง ๊ฒฐ๊ณผ๋ฅผ ์์ฑํ ๋ ์ฌ์ฉ |
์บ์ ๋ฉ๋ชจ๋ฆฌ | ์ ์ ์์ฐ, ์๋ฒ ์ปดํฌ๋ํธ ๊ฒฐ๊ณผ, ๋ฐ์ดํฐ ํ์นญ ๊ฒฐ๊ณผ ๋ฑ |
Node.js ๋ฐํ์ ๋ฉ๋ชจ๋ฆฌ | Next.js ์๋ฒ๊ฐ ์คํ๋๊ธฐ ์ํ ๊ธฐ๋ณธ ๋ฐํ์ ๋ฉ๋ชจ๋ฆฌ |
๋ฏธ๋ค์จ์ด ๋ฐ Edge Function | ๋ฐฐํฌ ํ๊ฒฝ์ ๋ฐ๋ผ ๋ฉ๋ชจ๋ฆฌ ์ ํ ์กด์ฌ |
โ 2. ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ํ์ธํ๋ ๋ฐฉ๋ฒ
1. process.memoryUsage()
์๋ฒ ์ฝ๋์์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ํ์ธํ ์ ์์ต๋๋ค.
console.log(process.memoryUsage());
์ถ๋ ฅ ์์:
{
rss: 51200000,
heapTotal: 30500000,
heapUsed: 25500000,
external: 1000000
}
ํญ๋ชฉ ์ค๋ช
rss | ์ ์ฒด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ (Resident Set Size) |
heapTotal | JS ์์ง์ด ํ๋ณดํ ํ ๋ฉ๋ชจ๋ฆฌ ์ด๋ |
heapUsed | ์ค์ ์ฌ์ฉ ์ค์ธ ํ ๋ฉ๋ชจ๋ฆฌ |
external | C++ ๋๋ ์ธ๋ถ ๋ชจ๋์ด ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ |
2. Vercel ๋ถ์ ๋๊ตฌ
- Vercel์์๋ ๋น๋/์คํ ํ๊ฒฝ์์ ๋ฉ๋ชจ๋ฆฌ ๋ฐ ์์ฒญ ์๊ฐ์ ์ถ์ ํ ์ ์๋ ๋ก๊ทธ ๋๊ตฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ํจ์ ๊ธฐ๋ฐ ๋ฐฐํฌ ์, 128MB / 512MB / 1024MB์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์ ํ์ ์ค์ ํ ์ ์์
โ 3. ๋ฉ๋ชจ๋ฆฌ ์ต์ ํ ์ ๋ต
๋ฐ์ํ
1. ์๋ฒ ์ปดํฌ๋ํธ ์ต์ ํ
- ํ์ํ ๋ฐ์ดํฐ๋ง ์์ฒญ: getServerSideProps ๋๋ fetch ๋ก์ง์์ ํํฐ๋ง๋ ๋ฐ์ดํฐ๋ง ๋ก๋ฉ
- ์ปดํฌ๋ํธ ์ฌ์ฌ์ฉ: ๊ฐ์ ์์ฒญ์์ ์ค๋ณต ๋ ๋๋ง์ ํผํ๋๋ก ์บ์ ๋ ์ด์ด ํ์ฉ
2. ์ ์ ํ์ด์ง ํ์ฉ
- generateStaticParams() ๋๋ fetchCache: 'force-cache' ์ฌ์ฉ์ผ๋ก SSR ๋์ SSG๋ก ์ฒ๋ฆฌ
- ๋ถํ์ํ ์๋ฒ ๋ฆฌ๋ ๋๋ง ๋ฐฉ์ง
3. Route Handlers ๋๋ Middleware ์ฃผ์
- Edge ํ๊ฒฝ์์๋ ๋ฉ๋ชจ๋ฆฌ ์ ํ์ด ๋ ๋ฎ์ (์: 128MB)
- ํฐ ํ์ผ, ์ด๋ฏธ์ง, ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ์ง ์๋๋ก ์ฃผ์
โ 4. ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฐฉ์ง ํ
์์ธ ํด๊ฒฐ ๋ฐฉ์
๊ธ๋ก๋ฒ ์ํ ๋๋ DB ์ฐ๊ฒฐ ๋์ | ์์ฒญ๋ง๋ค DB ์ฐ๊ฒฐ์ ๋ซ๊ณ , ์ํ ์ด๊ธฐํ |
fetch ์บ์๊ฐ ๊ณผ๋ํ๊ฒ ๋์ ๋จ | revalidate ๋๋ cache: 'no-store' ํ์ฉ |
์ด๋ฏธ์ง, Buffer ๋ฑ ์ค๋ ์ ์ง๋จ | ํ์ ์์ ์ดํ ๋ฐ๋์ null ๋๋ ์ญ์ |
let db: Database | null = null;
export async function GET() {
db = await connectToDB();
const data = await db.query();
db = null; // ์ฐ๊ฒฐ ํด์
return Response.json(data);
}
โ 5. ๋ฐฐํฌ ํ๊ฒฝ์ ๋ฐ๋ฅธ ๋ฉ๋ชจ๋ฆฌ ์ ํ
ํ๊ฒฝ ๊ธฐ๋ณธ ๋ฉ๋ชจ๋ฆฌ ์ ํ ์ ์์ฌํญ
Vercel Edge Function | 128MB~512MB | ํฌ๋ก ์ก/์ด๋ฏธ์ง ์ฒ๋ฆฌ ์ ํ๋จ |
Vercel Serverless | 1024MB๊น์ง ๊ฐ๋ฅ | ์ง์ญ๋ง๋ค ์๋ ์ฐจ์ด ์กด์ฌ |
Node.js ์ง์ ๋ฐฐํฌ | ๋ฉ๋ชจ๋ฆฌ ๋ฌด์ ํ | ์ง์ GC ๊ด๋ฆฌ ํ์ |
Docker | --memory ์ต์ ๊ฐ๋ฅ | ์ปจํ ์ด๋ ๋ ๋ฒจ ์ ํ |
โ 6. ๋ฉ๋ชจ๋ฆฌ ๊ด๋ จ ๊ฐ๋ฐ ์ ๊ณ ๋ ค ์ฌํญ
- ์๋ฒ ์ธก ๋ ๋๋ง์ ์์ฒญ ๋จ์๋ก ๋ฉ๋ชจ๋ฆฌ ํ ๋น๋จ
- ํ์ด์ง๊ฐ ๋ง์์๋ก ์ด๊ธฐ ๋ฉ๋ชจ๋ฆฌ ํ ๋น๋์ด ์ปค์ง ์ ์์
- ์ธ๋ถ API์์ ๋ฐ์ ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณตํ ๋ stream์ ๊ณ ๋ ค
โ ์์ฝ
ํญ๋ชฉ ๊ถ์ฅ ์ ๋ต
๋ฉ๋ชจ๋ฆฌ ๋ถ์ | process.memoryUsage(), Vercel ๋ก๊ทธ |
์๋ฒ ์ปดํฌ๋ํธ | ์บ์ ์ฌ์ฉ, ์ค๋ณต ๋ฐ์ดํฐ ์ ๊ฑฐ |
fetch ์ต์ ํ | no-store, revalidate, force-cache |
์ด๋ฏธ์ง ์ฒ๋ฆฌ | Edge ํจ์ ๋ด์์ ์ฌ์ฉ ์ง์ |
๋ฐฐํฌ ๋ฉ๋ชจ๋ฆฌ ์ค์ | ์๋ฒ๋ฆฌ์ค ์ ํ์ ๋ง๊ฒ ์กฐ์ |
Next.js, ๋ฉ๋ชจ๋ฆฌ ์ต์ ํ, ์๋ฒ ์ปดํฌ๋ํธ, ์บ์ ์ ๋ต, fetch ์ต์ ํ, Edge Function, Vercel ๋ฐฐํฌ, ๋ฉ๋ชจ๋ฆฌ ๋์, ์ฑ๋ฅ ํฅ์, ๋ฉ๋ชจ๋ฆฌ ์ธก์ , App Router, SSR ์ต์ ํ