본문으로 건너뛰기

솔루션 · 봇

Telegram 봇 운영을 위한 VPS

봇은 유휴 상태에서 100메가바이트도 쓰지 않고 대부분의 시간을 대기하며 보내므로, 서버 사양이 제약이 되는 경우는 거의 없습니다. 월 $6.90의 U1-1이면 봇 하나를 제대로 운영할 수 있습니다. 실제로 요금을 결정하는 것은 미디어, 그리고 자체 Bot API 서버를 운영하는지 여부입니다. 둘 다 계산으로 알 수 있으며, 아래에 정리했습니다.

결정에 앞선 결정

웹훅 또는 롱 폴링

봇에 도메인, 인증서, 열린 포트가 필요한지는 플랜이 아니라 이것이 결정합니다.

롱 폴링

봇이 Telegram으로 연결해 업데이트를 기다립니다. 도메인, TLS 인증서, 인터넷에 열린 포트가 필요 없으며 NAT 뒤에서도 작동합니다. 가장 빠르게 시작할 수 있는 방법이며, 대부분의 봇에게는 영구적인 방식으로도 충분합니다.

웹훅

Telegram이 사용자 측으로 연결합니다. 공개 주소, 유효한 인증서, 열린 포트가 필요하며(이 페이지의 모든 플랜에서 가능합니다), 대신 폴링 루프가 없고 실제 부하에서 확장성이 더 좋습니다. 부하나 지연 시간이 요구할 때 전환하고, 그전에는 서두르지 마십시오.

계산해 보기

플랜별 실제 수용 가능한 봇 수

봇 수 = (RAM − 운영 체제 300 MB) ÷ 봇 하나가 차지하는 메모리. 두 열은 상태 없는 명령 봇과, ORM·스케줄러·캐시를 갖춘 봇입니다.

플랜별 봇 프로세스 수용량과 월 전송량 허용치, 실시간 가격
플랜RAM가벼운 봇무거운 봇전송량가격배포
U1-1봇 하나, 사용자 규모 무관1 GB124Unmetered$6.90배포
C1-1-25봇 하나, 계량제지만 저렴1 GB1241 TB$9.90배포
GL2-4여러 봇, 또는 데이터베이스를 쓰는 봇4 GB6325Unmetered$11.90배포
BD-8자체 호스팅 Bot API 서버8 GB1315232 TB$12.90배포

봇의 사용자 수는 이 계산에 들어가지 않습니다. 문제 자체에 해당하지 않기 때문입니다: Telegram은 사용자마다 연결을 여는 대신 업데이트를 하나씩 프로세스에 전달합니다. 결과를 바꾸는 것은 직접 보관하는 상태, 즉 대용량 캐시, 프로세스 내 데이터베이스, 모델 등입니다.

요금을 결정하는 숫자

메모리가 아니라 미디어

평균 파일 크기 × 하루 메시지 수 × 30. 양방향 모두 집계됩니다. 받은 파일도 트래픽입니다.

하루 100건, 5,000건, 50,000건 메시지 기준 메시지 유형별 월 전송량
봇이 주고받는 데이터하루 100건하루 5,000건하루 50,000건
텍스트만명령 하나와 응답 하나. 사실상 부담이 없습니다.< 1 GB< 1 GB3 GB
사진압축된 이미지를 보내고 받는 경우.< 1 GB44 GB439 GB
음성 메시지 및 짧은 동영상커뮤니티 봇의 일반적인 부하.9 GB439 GB4.3 TB
문서 및 긴 동영상일반 봇에 대한 Telegram 자체의 다운로드 한도.59 GB2.9 TB28.6 TB

서버 선택을 바꾸는 단 하나의 요소

공개 Bot API를 사용하는 봇은 최대 20 MB까지 파일을 다운로드하고 최대 50 MB까지 업로드할 수 있으며(저희가 아니라 Telegram의 한도입니다), 파일이 서버 디스크에 저장되지 않습니다. 자체 Bot API 서버를 운영하면 한도가 2 GB로 늘어나고 모든 파일이 서버에 저장됩니다. 이때부터 디스크와 전송량이 더 이상 부수적인 요소가 아닙니다. BD-8은 $12.90에 SSD 100 GB와 32 TB를 제공하므로 이 용도에 맞습니다. 이런 방식으로 운영하지 않는다면 이 플랜에 비용을 지불할 필요가 없습니다.

솔직하게

실제로 저희가 구매할 플랜

저희도 Telegram 봇을 직접 운영합니다. 저희라면 이 서버에 올리겠습니다.

봇 하나용

U1-1 · $6.90/월

1코어, 1 GB, SSD 15 GB, 트래픽 계량 없음. 따라서 봇이 예상치 않게 미디어를 주고받기 시작해도 예상치 못한 요금이 나오지 않습니다. Restart=always로 봇을 systemd에서 실행하면, 봇이 다운될 수 있는 남은 원인은 직접 작성한 코드뿐입니다. 사양이 부족해지면 디렉터리와 토큰을 복사하는 것만으로 봇을 옮길 수 있습니다.

질문

구매 전에 자주 묻는 질문.

Telegram 봇에는 RAM이 얼마나 필요한가요?
흔히 판매되는 것보다 훨씬 적습니다. 봇은 오래 실행되는 프로세스로 거의 모든 시간을 대기하며 보냅니다. 상태 없는 명령 봇은 약 60 MB, ORM·스케줄러·캐시를 갖춘 봇은 150 MB 안팎입니다. 운영 체제가 300 MB 정도를 사용한 뒤에도 1 GB 서버에는 무거운 봇 4개 또는 가벼운 봇 12개를 실행할 여유가 있습니다. 사용자 수는 거의 영향을 주지 않습니다. Telegram은 사용자마다 연결을 여는 것이 아니라 업데이트를 하나씩 프로세스에 전달하기 때문입니다. 결과를 바꾸는 것은 직접 메모리에 보관하는 상태, 즉 대용량 캐시, 프로세스 내 데이터베이스, 모델 등입니다.
웹훅과 롱 폴링 중 무엇을 써야 하나요?
처음에는 롱 폴링으로, 필요해지면 웹훅으로 전환하십시오. 롱 폴링에서는 봇이 Telegram으로 연결을 열고 대기합니다. 도메인, 인증서, 열린 포트가 필요 없으므로 NAT 뒤에서도 작동하며, 가장 빠르게 시작할 수 있는 방법입니다. 웹훅은 Telegram이 사용자 측으로 연결하므로 공개 주소, 유효한 TLS 인증서, 인터넷에 열린 포트가 필요합니다. 대신 폴링 루프가 완전히 사라지고 봇이 실제로 바쁠 때 확장성이 더 좋습니다. 두 방식 모두 이 페이지의 가장 작은 서버에서 문제없이 실행됩니다. 전환할 정당한 이유는 유행이 아니라 부하나 지연 시간입니다.
파일 크기 한도는 얼마인가요?
저희가 아니라 Telegram의 한도입니다: 공개 Bot API를 사용하는 봇은 최대 20 MB까지 파일을 다운로드하고 최대 50 MB까지 업로드할 수 있습니다. 자체 Bot API 서버를 운영하면 한도가 2 GB로 늘어나며, 더 중요한 점은 파일이 Telegram을 거쳐 가는 대신 서버 디스크에 저장된다는 것입니다. 이것이 필요한 서버를 실제로 바꾸는 유일한 변화입니다. 갑자기 디스크와 전송량이 중요해지므로, 위 표에서 다른 행이 아닌 이 행에 BD-8을 배치했습니다.
대역폭이 부족해질까요?
텍스트 봇이라면 절대 그럴 일이 없습니다. 미디어 봇이라면 그럴 수도 있으며, 30초만 계산해 볼 가치가 있습니다: 평균 파일 크기 × 하루 메시지 수 × 30. 3 MB짜리 음성 메시지를 하루 5만 개 처리하면 월 약 4.3 TB로, 대부분의 저가 플랜 허용량을 넘지만 BD-8의 32 TB에는 한참 못 미칩니다. 트래픽 미계량 라인이라면 이런 고민 자체가 필요 없습니다. 양방향 모두 집계됩니다. 봇이 받는 파일과 보내는 파일 모두 트래픽입니다.
터미널을 닫은 후에도 봇을 계속 실행하려면 어떻게 하나요?
screen 세션이 아니라 systemd 유닛을 사용하십시오. Restart=always를 넣은 간단한 서비스 파일을 작성하고 활성화하면, 봇이 충돌하거나 서버가 재부팅된 후에도 직접 대응하지 않아도 자동으로 다시 시작됩니다. 이는 VPS에서 봇이 "다운"되는 가장 흔한 원인이며 호스팅 문제가 아닙니다. 직접 실행한 프로세스는 그것을 실행한 SSH 세션이 끝나면 함께 종료됩니다. 컨테이너로 패키징하는 편을 선호한다면 재시작 정책을 설정한 Docker도 같은 역할을 합니다.
한 서버에서 여러 봇을 실행할 수 있나요?
예, 그리고 대부분은 그렇게 하는 것이 좋습니다. 각 봇은 자체 systemd 유닛과 자체 토큰을 가진 별도 프로세스이며, 서버와 (원한다면) 데이터베이스만 공유하고 그 외에는 아무것도 공유하지 않습니다. 표의 계산이 바로 이 질문에 대한 답입니다. 4 GB 서버는 메모리가 제약이 되기 전까지 무거운 봇 25개를 실행할 수 있습니다. 서로 다른 사람을 위한 봇이라면 포트와 사용자를 분리하십시오.
봇은 어느 리전에서 실행해야 하나요?
사용자가 접근할 수 있고 Telegram까지의 지연 시간이 적당한 곳이라면 어디든 괜찮습니다. 봇은 사용자와 직접 통신하지 않고 Telegram 인프라와 통신하므로, 일반적인 "사용자와 가까운 곳" 원칙이 웹사이트보다 덜 중요합니다. 봇이 같은 사용자에게 웹 대시보드나 API도 제공한다면 그것을 기준으로 리전을 정하십시오. 확신이 없다면 두 개 리전에 시간 단위로 배포해 측정한 뒤, 결과가 나쁜 쪽을 삭제하십시오. 시간당 $0.0113이므로 저렴한 실험입니다.