
Next.js에서 환경 변수(Environment Variables)는
단순 설정값이 아니라 보안, 배포, 환경 분리를 담당하는 핵심 요소이다.
특히 Next.js는 Server와 Client가 함께 존재하기 때문에
환경 변수의 사용 범위를 명확히 구분해야 한다.
.env.localNext.js에서는 .env.local 파일을 통해 환경 변수를 관리한다.
NEXT_PUBLIC_API_URL=https://api.example.com
NEXT_PUBLIC_APP_ENV=development
DATABASE_URL=postgres://user:password@localhost:5432/db
JWT_SECRET=super-secret-key
.gitignore)| 파일명 | 용도 |
|---|---|
.env | 기본 환경 |
.env.local | 로컬 전용 |
.env.development | 개발 환경 |
.env.production | 배포 환경 |
.env.local > .env.development > .env
.env.local 사용process.env 사용법환경 변수는 process.env로 접근한다.
const apiUrl = process.env.NEXT_PUBLIC_API_URL;
NEXT_PUBLIC_ 필요NEXT_PUBLIC_API_URL=...
→ 브라우저에서 접근 가능
JWT_SECRET=...
→ 서버에서만 사용 가능
Next.js는 클라이언트 코드를 브라우저로 번들링한다.
NEXT_PUBLIC_ → 번들에 포함됨→ 잘못 사용하면 비밀 정보가 그대로 노출됨
Next.js는 코드 실행 위치에 따라 동작이 달라진다.
export async function getServerSideProps() {
const db = process.env.DATABASE_URL;
}
NEXT_PUBLIC_ 변수만 접근 가능useEffect(() => {
fetch(process.env.NEXT_PUBLIC_API_URL);
}, []);
→ 같은 코드라도 실행 위치에 따라 결과가 달라진다
환경 변수는 빌드 및 서버 시작 시점에 로딩된다
npm run dev
# 개발
NEXT_PUBLIC_API_URL=http://localhost:3000
# 배포
NEXT_PUBLIC_API_URL=https://api.myapp.com
NEXT_PUBLIC_APP_ENV=development
if (process.env.NEXT_PUBLIC_APP_ENV === "development") {
console.log("dev mode");
}
JWT_SECRET=...
DATABASE_URL=...
→ NEXT_PUBLIC_ 붙이지 않기
잘못된 예:
const secret = process.env.JWT_SECRET;
→ 클라이언트 코드에서 사용 시 노출 위험
올바른 방식:
NEXT_PUBLIC_ prefix 확인.env.local 위치 확인.env.local은 배포 서버에 포함되지 않음NEXT_PUBLIC_ 필수