Long Polling vs Webhook
챗봇이 텔레그램 서버로부터 메세지를 읽어오기 위한 방법으로는 롱 폴링, 웹훅 방식이 있다.
롱 폴링 방식은 챗봇 서버가 텔레그램 서버로부터 메세지를 가져오는 방식이고,
웹훅 방식은 텔레그램 서버가 챗봇 서버로 메세지를 보내주는 방식이다.
Long Polling
새로운 메세지가 있는지 텔레그램 서버를 지속적으로 호출하여 확인하는 방식을 Polling 이라 한다.
하지만, 실시간에 가깝게 새 메세지를 확인하기 위해 매우 짧은 주기로 텔레그램 서버를 계속 호출하는건 비효율적이다.
Long Polling 방식은, 메세지가 있는지 확인하는 request 를 보낸 뒤, response를 받을 때까지 기다리는 방식이다. 새 메세지가 없다면 request를 보낸 커넥션이 열린 채로 지속될 것이다. (다만, 실제 커넥션은 몇 시간동안 지속되지는 않고, 보통 30초 정도 주기로 재호출한다.)
일반적인 HTTP 통신에서는 클라이언트가 요청을 보내면 서버는 가능한 빨리 응답을 반환합니다. 하지만 Long polling에서는 서버가 새로운 데이터가 생길 때까지 요청을 보류하고, 새로운 데이터가 준비되면 그제서야 응답을 보냅니다. 이 방식은 서버에 새로운 정보가 없는 경우에도 클라이언트가 주기적으로 요청을 보내는 것을 줄여줍니다.
이 방식은 서버에서 실시간으로 데이터를 전송해야 하는 애플리케이션에 적합할 수 있으나, 서버 자원과 클라이언트의 대기 시간을 고려해야 합니다.
Webhook
웹훅 방식은, 새로운 메세지가 있을 경우 텔레그램 서버가 챗봇서버에 메세지가 왔다고 알려주는 방식이다. 단 알림을 받는 서버는 퍼블릭이어야 한다.
장단점 비교
- Long polling 방식은 심플하다. 도메인이나 퍼블릭 URL이 필요없고 SSL 인증서도 필요없다. 수신할 메세지의 양을 조절할 수 있다. 유지보수하기 쉽다.
- Webhook 방식은 저렴하다. 텔레그램 서버에 확인하는 네트워크 요청 비용을 아낄 수 있다. 하지만 잠재적인 문제가 더 많다.
reference
https://grammy.dev/guide/deployment-types