최근 많은 개발자들이 Upstash를 OpenAI는 물론 Google Cloud AI, IBM Watson, Hugging Face 같은 다양한 AI API와 함께 통합하여 사용하는 모습을 확인하고 있습니다. 이 글에서는 가장 대표적인 활용 사례들을 살펴보고, 앞으로 더 많은 기능을 지원하기 위한 저희의 향후 계획까지 소개해 드립니다.
레이트 리미팅(Rate Limiting)
레이트 리미팅은 AI 기반 애플리케이션을 운영하는 데 있어 필수적인 요소로, 개발자와 사용자 양쪽을 보호하는 안전장치 역할을 합니다. AI 애플리케이션은 대량의 데이터를 처리하고 복잡한 연산을 수행하므로 상당한 컴퓨팅 자원을 필요로 합니다. 적절한 관리가 없다면 시스템 과부하, 성능 저하, 심한 경우 전체 시스템 장애로 이어져 사용자 경험이 크게 훼손될 수 있습니다. 또한 레이트 리미팅은 트래픽 폭탄으로 시스템을 마비시키려는 DDoS 공격과 같은 악의적인 공격에 대한 첫 번째 방어선 역할도 수행합니다. 따라서 AI 애플리케이션에 레이트 리미팅을 구현하면 시스템 안정성 유지, 비용 관리, 보안 강화라는 세 가지 효과를 동시에 얻을 수 있습니다.
Upstash는 손쉽게 사용할 수 있는 Rate Limit SDK를 제공합니다. 이 SDK를 활용하면 일정 시간 동안 애플리케이션에 허용되는 요청 횟수를 제어할 수 있으며, IP 주소나 사용자 ID 기준으로 요청을 제한하고, 고정 윈도우(Fixed Window), 슬라이딩 윈도우(Sliding Window), 토큰 버킷(Token Bucket) 등 다양한 알고리즘 중에서 선택할 수 있습니다.
비동기 처리(Asynchronous Processing)
비동기 처리는 AI 기반 애플리케이션의 효율성과 성능에 결정적인 영향을 미칩니다. 이러한 애플리케이션은 처리에 오랜 시간이 걸릴 수 있는 대용량 데이터와 복잡한 연산을 다루는 경우가 많습니다. 작업을 순차적으로 처리하는 동기 방식에서는 각 작업이 완료될 때까지 시스템이 대기해야 하므로 상당한 지연이 발생하고 사용자 경험도 나빠질 수 있습니다. 특히 서버리스 애플리케이션에서는 처리 시간이 길어지면 비용이 증가하고 타임아웃 문제까지 발생할 수 있어 더욱 곤란한 상황이 됩니다. 반면 비동기 처리 방식을 사용하면 여러 작업을 완료를 기다리지 않고 동시에 실행할 수 있습니다.
QStash는 서버리스 애플리케이션을 위해 설계된 메시지 큐 서비스로, API 호출을 비동기 방식으로 처리할 수 있도록 지원합니다. QStash가 API 호출을 대신 처리하고 그 결과를 지정된 콜백으로 반환해 줍니다.
캐싱(Caching)
캐싱 역시 AI 기반 애플리케이션의 성능과 효율성에서 중요한 역할을 합니다. AI는 모델 학습, 예측, 자연어 처리처럼 연산 집약적이며 시간과 자원이 많이 소모되는 작업을 포함하는 경우가 많습니다. 캐싱을 도입하면 이러한 연산 결과를 저장해 두었다가 동일한 요청이 들어올 때 재사용함으로써 불필요한 반복 연산을 피할 수 있습니다. 캐싱은 값비싼 API 호출 비용을 절감하는 데 매우 효과적인 전략입니다.
Upstash Redis는 OpenAI API 응답을 캐싱하기에 탁월한 솔루션입니다. 캐시된 API 응답에 만료 시간(TTL)을 설정하면, 적절한 캐시 응답이 없거나 오래된 경우에만 OpenAI 리소스를 소모하도록 애플리케이션을 설계할 수 있습니다.
시맨틱 캐싱(Semantic Caching)
AI 애플리케이션의 특수한 캐싱 활용 사례로 프롬프트 캐싱을 들 수 있습니다. 시맨틱 캐싱은 AI 기반 애플리케이션의 효율성과 성능을 높이는 데 매우 유용한 기법입니다.
시맨틱 캐싱은 기존 캐싱 방식과 달리 원시 데이터만 저장하는 것이 아니라 쿼리나 요청의 '의미'를 저장한다는 점에서 차별화됩니다. 덕분에 정확히 동일한 쿼리가 캐시에 없더라도 이전 질문과 의미가 유사한 쿼리에 대해 캐시를 활용해 답변할 수 있어 훨씬 효율적입니다.
예를 들어 사용자가 "cars(자동차)"라고 검색하면, 시맨틱 캐시는 "네 개의 바퀴와 내연기관을 갖춘 탈것"이라는 쿼리의 의미를 저장합니다. 이렇게 하면 "automobiles", "motor vehicles", "trucks" 같은 유사 쿼리가 캐시에 직접 저장되어 있지 않아도 캐시가 답변할 수 있습니다.
참고: Redis Search 모듈은 벡터 유사도 쿼리를 지원하지만, 현재 Upstash는 Redis Search와 호환되지 않습니다. 이를 해결하기 위해 Upstash 내부에서 유사도 검색과 시맨틱 쿼리를 지원하기 위한 프로젝트가 진행 중입니다.
사례 1: 아트 제너레이터(Art Generator)
DALL·E 2로 구동되는 Art Generator는 AI를 활용해 텍스트에서 이미지를 생성하며, 생성된 이미지를 캐싱하기 위해 Upstash Redis에 의존합니다. 또한 QStash를 사용해 API 호출을 관리하고 비동기적으로 처리함으로써 서버리스 함수 타임아웃 문제를 회피합니다.
사용자가 텍스트를 입력하면 애플리케이션은 QStash의 /api/image 엔드포인트를 통해 요청을 OpenAI API로 전달합니다. QStash는 응답을 수집해 URL 형태로 /api/callback으로 전달하고, 해당 이미지 URL은 Upstash Redis에 저장됩니다. 클라이언트가 OpenAI API 호출을 트리거한 후 Redis를 조회하면, 준비된 경우 이미지를 바로 가져올 수 있습니다.
API 호출 관리를 QStash에 위임하면 10초 제한이 있는 Vercel Hobby 플랜에 배포할 때 발생할 수 있는 서버리스 함수 타임아웃을 피할 수 있습니다.

사례 2: RestorePhotos
RestorePhotos는 AI를 활용해 낡은 인물 사진을 복원하는 혁신적인 애플리케이션입니다. 인기가 높아지면서 개발자는 Upstash Redis로 API 사용량에 레이트 리미팅을 적용했고, 그 결과 효율성과 비용 효과를 모두 개선할 수 있었습니다. 실제 레이트 리밋이 구현된 코드는 링크에서 확인하실 수 있습니다.


결론
Upstash 팀으로서, 개발자 여러분이 AI 기반 애플리케이션을 만들면서 겪는 다양한 과제를 Redis로 해결해 주시는 모습에 깊은 감명을 받고 있습니다. 개발자 여러분의 개발 여정을 더욱 편하게 만들어 드리기 위해 다음과 같은 계획을 준비하고 있습니다:
- AI API 소비를 간편하게 만들어 주는 SDK를 개발하고, 여기에 레이트 리미팅, 캐싱, 비동기 처리 기능을 통합합니다.
- Redis Search API 또는 더 나은 자체 API를 통해 시맨틱 캐싱과 유사도 쿼리를 지원할 예정입니다.