초보자도 5분 만에 끝내는 디스호스트 사용법: 웹 콘솔 셋업부터 봇 24시간 가동까지

나만의 디스코드 봇 코드를 성공적으로 완성하고 나면, 그 다음으로 마주치는 장벽이 바로 24시간 무중단 가동 환경을 만드는 일입니다. 개인 컴퓨터를 하루 종일 켜두자니 전기세나 발열이 걱정되고, 해외 가상 서버 서비스를 임대해 쓰자니 리눅스 터미널 명령어와 보안 그룹 설정이 막막하게 느껴지곤 하는데요.
저도 예전에 봇을 처음 배포할 때 서버 포트포워딩과 방화벽 설정이 낯설어 며칠 동안 애를 먹었던 경험이 있습니다. 저희 디스호스트 팀이 웹 대시보드를 빌드하면서 가장 공을 들인 부분도 바로 이러한 복잡한 터미널 명령어 입력 없이 초보 개발자분들도 웹 패널 클릭 몇 번으로 봇을 안전하게 동작시킬 수 있게 만드는 것이었습니다.
이번 글에서는 디스호스트의 하드웨어 및 인프라 아키텍처부터 디스코드 개발자 포털 셋업, 파일 업로드 및 환경 변수 등록, 그리고 흔히 마주치는 메모리 부족 오작동 대처법까지 공식 독스를 바탕으로 완벽히 정리해 드리겠습니다.
1. 디스호스트 플랫폼 아키텍처와 기본 제공 스펙
디스호스트는 고성능 클라우드 인프라와 컨테이너 가상화 기술을 기반으로 운영되는 디스코드 봇 전용 호스팅 플랫폼입니다.
- 컨테이너 격리 샌드박스: 각 디스코드 봇은 완벽히 독립된 도커 컨테이너 환경 내에서 실행됩니다. 따라서 다른 사용자의 프로그램이나 외부 위협으로부터 코드가 안전하게 보호됩니다.
- 초고속 인프라: 초고속 NVMe SSD 스토리지와 고성능 멀티코어 프로세서를 탑재하여 봇 이벤트 수신과 명령어 처리에서의 지연 시간을 최소화합니다.
- 고가용성 네트워크: 저지연 네트워크 프록시 라우팅을 채택하여 디스코드 API 게이트웨이와의 웹소켓 연결이 예기치 않게 단절되지 않도록 지속적인 통신을 보장합니다.
회원 가입 시 기본 제공되는 슬롯 사양
| 리소스 항목 | 기본 할당량 | 상세 설명 |
|---|---|---|
| CPU | 25% | Node.JS 및 파이썬 봇 연산 처리에 충분한 점유율 |
| RAM | 128 MB | 핑퐁 봇 및 소규모 기능성 봇 구동에 최적화된 용량 |
| 디스크 용량 | 512 MB | 로컬 캐시, 로그 및 라이브러리 패키지 보관용 공간 |
| 백업 슬롯 | 1개 | 시스템 스냅샷 1회 백업 보관 및 복구 가능 |
만약 봇의 규모가 커져 더 많은 리소스가 필요하다면, 대시보드 내 포인트 상점에서 출석 및 활동 포인트로 메모리 증설권이나 추가 슬롯 연장권을 즉시 교환해 확장하실 수 있습니다.
2. 1단계: 디스코드 개발자 포털 셋업과 토큰 발급
디스호스트에서 봇을 가동하려면 먼저 디스코드 공식 개발자 포털에서 봇 애플리케이션을 생성하고 봇 토큰을 발급받아야 합니다.
- 개발자 포털 접속: 디스코드 개발자 포털에 접속하여 로그인합니다.
- 애플리케이션 생성: 우측 상단의 New Application 단추를 누르고 봇 이름을 입력한 뒤 동의란에 체크하여 생성합니다.
- Bot 메뉴 이동 및 토큰 발급: 왼쪽 메뉴에서 Bot 탭으로 들어간 후, Reset Token 단추를 누르고 인증을 거쳐 봇 토큰 문자열을 발급받아 복사합니다.
(주의: 봇 토큰은 봇의 비밀번호와 같습니다. 깃허브 공개 저장소 등에 1초라도 노출되면 해커가 봇 계정을 탈취해 불법 스팸 유포에 악용할 수 있으므로 절대 외부에 공개해서는 안 됩니다.)
- 게이트웨이 인텐트 활성화: 동일한 Bot 페이지 스크롤 아래쪽의 Privileged Gateway Intents 섹션에서 Message Content Intent 토글 스위치를 반드시 켜주고 Save Changes를 눌러 저장합니다. 이 스위치가 꺼져 있으면 봇이 유저의 메시지 명령어를 인식하지 못하게 됩니다.
3. 2단계: 디스호스트 대시보드 프로젝트 생성
개발자 포털 셋업이 끝났다면 디스호스트 대시보드로 이동해 가상 봇 서버를 개설합니다.
- 대시보드 상단의 새 봇 만들기 단추를 클릭합니다.
- 프로젝트 이름(예:
MyBot)을 입력합니다. - 런타임 엔진 플랫폼을 선택합니다.
- Node.JS: 자바스크립트나 타입스크립트(discord.js 라이브러리)로 개발할 때 선택합니다.
- 파이썬: 파이썬(discord.py 라이브러리)으로 개발할 때 선택합니다.
- 생성 단추를 누르면 몇 초 만에 봇 가상 컨테이너가 셋업됩니다.
4. 3단계: 소스 코드 업로드와 필수 파일 규칙
봇 관리 패널로 진입한 후 파일 관리자 탭을 열어 내 컴퓨터의 봇 코드 파일들을 드래그 앤 드롭으로 업로드합니다.
언어별 꼭 포함해야 하는 파일
- 파이썬 프로젝트: 봇 메인 실행 파일(
main.py또는bot.py)과 함께 설치할 라이브러리가 적힌requirements.txt파일을 루트에 올려야 합니다. - Node.JS 프로젝트: 봇 메인 실행 파일(
index.js)과 패키지 설정 파일인package.json을 루트에 올려야 합니다.
절대로 올려서는 안 되는 파일과 폴더
- 로컬 가상환경 폴더인
venv나__pycache__ - 용량이 큰 노드 패키지 폴더인
node_modules - 개인 토큰이 적힌
.env파일
이러한 불필요한 폴더나 보안 파일은 업로드 대상에서 배제해 주셔야 합니다. 패키지는 서버 시작 시 시스템이 requirements.txt나 package.json을 읽어 자동으로 설치해 드립니다.
5. 4단계: 환경 변수 등록과 24시간 무중단 가동
토큰은 소스 코드에 직접 적어두지 않고 대시보드의 환경 변수 메뉴에 따로 매핑하는 것이 가장 안전합니다.
- 대시보드 왼쪽 메뉴의 환경 변수 탭으로 들어갑니다.
- 변수 이름에는
DISCORD_TOKEN을 적고, 변수 값에는 개발자 포털에서 복사해 온 토큰 문자열을 대입한 뒤 저장합니다. - 소스 코드 상에서는
os.getenv("DISCORD_TOKEN")이나process.env.DISCORD_TOKEN구문으로 가져오도록 작성합니다. - 상단 컨트롤바의 시작 버튼을 누르면 부팅 로그가 실시간으로 출력되며 패키지 자동 설치 후 봇 구동이 시작됩니다. 로그 콘솔에 로그인 성공 문구가 뜨면 성공입니다.
6. 심화: 메모리 부족 크래시 및 종료 코드 137 진단과 해결책
봇을 24시간 가동하다 보면 콘솔 로그에 Process exited with code 137 혹은 Out of Memory 경고가 발생하며 봇이 멈추는 경우가 있을 수 있습니다. 이는 시스템이 할당된 128MB 메모리 한계치를 넘은 프로세스를 보호 차원에서 강제 정지할 때 발생합니다.
주요 발생 원인
- 이미지 가공 모듈이나 브라우저 제어 모듈 등 대형 라이브러리 탑재
- 이벤트 리스너 누적이나 전역 배열 데이터 적재로 인한 메모리 누수
- 봇이 참여한 수백 개 서버의 전체 메시지 및 멤버 오브젝트 과도 캐싱
Node.JS 힙 메모리 제약 설정 (가장 효과적인 해결책)
Node.JS 런타임은 물리 램 공간을 과도하게 선점하려는 경향이 있습니다. 대시보드의 스타트업 설정 내 시작 명령 인수 필드에 아래 매개변수를 추가해 주시면 힙 메모리 크기를 수동 제어할 수 있습니다.
--max-old-space-size=90
이 옵션을 적용하면 Node.JS 엔진이 메모리 90MB에 도달하기 전 스스로 쓰레기 수집 작업을 강력하게 수행하여 128MB 장벽을 넘지 않도록 예방해 줍니다.
또한 Node.JS 코드 작성 시 아래처럼 클라이언트 가비지 캐싱을 억제해 주는 옵션을 추가하는 것도 큰 도움이 됩니다.
const { Client, GatewayIntentBits, Options } = require('discord.js');
const client = new Client({
intents: [GatewayIntentBits.Guilds],
makeCache: Options.cacheWithLimits({
MessageManager: 0,
PresenceManager: 0,
UserManager: 0
})
});
오늘 안내해 드린 아키텍처와 셋업 가이드, 그리고 메모리 최적화 팁을 참고하셔서 24시간 동안 끊김 없이 작동하는 나만의 디스코드 봇을 안정적으로 운영해 보시기를 바랍니다.