이 글에서는 로컬에 있는 디스코드 봇 프로젝트 파일을 압축해 업로드하고, 디스호스트에서 정상적으로 호스팅하는 절차를 정리한다. 깃 저장소를 정리하기 어렵거나 코드가 섞여 있는 상황에서 간단히 배포하는 방법을 안내한다.
증상
로컬에서 디스코드 봇 코드는 완성되어 있지만 깃 저장소로 정리하기 어렵다.
직접 파일을 업로드해 바로 실행하려고 할 때 시작 파일이나 종속성 목록이 없거나, 토큰이 코드에 하드코딩되어 있어 배포가 실패한다.
원인
- **시작 엔트리(Entry point)**가 명시되어 있지 않음(
start스크립트 또는 실행 명령 없음). - 종속성 목록이 누락됨(
package.json또는requirements.txt부재). - 민감 정보(봇 토큰 등)가 코드에 하드코딩되어 보안 · 설정 충돌 발생.
- 불필요하게 큰 디렉터리(
node_modules,.git)가 함께 업로드되어 업로드 실패 또는 느린 배포 발생. - 런타임 설정(노드/파이썬 버전, 실행 명령)을 호스팅 플랫폼에 알리지 않음.
해결 방법
1단계: 프로젝트 준비 (공통)
- 프로젝트 루트에 엔트리 파일(예:
index.js,bot.py)이 있는지 확인. - 민감 정보는 절대 코드에 하드코딩하지 말고 환경 변수로 전달하도록 변경. 예:
// Node.js (discord.js 예)
const { Client, Intents } = require('discord.js');
const client = new Client({ intents: [Intents.FLAGS.GUILDS] });
const token = process.env.BOT_TOKEN;
client.login(token);
# Python (discord.py 예)
import os
from discord.ext import commands
bot = commands.Bot(command_prefix='!')
token = os.getenv('BOT_TOKEN')
bot.run(token)
- 불필요한 파일 제외를 위해
.gitignore준비(특히node_modules/,venv/,.env).
2단계: 런타임과 종속성 명시
- Node.js 프로젝트:
package.json에 start 스크립트 추가:
{
"name": "my-discord-bot",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"dependencies": {
"discord.js": "^14.0.0"
}
}
- Python 프로젝트:
- 루트에 requirements.txt 생성:
discord.py==2.0.0
requests==2.28.0
- 필요 시
Procfile또는 플랫폼에 맞는 실행 명령 지정:
web: python bot.py
3단계: 압축 및 업로드
- 루트에서 불필요 폴더 제외하고 압축:
zip -r bot-deploy.zip . -x "node_modules/*" ".git/*" ".venv/*" ".env"
- 디스호스트 대시보드에서 새 애플리케이션 생성 후 파일 업로드 기능을 사용해
bot-deploy.zip업로드.
4단계: 디스호스트에서 설정
- 업로드 후 런타임(예: Node.js 버전, Python 버전) 및 시작 명령을 설정.
- Node.js:
npm start또는node index.js - Python:
python bot.py
- Node.js:
- 환경 변수에
BOT_TOKEN(봇 토큰) 등 민감 값을 등록. 권한(인텐트) 설정에 필요한 값도 환경 변수로 관리 가능. - 빌드/설치 단계에서
npm install또는pip install -r requirements.txt가 자동 실행되는지 확인하거나, 수동 빌드 명령을 입력.
5단계: 실행 확인 및 로그
- 배포 후 로그를 확인해 패키지 설치 오류, 엔트리 파일 에러, 환경 변수 누락 여부를 점검한다.
- 오류가 있으면 로그의 스택트레이스를 보고 해당 파일과 라인 수정 후 재압축 · 재업로드한다.
- 배포 성공 시 봇이 정상적으로 로그인하고 명령에 응답하는지 테스트한다.
마무리
파일 업로드 방식은 깃 정리 없이 빠르게 디스코드 봇을 디스호스트에 호스팅할 때 유용하다. 핵심은 엔트리와 종속성 명시, 민감 정보의 환경 변수 관리, 불필요 파일 제외이다.