ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๋ฐ˜์‘ํ˜•

๐ŸŒ 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 ํ™˜๊ฒฝ ๋ณ€์ˆ˜, ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๋ณด์•ˆ, ์„ค์ • ํŒŒ์ผ ๊ด€๋ฆฌ, ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๋””๋ฒ„๊น…

โ€ป ์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์Šต๋‹ˆ๋‹ค.
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
ยซ   2025/07   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
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
๊ธ€ ๋ณด๊ด€ํ•จ
๋ฐ˜์‘ํ˜•