전체 목록
Next.jsMedium#238

Next.js에서 환경 변수를 사용할 때 NEXT_PUBLIC_ 접두사는 무엇을 의미하나요?

#Next.js#환경변수#보안#Config

답변 포인트

클라이언트 노출 여부와 비밀 값 관리를 기준으로 정의, 장점, 한계, 예시를 함께 설명해보세요.

정답 및 해설

빠른 요약

NEXT_PUBLIC_ 변수는 클라이언트 번들에 포함되어 브라우저에서 볼 수 있습니다. secret이나 private key는 서버 전용 환경 변수로만 관리해야 합니다.

Next.js에서 NEXT_PUBLIC_ 접두사가 붙은 환경 변수는 클라이언트 번들에 포함될 수 있음을 의미합니다. 즉 브라우저에서 누구나 볼 수 있는 값으로 취급해야 합니다.

예시

ENV
DATABASE_URL=postgres://...          #  
NEXT_PUBLIC_ANALYTICS_ID=G-XXXX      #   
TSX
console.log(process.env.NEXT_PUBLIC_ANALYTICS_ID);

중요한 보안 원칙

API secret, DB password, private key, OAuth client secret은 절대 NEXT_PUBLIC_로 두면 안 됩니다. 빌드된 JavaScript를 열어보면 값이 노출될 수 있습니다.

빌드 시점 주의

클라이언트에 포함되는 환경 변수는 보통 빌드 시점에 값이 박힙니다. 컨테이너를 한 번 빌드해 여러 환경에 배포할 때 staging 값이 production에 남는 문제가 생길 수 있습니다.

실무 구분

  • 서버 전용: DB URL, secret key, internal API token
  • 공개 가능: analytics id, public API base URL, feature flag 중 민감하지 않은 값
  • 애매하면 서버 Route Handler를 통해 감싸고 클라이언트에는 직접 노출하지 않습니다.

면접 답변 포인트

NEXT_PUBLIC_은 브라우저 노출을 허용한다는 표시입니다. 비밀값에는 사용하면 안 되고, 빌드 시점 주입 특성도 고려해야 한다고 답하면 됩니다.

관련 질문

같은 카테고리/태그 기준