빌드 파이프라인에서 환경 파일 없어도 실패 안 하게 수정
목차
빌드 자동화 게이트에서 .env 파일이 없으면 빌드가 실패하는 문제를 고쳤다. package.json의 빌드 스크립트에 --env-file-if-exists 플래그를 추가해서, 환경 파일이 없어도 빌드가 계속 진행되도록 만들었다.
선택적 설정 파일과 CI/CD 파이프라인의 마찰
처음부터 이 문제가 있었던 건 아니었다. 어느 순간 자동화된 빌드 게이트가 돌기 시작하면서, .env 파일의 존재 여부가 실행 환경에 따라 달라지는 현상이 생겼다.
로컬 개발 환경에서는 개발자가 .env 파일을 직접 생성해서 필요한 설정값을 담는다. 하지만 빌드 자동화 파이프라인에서는 보안상 이유로, 또는 빌드 단계에서 실제 환경 변수가 필요하지 않을 수도 있다. 예를 들어, 번들링이나 타입스크립트 컴파일 같은 순수 정적 작업이라면 런타임 환경 변수는 필수가 아닐 수 있다.
문제는 빌드 도구(예: dotenv 라이브러리나 스크립트)가 .env 파일을 "반드시" 로드하려고 시도할 때 발생했다. 파일이 없으면 ENOENT 에러로 스크립트 전체가 실패했고, 이것이 파이프라인 단계를 막았다.
해결책: env-file-if-exists로 유연성 확보
package.json의 빌드 스크립트에 --env-file-if-exists 플래그를 추가했다:
{
"scripts": {
"build": "dotenv -p \\\"--env-file-if-exists\\\" -- next build",
// 또는
"build": "node -r dotenv/config.js scripts/build.js"
// 변경 전: dotenv를 강제로 로드하던 방식
// 변경 후: .env가 있으면 로드, 없으면 건너뜀
}
}
이 변경으로:
- 파일이 존재하면: 그 안의 환경 변수를 로드한다.
- 파일이 없으면: 그냥 진행한다. 시스템 환경 변수나 기본값을 사용한다.
선택적 설정 처리의 일반론
이런 유형의 문제는 환경별로 다른 구성 필요도를 다룰 때 자주 만난다.
| 상황 | 처리 방식 | 장점 | 주의점 |
|---|---|---|---|
.env 필수 |
파일 없으면 에러 | 명시적, 개발자 실수 방지 | CI/CD에서 실패하기 쉬움 |
.env 선택적 |
파일 없으면 무시 | 유연함, 자동화 친화적 | 기본값 정의를 명확히 해야 함 |
.env.example 제공 |
템플릿으로 문서화 | 개발자 온보딩 용이 | 항상 최신 상태 유지 필요 |
우리의 경우, 빌드 단계에서는 실제로 환경 변수가 필요 없었으므로 "선택적" 접근이 맞았다. 하지만 이를 팀에 명시하는 것이 중요했다. 나중에 코드리뷰할 때, 새로운 사람이 "왜 .env가 안 필요해?" 하고 물을 수 있기 때문이다.
팀 관점: 자동화 게이트의 신뢰성
자동화된 게이트가 실패하면, 개발 흐름이 끝난다. 가령 PR이 병합되기 전에 빌드 게이트를 통과해야 하는데, 환경 파일 때문에 실패한다면? 개발자는 답답해하고, "왜 우리는 이 단계를 자동화했는가" 하는 의문이 생긴다.
따라서 자동화된 파이프라인은 환경에 최대한 의존하지 않아야 한다. 필요한 환경 변수는:
- 파이프라인 자체에서 주입한다 (secrets 관리)
- 또는 빌드 단계에서는 정말 필요한 것만 사용한다
- 선택적 설정은 "파일 없으면 어떻게 되는가"를 명확히 한다
이번 수정은 작은 것처럼 보이지만, 결과적으로 "우리 파이프라인은 이 정도 환경 변수 상황을 견뎌낸다"는 안정성을 만들었다.
다음엔 뭘 확인했나
이 수정 후, 몇 가지를 점검했다:
- 빌드 스크립트가 .env 있음/없음 양쪽 경우를 모두 테스트했는가
- 기본값이 제대로 정의되어 있는가 (명시적이지 않으면 나중에 혼동 야기)
- 팀 문서나 README에 ".env는 선택적" 이라고 명시했는가
결국 한 줄의 플래그 추가가, 파이프라인 신뢰성과 개발 경험을 모두 개선했다는 점이 보람이었다.
🛒 이 글과 어울리는 추천 상품
*위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.
댓글 0
첫 댓글 달아줘.