변수 이름이 서버 전용인지 공개 번들인지 결정한다

같은 process.env라도 접두사와 실행 위치에 따라 값이 남는 곳이 완전히 달라진다.

서버에서만 읽는 값

이름
DATABASE_URL, API_SECRET
읽는 곳
Route Handler, Server Action, Server Component, build 설정
보안
브라우저 번들에 넣지 않는다. 응답에 직접 담지 않는 한 노출되지 않는다.
주의
클라이언트 컴포넌트에서 직접 읽을 수 없고, 필요한 결과만 API로 내려야 한다.

브라우저에도 들어가는 값

이름
NEXT_PUBLIC_API_BASE_URL, NEXT_PUBLIC_GA_ID
읽는 곳
Client Component와 브라우저 JavaScript 번들
보안
개발자 도구에서 보일 수 있다. secret, token, DB URL 금지.
주의
빌드 시점 값이 박히므로 바꾸면 새 deployment로 확인한다.
라우팅

민감 값은 API route 또는 server action 안에서 사용한다.

렌더링

클라이언트는 공개 가능한 식별자와 endpoint만 가진다.

배포

Preview와 Production의 값 범위를 분리해 사고를 막는다.