디스코드 봇 배포 시 앱이 재시작해도 오프라인으로 남는 문제 해결 가이드

2026년 2월 8일·27개 메시지

디스코드 봇이 호스팅 환경에서 재시작 후에도 오프라인 상태로 남고, 로그에 app.py 특정 줄에서 오류가 발생하는 경우의 진단과 해결 절차를 정리한다. 디스호스트 등 호스팅 환경에서 발생하는 패키지 불일치와 설정 누락을 중점으로 다룬다.

증상

  • 호스팅에서 재시작(Reboot) 후 봇이 오프라인 상태로 유지된다.
  • 호스팅 로그에 파이썬 예외가 찍히며, app.py의 3번째 줄(또는 초기 임포트 라인)에서 에러가 발생한다.
  • 로그에 설치된 라이브러리 정보(예: py-cord 2.7.0) 또는 ImportError/AttributeError 같은 메시지가 보인다.

원인

  • 코드가 특정 Discord 라이브러리(예: discord.py 2.x) 문법을 사용하도록 작성되어 있는데, 호스팅 환경에는 다른 구현체(예: py-cord 2.7.0)가 설치되어 있어 API 불일치로 예외가 발생한다.
  • 의존성 설치가 자동으로 되지 않아 필요한 패키지가 누락되었거나, 호스팅에서 콘솔이나 pip 실행 권한이 없어 설치가 반영되지 않았다.
  • 봇 토큰이나 환경변수 미설정, 잘못된 시작 명령으로 프로세스가 정상 기동하지 않음.

해결 방법

1단계: 로그와 에러 메시지 확인

  • 호스팅의 로그 탭을 열어 전체 트레이스백을 확인한다. 에러가 ImportError인지, AttributeError인지, 또는 다른 라인에서 나는지 반드시 확인한다.
  • 설치된 패키지 정보가 로그나 환경에서 노출되면 버전 정보를 적어둔다(예: py-cord 2.7.0).

2단계: 코드와 설치 패키지 일치시키기

  • 코드가 discord.py 문법을 쓰면 discord.py를 설치하거나, 설치된 구현체에 맞게 코드를 바꾼다.
  • 호환되는 최소 예제(명령형 봇, 메시지 컨텐츠 활성화):
# app.py (commands.Bot 방식, discord.py / py-cord 공통)
import os
import discord
from discord.ext import commands

TOKEN = os.environ.get("DISCORD_TOKEN")  # 호스팅 환경에 DISCORD_TOKEN 설정 권장

intents = discord.Intents.default()
intents.message_content = True

bot = commands.Bot(command_prefix="!", intents=intents)

@bot.event
async def on_ready():
    print(f"Logged in as {bot.user}")

bot.run(TOKEN)
  • 설치를 변경하려면 로컬에서 테스트 후 호스팅에 반영한다.

3단계: 의존성 명시 및 재배포

  • 호스팅에서 pip 사용이 가능하면 패키지 설치:
# discord.py 설치 (discord.py 사용시)
python -m pip install --upgrade discord.py

# 또는 py-cord 특정 버전으로 고정
python -m pip install --upgrade py-cord==2.7.0
  • 호스팅이 자동으로 requirements.txt를 읽는 경우 프로젝트 루트에 파일 생성:
# requirements.txt
py-cord==2.7.0
# 또는
discord.py==2.3.2
  • requirements.txt를 커밋 후 배포하면 호스팅이 의존성을 설치한다.

4단계: 시작 명령과 환경변수 확인

  • 호스팅의 프로세스/서비스 시작 명령이 python app.py로 되어 있는지 확인한다.
  • 봇 토큰을 코드에 하드코딩하지 말고 환경변수(DISCORD_TOKEN)로 설정하고, 호스팅 대시보드에서 해당 변수 값을 등록한다.

5단계: 콘솔 접근이 없을 때 대응

  • 콘솔이 불가하면 위 변경사항을 로컬에서 반영해 커밋 및 배포한다(특히 requirements.txtapp.py 수정).
  • 배포 후 로그를 통해 재시작 결과와 예외 출력을 확인한다.

마무리

디스코드 봇이 오프라인인 경우 대부분은 코드-라이브러리 불일치나 의존성 누락, 환경변수/시작 명령 문제다. 디스호스트 같은 호스팅에서 작업할 때는 requirements.txt로 의존성을 고정하고, 토큰을 환경변수로 설정한 뒤 로그를 통해 에러 라인을 확인하면 문제를 빠르게 해결할 수 있다.