TechFeedTechFeed
개발자 작업환경

direnv, .envrc, dotenv, 폴더 환경 | 옆 사이트 키가 셸에 남으면?

옆 사이트 슈퍼베이스 주소가 셸에 남으면 넥스트 환경 파일이 아니라 터미널이 안 지운 것이다. source는 폴더를 나가도 남고, 디렉브는 나갈 때 뺀다. 넥스트는 프로세스 값이 파일보다 앞이다. 개발자, Next.js, 슈퍼베이스, 백엔드, API, 깃허브, 데브옵스 기준으로 셸 언로드 칸만 보고 시크릿 글, 미즈 글, includeIf 글과 자리를 섞지 않는다. 2026년 8월 공식 문서.

by

결론부터 말하겠습니다. 옆 사이트 슈퍼베이스 주소가 셸에 남아 있으면 넥스트 환경 파일이 아니라 터미널이 안 지운 겁니다. source로 키를 읽으면 폴더를 나가도 값이 남습니다. 디렉브는 그 폴더를 나갈 때 넣은 변수를 다시 뺍니다. 넥스트 문서는 이미 있는 프로세스 값이 환경 파일보다 앞이라고 적습니다.


저는 12개 사이트를 형제 폴더로 둡니다. 테크에서 보험 폴더로 옮긴 뒤 검수 스크립트가 이전 프로젝트 키로 붙었습니다. 계정 메일은 includeIf 글, 노드 버전은 미즈 글입니다. 여기는 셸이 폴더를 나갈 때 지우는 칸만 봅니다.


숫자는 2026년 8월 디렉브 문서넥스트 환경변수 가이드 기준입니다.


폴더를 나갔는데 이전 키가 왜 셸에 있나

터미널은 폴더를 기억하지 않습니다. 한 번 넣은 변수는 그 창이 닫힐 때까지 갑니다.


넥스트 개발 서버는 자기 폴더의 환경 파일을 읽습니다. 검수 스크립트, 드리즐, 카카오 콜백 테스트는 그 파일을 안 볼 때가 많습니다. 셸에 남은 값을 그대로 씁니다. 넥스트 문서는 찾는 순서가 프로세스 값, 그다음 로컬 파일, 그다음 기본 파일이라고 적습니다. 프로세스에 이미 있으면 지금 폴더 파일은 그 키를 덮지 않습니다.


저는 테크 폴더에서 슈퍼베이스 주소를 내보낸 뒤, 보험 폴더로 옮겨 마이그레이션을 돌렸습니다. 보험 로컬 파일에는 다른 주소가 있었습니다. 스크립트는 테크 주소를 쳤습니다. 시크릿이 커밋에 붙는 칸은 시크릿 체크 글입니다. 오늘은 창이 들고 다니는 값만 봅니다.


누가 넣나폴더를 나가면잘 맞는 자리
셸에 source지금 창그대로 남음한 창, 한 프로젝트만 쓸 때
넥스트 환경 파일넥스트 프로세스그 프로세스만 끝남개발 서버, 빌드
디렉브 폴더 파일훅이 프롬프트마다넣은 값을 다시 뺌형제 폴더, 검수 스크립트
미즈 환경도구 버전 파일버전에 묶임노드 버전 칸, 미즈 글
프로덕션 시크릿버셀, 액션로컬 창과 무관시크릿 체크 글

형제 폴더는 워크트리 글입니다. 그 글은 핫픽스 체크아웃입니다. 워크트리마다 환경 파일을 다시 준비하라고만 적혀 있습니다. 셸이 이전 트리 키를 들고 가는지는 여기입니다.


넥스트를 꺼도 셸 값은 남습니다 | 개발 서버가 읽은 파일과 창에 내보낸 값은 별개입니다. 창을 재사용하면 이전 사이트 키가 다음 명령의 기본값이 됩니다.


source 한 줄이 가장 많이 남는 자리

환경 파일을 셸에 넣는 가장 빠른 방법은 source입니다. 그 한 줄은 빼는 짝이 없습니다.


카카오 콜백을 로컬에서 받을 때 터널 주소와 앱 키를 창에 넣는 습관이 있었습니다. 터널 칸은 터널 글입니다. 키를 창에 남긴 채 다른 사이트로 가면, 그 창의 노드 명령은 이전 앱 키를 씁니다. 로컬 메일이 실주소로 나가는 칸은 메일핏 글입니다. 메일 호스트가 셸에 남아 있으면 같은 실수입니다.


셋으로 내보내는 한 줄도 같습니다. 공백과 따옴표를 깨먹기 쉽고, 나간 뒤에도 남습니다. 홈의 프로필에 사이트 키를 적는 것은 더 넓게 덮습니다. 디렉브 문서가 프로필을 비우라고 적는 이유입니다.


폴더를 나가도 값이 남는 두 줄, 나감과 함께 빠지는 한 줄
# 창에 남는다. 옆 폴더 스크립트가 이 값을 그대로 쓴다 source .env.local # set -a; source .env.local; set +a # 디렉브 폴더 파일. 훅이 있으면 나갈 때 뺀다 # https://direnv.net/man/direnv-stdlib.1.html dotenv_if_exists .env.local dotenv_if_exists .env
형제 폴더를 오가며 터미널에 남은 환경 변수를 확인하는 개발 화면
창을 재사용하면 이전 폴더 키가 다음 명령의 기본값이 된다

훅을 단 뒤 허용을 누르기까지

설치만 하면 아무 일도 안 일어납니다. 셸 설정 끝에 훅을 넣고, 폴더 파일을 허용해야 값이 붙습니다.


맥은 홈브류로 받습니다. 제트셸은 설정 파일 맨 아래에 훅 한 줄을 둡니다. 문서가 다른 프롬프트 확장보다 뒤에 두라고 적습니다. 창을 한 번 닫았다 엽니다. 폴더에 파일을 만들면 허용되지 않았다고 나옵니다. 클론한 저장소가 하드를 지우는 명령을 넣을 수 있어서, 기본은 막혀 있습니다. 내가 적은 파일만 허용합니다.


허용 기록은 데이터 홈 아래 허용 폴더에 남습니다. 파일을 고치면 다시 막힙니다. 편집 명령은 저장 뒤 다시 허용합니다. 거절 명령은 그 파일을 다시 막습니다. 맥 초기 도구 목록은 맥 셋업 글입니다. 그 글은 홈브류 순서입니다. 훅과 허용 칸은 여기입니다.


홈브류 설치, 제트셸 훅, 이 폴더만 허용
# https://direnv.net/docs/installation.html brew install direnv # https://direnv.net/docs/hook.html # ~/.zshrc 맨 아래, 다른 프롬프트 확장보다 뒤 eval "$(direnv hook zsh)" # 창을 재시작한 뒤 프로젝트 폴더에서 # https://direnv.net/man/direnv.1.html direnv allow . direnv status

화이트리스트는 형제 사이트 루트에 두지 않습니다 | 설정 파일의 허용 접두사는 그 아래 모든 폴더 파일을 묻지 않고 실행합니다. 문서도 저장소에 쓰는 사람이 임의 코드를 돌릴 수 있다고 적습니다. 사이트마다 허용을 누릅니다.


넥스트 환경 파일은 셸을 안 지운다

넥스트는 개발 서버와 빌드 프로세스에만 파일을 넣습니다. 그 프로세스가 끝나면 창의 값은 그대로입니다.


찾는 순서는 프로세스 값, 환경별 로컬 파일, 로컬 파일, 환경별 파일, 기본 파일입니다. 테스트 모드에서는 로컬 파일을 안 읽습니다. 이미 있는 프로세스 값이 이기므로, 셸에 남은 옆 사이트 키가 있으면 지금 폴더 로컬 파일은 그 키를 못 덮습니다. 공개 접두사가 붙은 이름만 브라우저 묶음에 들어갑니다. 빌드 시점 값으로 고정됩니다.


루트 설정이나 드리즐처럼 넥스트 밖 프로세스면 공식 패키지의 로드 함수를 쓰거나, 디렉브가 창에 넣어 준 값을 씁니다. 저는 보험 폴더에서 넥스트를 켜기 전에 echo를 한 번 봅니다. 테크 주소가 남아 있으면 서버를 안 켭니다. 프로세스가 홈 폴더를 여는 칸은 노드 권한 글입니다. 값은 여기, 열 수 있는 경로는 그 글입니다.


넥스트 밖 스크립트는 로드 함수를 쓰거나 디렉브 창에서 돌린다
// https://nextjs.org/docs/app/guides/environment-variables // 순서: process.env → .env.${NODE_ENV}.local → .env.local → .env.${NODE_ENV} → .env import { loadEnvConfig } from '@next/env' loadEnvConfig(process.cwd()) # 훅이 없는 크론, 런치디 # https://direnv.net/man/direnv.1.html direnv exec "$PWD" node scripts/validate-post.js 3695
넥스트 환경 파일과 셸 변수가 따로 있는 로컬 개발 터미널
프로세스에 이미 있는 값이 폴더 로컬 파일보다 앞이다

검수 스크립트가 옆 사이트 키로 붙으면

훅은 프롬프트에 붙습니다. 런치디와 크론은 프롬프트가 없습니다.


저는 매일 아침 검수 잡을 맥 에이전트로 돌립니다. 그 잡은 로그인 셸이 아니라서 훅이 안 탑니다. 경로만 적고 노드를 켜면, 그 프로세스의 환경은 잡 정의에 적은 값뿐입니다. 폴더 로컬 파일도 안 읽습니다. 넥스트 밖이기 때문입니다. 실행 명령으로 그 폴더 파일을 먼저 읽게 하거나, 로드 함수를 스크립트 첫 줄에 둡니다.


한글 경로 작업/회사 도 같습니다. 디렉브는 현재와 부모에서 폴더 파일을 찾습니다. 워크트리 형제 폴더는 부모가 공유되면 위 파일을 같이 읽을 수 있습니다. 사이트 루트에만 두고, 위 폴더에는 키를 안 둡니다. 문의 메일이 로컬에서 실주소로 나가면 메일핏 글입니다. 그 호스트가 크론 환경에 남아 있는지는 이 칸에서 먼저 봅니다.


크론과 로컬 터미널이 서로 다른 환경 값을 쓰는 체크 화면
훅은 프롬프트에만 붙는다. 잡은 실행 명령으로 폴더 파일을 읽는다

허용을 안 누르면 그 파일은 안 돈다

폴더 파일은 배시 코드입니다. 키=값만 있는 로컬 파일과 다릅니다.


표준 라이브러리의 닷엔브 함수가 로컬 파일을 읽습니다. 파일이 없을 때를 위한 조건 함수도 있습니다. 감시 함수를 적으면 로컬 파일을 고친 다음 프롬프트에서 다시 읽습니다. 비공개 파일을 추가로 읽는 함수는 보안 검사를 건너뛴다고 매뉴얼이 적습니다. 토큰 파일은 깃에 안 올리고, 이름은 로컬만 씁니다.


설정에서 닷엔브 파일을 기본으로 읽게 할 수 있습니다. 2.31부터입니다. 폴더 파일과 닷엔브가 같이 있으면 폴더 파일이 먼저입니다. 엄격 모드를 켜면 없는 변수와 파이프 실패에서 멈춥니다. 기본이 될 예정이라고 매뉴얼이 적습니다. 노드 바이너리 경로는 레이아웃 노드가 모듈 빈을 앞에 붙입니다. 버전 고정은 미즈 글입니다.


커밋하는 폴더 파일은 함수만, 키는 로컬 파일에
# .envrc | 키를 직접 적지 않는다 # https://direnv.net/man/direnv-stdlib.1.html dotenv_if_exists .env.local dotenv_if_exists .env watch_file .env.local layout node # .envrc.private 은 깃이그노어. 보안 검사를 건너뛴다 # source_env_if_exists .envrc.private

오늘 폴더 파일 하나에 닷엔브만 적는다

오늘 할 일은 지금 쓰는 사이트 루트에 폴더 파일을 하나 두는 일입니다. 키는 로컬 파일에 그대로 두고, 함수로만 읽습니다. 훅을 설정 끝에 넣고 창을 연 뒤, 허용을 누릅니다. 옆 사이트로 옮겨 echo가 비는지 봅니다.


저는 테크 루트부터 넣었습니다. 보험, 카드 폴더는 다음 날 넣었습니다. 화이트리스트는 안 켰습니다. 크론 잡은 실행 명령으로 바꿨습니다. 프로필의 source 줄은 지웠습니다.


오늘 한 줄 | 셸에 남은 키는 넥스트 파일이 안 지웁니다. 폴더 파일을 허용하고, 나갈 때 빼는지 echo로 확인합니다.


참고 자료


내부 연계: includeIf, 미즈, 워크트리, 시크릿 체크, 노드 권한, 맥 셋업, 메일핏, 터널


폴더 파일과 echo가 표보다 우선입니다. 위 동작은 2026년 8월 공개 문서 기준입니다.


자주 묻는 질문

넥스트 로컬 파일만 있으면 디렉브는 필요 없나?

개발 서버와 빌드만 쓰면 로컬 파일로 충분합니다. 검수 스크립트, 드리즐, 크론, 카카오 콜백 테스트는 그 파일을 안 읽습니다. 창에 남은 값이 이깁니다. 형제 폴더를 오가면 디렉브가 나갈 때 그 값을 뺍니다.


폴더 파일에 키를 직접 적어도 되나?

동작은 합니다. 그 파일은 배시라 깃에 올라가면 키가 보입니다. 함수로 로컬 파일만 읽고, 키는 깃이그노어에 둡니다. 클론 뒤 허용을 한 번 누릅니다.


미즈 환경이랑 같이 쓰면?

미즈는 도구 버전 칸입니다. 노드 숫자가 클론마다 다른 문제는 미즈 글입니다. 디렉브는 폴더를 나갈 때 변수를 빼는 칸입니다. 버전은 미즈, 키 언로드는 디렉브로 나눕니다.


크론에서도 자동으로 붙나?

안 붙습니다. 훅은 프롬프트에만 있습니다. 런치디와 크론은 실행 명령으로 그 폴더를 읽게 하거나, 스크립트 첫 줄에서 로드 함수를 호출합니다.


허용을 프로젝트 루트에 한 번만 하면 되나?

그 파일 내용이 바뀌면 다시 막힙니다. 클론한 머신마다 다시 누릅니다. 위 폴더 전체를 화이트리스트에 넣지 않습니다. 저장소에 쓰는 사람이 폴더 파일을 바꿀 수 있습니다.


공개 접두사 변수도 디렉브가 넣나?

셸에는 넣습니다. 브라우저 묶음에 넣는 일은 넥스트 빌드입니다. 공개 접두사는 빌드 시점에 고정됩니다. 디렉브는 창의 값만 갈고, 번들에 심지는 않습니다.


direnv.envrcdotenv폴더 환경환경변수개발자Next.js슈퍼베이스백엔드API깃허브데브옵스

함께 보면 좋은 문제 해결

EXPLORE / 개발자 작업환경

이어서 읽어보기

전체 토픽 둘러보기