framework/NextJS

🌍 Next.js ν™˜κ²½ λ³€μˆ˜ μ„€μ • κ°€μ΄λ“œ

octo54 2025. 5. 19. 10:12
λ°˜μ‘ν˜•

🌍 Next.js ν™˜κ²½ λ³€μˆ˜ μ„€μ • κ°€μ΄λ“œ

Next.jsμ—μ„œλŠ” ν™˜κ²½ λ³€μˆ˜λ₯Ό 톡해 λ‹€μ–‘ν•œ ν™˜κ²½μ— 맞좰 μ„€μ • 값을 관리할 수 μžˆμŠ΅λ‹ˆλ‹€.
개발, ν…ŒμŠ€νŠΈ, ν”„λ‘œλ•μ…˜ ν™˜κ²½μ— 따라 각기 λ‹€λ₯Έ λ³€μˆ˜ 값을 μ§€μ •ν•˜μ—¬ μœ μ—°ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ ꡬ성이 κ°€λŠ₯ν•©λ‹ˆλ‹€.


βœ… 1. κΈ°λ³Έ ν™˜κ²½ λ³€μˆ˜ μ„€μ •

ν™˜κ²½ λ³€μˆ˜ 파일 ꡬ쑰

Next.jsμ—μ„œλŠ” λ‹€μŒκ³Ό 같은 파일 μ΄λ¦„μœΌλ‘œ ν™˜κ²½ λ³€μˆ˜λ₯Ό 관리할 수 μžˆμŠ΅λ‹ˆλ‹€:

.env                # κΈ°λ³Έ ν™˜κ²½ (개발)
.env.local          # 둜컬 ν™˜κ²½ (Git에 μΆ”κ°€ν•˜μ§€ μ•ŠμŒ)
.env.development    # 개발 ν™˜κ²½
.env.production     # ν”„λ‘œλ•μ…˜ ν™˜κ²½
.env.test           # ν…ŒμŠ€νŠΈ ν™˜κ²½

ν™˜κ²½ λ³€μˆ˜ 파일 μ˜ˆμ‹œ

.env

NEXT_PUBLIC_API_URL=https://api.example.com
SECRET_KEY=mysecretkey

ν™˜κ²½ λ³€μˆ˜ μ‚¬μš©

Next.jsμ—μ„œλŠ” process.env 객체λ₯Ό 톡해 ν™˜κ²½ λ³€μˆ˜λ₯Ό 뢈러올 수 μžˆμŠ΅λ‹ˆλ‹€.

// app/page.tsx
export default function HomePage() {
  return (
    <div>
      <h1>API URL: {process.env.NEXT_PUBLIC_API_URL}</h1>
    </div>
  );
}

βœ… 2. ν™˜κ²½ λ³€μˆ˜λͺ… κ·œμΉ™

λ°˜μ‘ν˜•

Next.jsμ—μ„œ ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μ ‘κ·Ό κ°€λŠ₯ν•œ λ³€μˆ˜λŠ” λ°˜λ“œμ‹œ NEXT_PUBLIC_ 접두어λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.
접두어 없이 μ„ μ–Έλœ λ³€μˆ˜λŠ” μ„œλ²„ μΈ‘μ—μ„œλ§Œ μ ‘κ·Ό κ°€λŠ₯ν•©λ‹ˆλ‹€.

μ˜¬λ°”λ₯Έ 예

NEXT_PUBLIC_ANALYTICS_ID=123456

잘λͺ»λœ 예

API_SECRET_KEY=mysecretkey   # ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μ ‘κ·Ό λΆˆκ°€

βœ… 3. ν™˜κ²½ λ³€μˆ˜ λ‘œλ”© μˆœμ„œ

  1. .env.local
  2. .env.development, .env.production, .env.test
  3. .env

주의:
.env.local은 항상 κ°€μž₯ μš°μ„ μ‹œ 되며, 버전 κ΄€λ¦¬μ—μ„œ μ œμ™Έν•΄μ•Ό ν•©λ‹ˆλ‹€.
.env.production νŒŒμΌμ€ ν”„λ‘œλ•μ…˜ λΉŒλ“œ μ‹œμ—λ§Œ μ‚¬μš©λ©λ‹ˆλ‹€.


βœ… 4. μ„œλ²„μ—μ„œ μ‚¬μš©ν•˜κΈ°

μ„œλ²„ μ „μš© ν™˜κ²½ λ³€μˆ˜λŠ” NEXT_PUBLIC_ 접두어 없이 μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

DATABASE_URL=postgres://user:pass@localhost:5432/mydb

μ‚¬μš© μ˜ˆμ‹œ

// app/api/data/route.ts
import { NextResponse } from 'next/server';

export async function GET() {
  const dbUrl = process.env.DATABASE_URL;
  return NextResponse.json({ url: dbUrl });
}

βœ… 5. ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μ‚¬μš©ν•˜κΈ°

ν΄λΌμ΄μ–ΈνŠΈ μ»΄ν¬λ„ŒνŠΈμ—μ„œλŠ” NEXT_PUBLIC_ 접두어λ₯Ό λ°˜λ“œμ‹œ μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.

// app/page.tsx
export default function HomePage() {
  return (
    <div>
      <h2>API Endpoint: {process.env.NEXT_PUBLIC_API_URL}</h2>
    </div>
  );
}

βœ… 6. ν™˜κ²½ λ³€μˆ˜ μ„€μ • 방법

개발 ν™˜κ²½

npm run dev

ν”„λ‘œλ•μ…˜ ν™˜κ²½

npm run build
npm start

λΉŒλ“œ μ‹œ ν™˜κ²½ λ³€μˆ˜ μ„€μ •

λΉŒλ“œ μ‹œ ν™˜κ²½ λ³€μˆ˜λ₯Ό λͺ…μ‹œμ μœΌλ‘œ μ§€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

NEXT_PUBLIC_API_URL=https://api.prod.com npm run build

λŸ°νƒ€μž„ μ‹œ ν™˜κ²½ λ³€μˆ˜ μ„€μ •

NEXT_PUBLIC_API_URL=https://api.prod.com npm start

βœ… 7. Vercel ν™˜κ²½ λ³€μˆ˜ μ„€μ •

Vercel에 배포할 λ•ŒλŠ” Vercel λŒ€μ‹œλ³΄λ“œμ—μ„œ ν™˜κ²½ λ³€μˆ˜λ₯Ό μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  1. ν”„λ‘œμ νŠΈ 선택
  2. SettingsEnvironment Variables
  3. 킀와 값을 μž…λ ₯ν•˜κ³  μ €μž₯

배포 ν›„ ν™˜κ²½ λ³€μˆ˜λ₯Ό λ³€κ²½ν•  경우 μž¬λ°°ν¬κ°€ ν•„μš”ν•©λ‹ˆλ‹€.


βœ… 8. 문제 ν•΄κ²°

ν™˜κ²½ λ³€μˆ˜κ°€ μ•ˆ 보일 λ•Œ

  1. ν™˜κ²½ λ³€μˆ˜ 이름 μ•žμ— NEXT_PUBLIC_κ°€ μ—†λŠ” 경우
  2. λΉŒλ“œ ν›„ 값이 λ°˜μ˜λ˜μ§€ μ•Šμ€ 경우
  3. .env.local 파일이 μ—†λŠ” 경우

확인 방법

npm run build && npm start

λΈŒλΌμš°μ €μ—μ„œ λ‹€μŒμ„ ν™•μΈν•©λ‹ˆλ‹€:

API URL: https://api.prod.com

βœ… 9. λ³΄μ•ˆ κ³ λ € 사항

  • ν΄λΌμ΄μ–ΈνŠΈ λ…ΈμΆœ λ°©μ§€: λ―Όκ°ν•œ μ •λ³΄λŠ” NEXT_PUBLIC_ 없이 μ„€μ •ν•˜μ—¬ μ„œλ²„ μ „μš©μœΌλ‘œ μ‚¬μš©
  • ν™˜κ²½ λ³€μˆ˜ 관리: 둜컬 개발과 ν”„λ‘œλ•μ…˜ ν™˜κ²½μ„ κ΅¬λΆ„ν•˜μ—¬ 관리
  • λΉ„λ°€ν‚€ 관리: .env.local은 Git에 μ»€λ°‹λ˜μ§€ μ•Šλ„λ‘ .gitignore에 μΆ”κ°€

.gitignore

.env.local

βœ… μš”μ•½

ν•­λͺ© μ„€λͺ…

ν™˜κ²½ λ³€μˆ˜ 파일 ꡬ쑰 .env, .env.local, .env.development λ“± 관리
ν΄λΌμ΄μ–ΈνŠΈ μ ‘κ·Ό NEXT_PUBLIC_ 접두어 ν•„μˆ˜
μ„œλ²„ μ „μš© λ³€μˆ˜ 접두어 없이 μ‚¬μš© κ°€λŠ₯
Vercel 배포 μ„€μ • Vercel λŒ€μ‹œλ³΄λ“œμ—μ„œ ν™˜κ²½ λ³€μˆ˜ μ„€μ • κ°€λŠ₯
λ³΄μ•ˆ κ³ λ € 사항 민감 μ •λ³΄λŠ” NEXT_PUBLIC_ 접두어 μ‚¬μš© κΈˆμ§€

 

Next.js, ν™˜κ²½ λ³€μˆ˜, ν™˜κ²½ μ„€μ •, ν™˜κ²½ λ³€μˆ˜ 관리, ν΄λΌμ΄μ–ΈνŠΈ ν™˜κ²½ λ³€μˆ˜, μ„œλ²„ ν™˜κ²½ λ³€μˆ˜, Vercel ν™˜κ²½ λ³€μˆ˜, ν™˜κ²½ λ³€μˆ˜ λ³΄μ•ˆ, μ„€μ • 파일 관리, ν™˜κ²½ λ³€μˆ˜ 디버κΉ