OffshoreVps
튜토리얼2026년 10월 8일읽는 시간 5분작성: OffshoreVps 팀

VPS에서 Telegram 봇을 호스팅하는 방법

봇 토큰을 발급받고, Python 봇을 작성하고, 토큰을 안전하게 보관하고, systemd 서비스로 24/7 실행하는 방법을 알려 드립니다.

Telegram 봇은 메시지에 답하려면 항상 실행 중이어야 합니다. 노트북에서 실행하면 덮개를 닫을 때마다 오프라인이 됩니다. 월 몇 달러의 작은 VPS로 이를 해결할 수 있습니다. 이 가이드는 Python 봇을 systemd 서비스로 실행해 부팅 시 시작되고 충돌 후 재시작되게 합니다.

Telegram 봇을 호스팅하는 데 사용하는 명령어를 보여 주는 VPS의 터미널 창으로, “sudo apt update && sudo apt install -y python3 p”로 시작함
이 가이드에서 서버에서 실행하게 될 명령어의 종류입니다.

어느 정도 사양의 VPS가 필요할까요?

대부분의 봇은 가볍습니다. 1~2 vCPU와 2 GB RAM 플랜이면 충분합니다. 추천 플랜은 Telegram 봇 호스팅을 참고하세요.

1단계: 봇 토큰 받기

Telegram에서 @BotFather와 대화하고 /newbot을 보낸 뒤, 이름과 bot으로 끝나는 사용자 이름을 정하고 토큰을 복사하세요. 토큰이 있으면 누구나 봇을 제어할 수 있으므로 비밀번호처럼 다루세요.

2단계: 서버 준비

sudo apt update && sudo apt install -y python3 python3-venv
sudo adduser --disabled-password --gecos "" botuser
sudo -iu botuser
mkdir ~/mybot && cd ~/mybot
python3 -m venv .venv
. .venv/bin/activate
pip install python-telegram-bot

3단계: 간단한 봇 작성

# bot.py
import os
from telegram import Update
from telegram.ext import ApplicationBuilder, CommandHandler, ContextTypes

async def start(update: Update, ctx: ContextTypes.DEFAULT_TYPE):
    await update.message.reply_text("Hello! I am running on a VPS.")

app = ApplicationBuilder().token(os.environ["BOT_TOKEN"]).build()
app.add_handler(CommandHandler("start", start))
app.run_polling()

폴링은 열린 포트가 필요 없으므로 도메인이나 웹훅을 설정하지 않아도 됩니다.

이 가이드의 단계를 순서대로 나열하면 다음과 같습니다. 1. 어떤 사양의 VPS가 필요할까?; 2. 봇 토큰 발급; 3. 작은 봇 작성; 4. 토큰을 안전하게 보관; 5. 업데이트와 모니터링; 6. 폴링일까, 웹훅일까?
이 가이드의 단계를 순서대로 나열한 것입니다.

4단계: 토큰을 안전하게 보관

echo "BOT_TOKEN=123456:ABC..." > ~/mybot/.env
chmod 600 ~/mybot/.env

5단계: 서비스로 실행

관리자 사용자로 돌아와 /etc/systemd/system/mybot.service를 만드세요:

[Unit]
Description=Telegram bot
After=network-online.target

[Service]
User=botuser
WorkingDirectory=/home/botuser/mybot
EnvironmentFile=/home/botuser/mybot/.env
ExecStart=/home/botuser/mybot/.venv/bin/python bot.py
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now mybot
sudo journalctl -u mybot -f

업데이트와 모니터링

  • 코드를 업데이트한 다음 sudo systemctl restart mybot을 실행하세요.
  • journalctl -u mybot -n 100으로 로그를 확인하세요.
  • 봇이 데이터를 저장한다면 백업을 사용하세요.

폴링과 웹훅 중 무엇을 쓸까요?

폴링이 가장 간단하며 대부분의 봇에 충분합니다. 대량의 즉시 전달이 필요하다면 웹훅을 사용하세요. 도메인과 HTTPS가 필요합니다. Nginx와 HTTPS로 호스팅하기를 참고하세요.