Discord.js 봇 배포하기
Daki Hosting에서 Discord.js(Node.js) 봇을 배포하는 단계별 가이드.
이 가이드에서는 Daki Hosting에 Discord.js 봇을 배포하는 과정을 안내해 드려요 — 서버를 만드는 것부터 봇을 온라인으로 올리고 토큰을 안전하게 읽어오기까지요.
배울 내용
- 봇을 위한 Node.js 서버를 만드는 방법
- 코드를 업로드하는 방법
- 설치 명령, 시작 명령, Docker 이미지를 설정하는 방법
.env파일로 봇 토큰을 안전하게 설정하는 방법- 봇을 시작하고 정상 작동하는지 확인하는 방법
준비물
- Daki 계정(Free Tier 또는 유료) — 계정 만들기를 참고하세요
- 봇 토큰이 있는 Discord 봇 — Discord Developer Portal에서 만들 수 있어요
discord.js와dotenv를 의존성으로 포함한package.json이 있는 봇 소스 코드
Discord 봇은 Discord 서버로 아웃바운드 연결을 하며, 인바운드 포트가 필요하지 않아요. 그래서 Discord 봇은 Free Tier와 유료 플랜 모두에서 작동해요. 봇이 HTTP 요청도 처리한다면(예: 슬래시 명령 인터랙션이나 웹훅), 공개 포트는 유료 플랜에서만 사용할 수 있으므로 유료 플랜이 필요해요. 네트워크 & 할당을 참고하세요.
배포 과정
Node.js 서버 만들기
- free.daki.cc에서 Free Tier Dashboard에 로그인하거나, billing.daki.cc에서 Billing Panel에 로그인하세요.
- 새 서버를 만들고 Node.js egg를 선택하세요.
- 서버에 이름을 붙이세요(예:
MyDiscordBot).
전체 과정은 첫 무료 서버 만들기를 참고하세요.
Portal 접속하기
SSO로 Portal에 로그인하세요(대시보드의 Account 페이지 또는 Billing Panel 서비스 페이지에서 Open Portal). 또는 portal.daki.cc에 직접 접속하세요. Portal 개요를 참고하세요.
봇 코드 업로드하기
방법 A — ZIP으로 업로드 (가장 간단함):
- 프로젝트 폴더를 로컬에서
.zip파일로 압축하세요. - Portal에서 Files 탭으로 이동한 뒤 Upload를 클릭하세요.
.zip파일을 마우스 오른쪽 버튼으로 클릭하고 Extract를 클릭하세요.
방법 B — SFTP 사용 (파일 크기 제한 없음): Settings 탭에 있는 SFTP 자격 증명으로 연결한 뒤 폴더를 직접 업로드하세요. 파일 관리자를 참고하세요.
업로드에
node_modules폴더는 포함하지 마세요 — 설치 명령으로 자동 설치돼요.package.json과package-lock.json은 꼭 포함하세요.- 프로젝트 폴더를 로컬에서
Startup 탭 설정하기
Startup 탭을 열고 세 가지 항목을 모두 설정하세요:
1. Docker Image — 봇에 필요한 Node.js 버전을 선택하세요(예: Node.js 22 또는 Node.js 24). 잘 모르겠다면 Node.js 24 LTS가 안전한 기본값이에요. EOL로 표시된 버전은 더 이상 보안 업데이트를 받지 못하므로 피하세요.
2. Install Command — 의존성을 자동으로 설치하도록 설정하세요:
Shellnpm install3. Startup Command — 봇을 실행하는 명령으로 설정하세요:
node index.js— 진입 파일이index.js인 경우node bot.js— 진입 파일이bot.js인 경우npm start—package.json에start스크립트가 있는 경우
프로젝트 구조에 맞게 이 명령들을 자유롭게 바꿔도 돼요.
자세한 설명은 시작 설정을 참고하세요.
.env 파일로 봇 토큰 추가하기
봇이 연결하려면 Discord 토큰이 필요해요. 소스 코드에 노출되지 않도록 서버의
.env파일에 저장하세요.- Files 탭에서 New File을 클릭하고 이름을
.env로 지정하세요. - 토큰을 추가하세요:
.env
BOT_TOKEN=your_discord_bot_token_here - Save를 클릭하세요.
봇 코드에서는
dotenv로 불러오세요:JavaScriptrequire('dotenv').config(); const { Client, GatewayIntentBits } = require('discord.js'); const client = new Client({ intents: [GatewayIntentBits.Guilds] }); client.once('ready', () => { console.log(`Logged in as ${client.user.tag}`); }); client.login(process.env.BOT_TOKEN);설치 명령으로 설치되도록
dotenv가package.json의 의존성에 있는지 확인하세요..env파일 사용에 대한 자세한 내용은 환경 변수를 참고하세요.- Files 탭에서 New File을 클릭하고 이름을
봇 시작하기
Console 탭에서 Start를 클릭하세요. 정상적으로 실행되면 봇의 로그인 확인 메시지가 출력돼요:
TextLogged in as MyBot#1234!대신 오류가 보이면 문제 해결 가이드를 확인하세요.
자주 발생하는 문제
Error: Cannot find module 'discord.js'
의존성이 설치되지 않은 상태예요. package.json에 discord.js가 의존성으로 있는지 확인하고, Startup 탭의 설치 명령이 npm install로 설정되어 있는지 확인하세요. 서버를 재시작하면 설치가 다시 실행돼요.
Error: Cannot find module 'dotenv'
package.json의 의존성에 dotenv를 추가하고 서버를 재시작해서 다시 설치하세요.
Error: An invalid token was provided
.env 파일의 봇 토큰이 잘못되었거나 없어요. Files 탭에서 .env를 열어 값을 확인하세요. 불필요한 공백, 따옴표, 줄바꿈이 없는지 확인하세요.
봇이 시작되지만 곧 연결이 끊어져요
보통 Gateway Intents가 빠져 있어서 생기는 문제예요. Discord Developer Portal에서 봇 애플리케이션에 필요한 특권 인텐트(예: Message Content Intent)를 활성화하고, 코드에서도 해당 인텐트를 요청하는지 확인하세요.
시작하자마자 서버가 충돌해요
Console 탭을 열고 오류를 읽어 보세요. 흔한 원인은 잘못된 시작 명령(파일 이름 오타), 잘못된 Node.js 버전, 또는 node_modules 누락이에요. 문제 해결을 참고하세요.
다음 단계
- 환경 변수 —
.env파일과 코드에서 변수를 읽는 방법에 대한 전체 가이드예요. - 무료 서버 계속 실행하기 — 광고를 보고 Free Tier 서버를 계속 실행하세요.
- 파일 관리자 — 코드를 변경한 뒤 파일을 업데이트하세요.