티켓봇 템플릿을 배포하거나 호스팅할 때 봇이 바로 종료되며 로그에 throw new Error("Missing environment variables");가 찍히는 현상이 있다. 이 글에서는 원인과 구체적인 점검·해결 절차를 정리한다.
증상
- 디스코드 봇이 프로세스 시작 직후 종료됨.
- 호스팅 로그(콘솔)에
Missing environment variables또는 유사한 예외 메시지 출력. - 템플릿 코드가 환경변수를 필수로 검사하고 있어 바로 에러를 던짐.
원인
- 필수 환경변수(예: Discord 토큰 등)가 설정되지 않았거나 이름이 틀림.
- 호스팅 환경에 환경변수를 등록하지 않았거나 값에 따옴표/공백이 포함되어 실제 값이 잘못 전달됨.
- 로컬 개발에서는
.env사용했지만 배포 환경에서는 해당 파일을 반영하지 않음.
해결 방법
1단계: 로그와 코드에서 어떤 변수를 요구하는지 확인
템플릿 코드에서 환경변수 체크 부분을 찾아 어떤 키를 요구하는지 확인한다. 예:
if (!process.env.DISCORD_TOKEN || !process.env.CLIENT_ID) {
throw new Error("Missing environment variables");
}
필요한 키 목록을 정확히 파악한 뒤 아래 절차로 설정한다.
2단계: 로컬에서 먼저 확인 (.env + dotenv)
개발 환경에서 동작 확인용으로 .env 파일을 만들고 dotenv로 로드해 본다.
# .env
DISCORD_TOKEN=your_token_here
CLIENT_ID=your_client_id
GUILD_ID=your_guild_id
// index.js (초기화 위치)
require('dotenv').config();
console.log('DISCORD_TOKEN' in process.env, process.env.DISCORD_TOKEN ? '[redacted]' : 'missing');
npm install dotenv후 실행해 값이 로드되는지 확인.- 로그에 실제 토큰을 출력하지 말고 존재 여부만 확인하라.
3단계: 호스팅(디스호스트 등)에 환경변수 등록
디스호스트 같은 호스팅 패널에 접속해 프로젝트 설정에서 환경변수(Secrets) 키/값을 등록한다.
- 키는 코드에서 사용한 이름과 대소문자까지 정확히 일치시킨다 (
DISCORD_TOKENvsdiscord_token). - 값 입력 시 따옴표나 불필요한 공백을 제거한다.
- 등록 후 인스턴스 또는 컨테이너를 재시작한다.
예: 디스호스트 대시보드 → 프로젝트 설정 → Environment Variables → 추가 → 재배포/재시작
4단계: 배포 후 검증 및 추가 점검
- 재시작 후 로그에서 동일한 에러가 사라졌는지 확인한다.
- 여전히 문제면 아래 점검을 수행:
- 환경변수 키를 코드에서
console.log(Object.keys(process.env))로 잠깐 출력해 전달 여부 확인(배포 환경에서는 민감 정보 노출 주의). - 값에 줄바꿈, 공백, 잘못된 인코딩이 있는지 확인.
- CI/CD 파이프라인을 쓰면 배포 시점에 환경변수가 주입되는지 확인.
- 환경변수 키를 코드에서
마무리
티켓봇 템플릿이 즉시 종료되는 대표 원인은 필수 환경변수 누락이다. 로컬에서 .env로 검증한 뒤 디스호스트 같은 호스팅 패널에 정확한 키와 값으로 등록하고 인스턴스를 재시작하면 문제를 해결할 수 있다.