−25%

Windows 연간 결제, 10월 31일까지. 요금제 보기

EQVPS
시작하기

VPS에서 Telegram 봇을 호스팅하는 법 (그리고 계속 돌리기)

2026년 6월 15일 · 2 분 읽기 · EQVPS Team

노트북이 열려 있는 동안에만 돌아가는 Telegram 봇은 정말 돌아가는 게 아닙니다 — 시연하는 것입니다. 실제로 온라인이고, 새벽 3시에 답하고, 당신의 재부팅과 자신의 크래시를 견디려면, 서버 위에 살아야 합니다. 여기 전체 경로가, 처음부터 끝까지, 명령과 함께 있습니다.

먼저 좋은 소식: 봇은 아주 작은 워크로드입니다. 대체로 메시지를 기다리며 유휴 상태로 앉아 있으므로, 가장 싼 박스가 잘 돌립니다 — 전용 IP도, 도메인도, 화려한 것도 없이.

1. BotFather에서 토큰 받기

Telegram에서 @BotFather에게 메시지를 보내고, /newbot을 보내고, 이름과 사용자명을 고르세요. 12345:AAH... 같은 토큰을 건네줍니다. 비밀번호처럼 다루세요 — 그것을 가진 누구든 당신의 봇을 제어합니다.

2. 최소한의 봇

서버에 SSH로 들어가 Python과 라이브러리를 설정:

sudo apt update && sudo apt install -y python3-venv
mkdir ~/mybot && cd ~/mybot
python3 -m venv venv && source venv/bin/activate
pip install python-telegram-bot

응답하는 봇 — ~/mybot/bot.py:

import os
from telegram.ext import ApplicationBuilder, CommandHandler

async def start(update, ctx):
    await update.message.reply_text("Alive and on a server. 🟢")

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

토큰을 환경 변수에서 읽는 점에 주목 — 하드코딩이 아닙니다. 그것이 다음 단계에서 중요합니다.

3. 실제로 계속 돌리는 부분: systemd

그냥 python bot.py를 돌리면 SSH를 닫는 순간 죽습니다. systemd 서비스가 로그아웃, 크래시, 재부팅을 견디게 만드는 것입니다. /etc/systemd/system/mybot.service를 만드세요:

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

[Service]
WorkingDirectory=/home/youruser/mybot
Environment=BOT_TOKEN=12345:AAH...your-token
ExecStart=/home/youruser/mybot/venv/bin/python bot.py
Restart=always
RestartSec=5
User=youruser

[Install]
WantedBy=multi-user.target

그다음:

sudo systemctl daemon-reload
sudo systemctl enable --now mybot
sudo systemctl status mybot      # active (running)이라고 나와야 함
journalctl -u mybot -f           # 실시간 로그

Restart=always가 실제 일을 하는 줄입니다 — 크래시해도 5초 안에 돌아옵니다. enable은 재부팅 후 올라온다는 뜻입니다. 그것이 "봇을 한 번 돌렸다"와 "내 봇이 떠 있다"의 전부의 차이입니다.

4. 왜 도메인이나 열린 포트가 필요 없는가

봇은 롱폴링을 씁니다 — 업데이트를 위해 Telegram으로 손을 뻗으므로 아무것도 안으로 닿을 필요가 없습니다. 공개 URL도, 인바운드 방화벽 규칙도, 전용 IP도 없습니다. 바로 그래서 NAT VPS(공유 IP, 포트 위 SSH)가 봇에게 괜찮고 싼 보금자리입니다. webhook은 아주 큰 용량을 위해 있지만, 시작하는 데는 거의 확실히 필요 없습니다.

솔직한 주의점

  • 토큰 위생: 여기서는 명료함을 위해 유닛 파일에 인라인 — 잠근 박스에서는 괜찮지만, 공유되는 무엇에든 대신 root 전용 EnvironmentFile에서 불러오고, 절대 git에 커밋하지 마세요. 샜다? BotFather에서 폐기하고 새것을 발급.
  • 무거운 봇: 봇이 스스로 일을 하면(이미지 생성, 로컬 모델) 더는 작지 않습니다 — 그에 맞춰 크기를 올리세요.

그게 전부입니다. 먼저 보안 체크리스트로 박스를 잠그고, 서비스를 넣으면, 당신이 있든 없든 봇은 온라인을 유지합니다. 암호화폐 결제 VPS에서는 결정한 1분 뒤에 돌릴 수 있습니다.

FAQ

Telegram 봇에 어떤 VPS가 필요한가요?

가장 작은 것. Telegram 봇은 대개 유휴 상태로 업데이트를 기다리므로 1 GB RAM과 2코어면 대부분의 봇에 충분합니다 — 꽤 바쁜 것도. 더 필요한 것은 봇이 스스로 무거운 일을 할 때뿐(이미지 처리, 로컬 모델, 큰 데이터베이스).

SSH를 닫은 뒤 Telegram 봇을 어떻게 계속 돌리나요?

systemd 서비스로 돌리세요. 터미널에서 실행하는 것과 달리, systemd는 로그아웃 후에도 살려 두고, 크래시하면 재시작하고, 재부팅 후 다시 띄웁니다. 그것이 장난감과 계속 떠 있는 것의 차이입니다.

연결을 끊으면 왜 봇이 멈추나요?

SSH 세션에서 시작했으니 그 세션이 끝나면 죽기 때문입니다. systemd 서비스(또는 빠른 테스트에는 tmux)로 감싸면 로그인과 무관하게 돌아갑니다.

Telegram 봇에 도메인이나 webhook이 필요한가요?

아니요. 롱폴링(getUpdates)은 공개 URL도, 도메인도, 인바운드 포트도 필요 없습니다 — 봇이 Telegram으로 손을 뻗습니다. 그래서 전용 IP 없는 NAT VPS가 봇에는 완벽히 괜찮습니다. webhook은 대용량을 위한 선택적 최적화입니다.

봇 토큰을 VPS에 두는 게 안전한가요?

네, 비밀번호처럼 다룬다면: 환경 변수나 봇 사용자만 읽을 수 있는 파일에 보관하고, 절대 git에 커밋하지 말고, SSH 키로 서버를 잠그세요. 토큰이 새면 BotFather에서 폐기하고 새것을 발급하세요.

댓글

아직 댓글이 없습니다. 첫 번째가 되세요.

댓글 남기기

댓글은 표시되기 전에 검토됩니다.