QStash는 서버리스 환경을 위해 설계된 작업 스케줄러 및 메시지 대기열 시스템입니다. 상태 관리에 대해 걱정할 필요 없이 특정 간격으로 한 번 또는 반복적으로 실행되는 자동화된 워크플로를 설정할 수 있으므로 개발자에게 유용한 도구입니다.
QStash 콘솔을 사용하여 요청 작성 방법을 알아볼 수 있습니다:

사용 사례
내 제품 GPT Hotline은 기본적으로 WhatsApp의 ChatGPT입니다(동일한 기본 모델을 사용합니다). ChatGPT 앱에서와 마찬가지로 전용 번호로 봇에게 문자 메시지를 보낼 수 있습니다.
GPT 핫라인은 문자 메시지 외에도 이미지 검색, 동영상 검색, 뉴스 등 추가 기능을 제공합니다. 또한 사용자가 봇에게 문자를 보내 지정된 시간에 메시지를 받을 수 있도록 하는 미리 알림 기능을 추가하고 싶었습니다.
특정 시간에 메시지를 보내도록 봇에게 문자 메시지를 보낼 수 있는 간단한 흐름입니다. 다음과 같이 보일 것입니다:

이전에 서버리스 Redis용 Upstash를 사용해 본 적이 있어서 QStash에 대해 막연하게 알고 있었는데 이번 기회가 더 많은 것을 배울 수 있는 절호의 기회인 것 같았습니다!
자세히 살펴보기
우리가 코딩하려는 높은 수준의 작업 흐름은 다음과 같습니다.
사용자가 알림 메시지 보내기 -> QStash 작업이 설정됨 -> QStash가 지정된 시간에 API를 트리거함 -> 사용자에게 메시지 전송됨
일을 단순하게 유지하기 위해 QStash 코드에만 집중하겠습니다. GPT 핫라인에는 봇의 기본 응답을 재정의하는 '전원 명령'이 있으며 알림을 설정하는 명령은 다음과 같은 형식입니다.
sudo reminder <TIME-INTERVAL> <MY-MESSAGE> 예를 들어 다음과 같이 문자 메시지를 보내는 경우:
sudo reminder 3h go for a walk "sudo 알림" 명령은 알림 코드를 실행하며, "3h"는 알림("산책하러 가세요")이 3시간 후에 전송되기를 원함을 나타냅니다.
GPT Hotline은 Next.js를 사용하여 구축되었으므로 몇 가지 방법으로 QStash를 실행할 수 있습니다. 인증에 사용할 수 있는 verifySignature 기능이 있지만 우리는 일을 단순하게 유지하기 위해 REST API 접근 방식을 사용할 것입니다.
// Note: There are CURL Command examples available in the QStash docs.
const YOUR_API_URL = "https://api.example.com";
const MY_MESSAGE = "go for a walk";
const REMINDER_TIME = "3h";
const MESSENGER = "1800-MCDONALDS";
await fetch(`https://qstash.upstash.io/v1/publish/${YOUR_API_URL}`, {
headers: {
Authorization: `Bearer ${process.env.QSTASH_TOKEN}`,
"Upstash-Delay": REMINDER_TIME,
"Content-Type": "application/json",
},
method: "POST",
body: JSON.stringify({
message: MY_MESSAGE,
messenger: MESSENGER,
}),
}); 이것은 QStash로 보낼 수 있는 가져오기 요청의 예입니다. 값을 하드코딩하고 추가 필드를 제거했지만 이는 앱의 실제 가져오기 요청을 잘 표현한 것입니다.
QStash에는 메시지를 보내려면 URL이 필요합니다. 이는 지정된 시간에 트리거하려는 API URL입니다.
Upstash-Delay 값은 메시지를 보내는 시간을 결정합니다. Upstash-Delay는 초(s), 분(m), 시간(h), 일(d) 단위의 값을 가질 수 있습니다. 예를 들어 30m은 30분, 2d는 2일 등입니다. 한 번이 아닌 주기적으로 실행되는 작업을 설정하려면 cron 로직*과 함께 Upstash-Cron 필드를 사용합니다.*
또한 수신자 번호(메신저)와 함께 본문에 메시지를 보내고 환경 변수로 설정된 QSTASH_TOKEN을 사용하여 인증합니다.
그리고 그게 다야! 모든 것이 예상대로 작동하면 알림이 설정되었다는 확인 메시지를 받게 되며 QStash는 설정된 시간에 메시지 및 메신저 값으로 API를 트리거합니다(이는 수신자에게 알림을 보냅니다).
결론
이 기능은 구현하기가 좀 복잡할 것 같아서 미루고 있었는데, QStash의 도움으로 단 하루만에 끝낼 수 있었습니다!
확인해 보시기를 적극 권장합니다. 하루에 500개의 메시지를 무료로 사용할 수 있고 애플리케이션이 확장된 후에만 비용을 지불하므로 시도해 보지 않을 이유가 없습니다.
건배, 빌랄
sudo reminder 1m Good Luck!
