"서버 없이 4개의 Lambda로 구성한 알고리즘 학습 자동화 Slack bot"

매일 아침 백준 문제를 자동 추천하고, /review 한 번에 내 코드에 대한 AI 코드 리뷰가 스레드에 달립니다.

GitHub · Blog


Tech Stack

분류 기술 선택 이유
런타임 Node.js 20 + TypeScript (ARM64) Lambda 공식 지원, Graviton2로 x86 대비 ~20% 비용 절감
IaC AWS SAM Lambda에 최적화. CloudFormation 확장으로 로컬 invoke 지원
데이터베이스 DynamoDB 서버리스에 최적. 관리 불필요, 단일 테이블로 비용 최소화
스케줄러 EventBridge Scheduler AWS 네이티브 크론. 타임존(Asia/Seoul) 직접 설정 가능
빌드 esbuild (via SAM) TypeScript 번들링·트리 쉐이킹·Minify 일괄 처리
AI OpenAI · Claude · Gemini Factory 패턴으로 런타임 전환. 새 제공자 어댑터 1개로 확장
시크릿 SSM Parameter Store API 키를 코드·환경변수에 노출하지 않음. SecureString 암호화
안전망 SQS DLQ WorkerFunction 실패 메시지 보관. MaximumRetryAttempts: 0
테스트 Vitest 빠른 TypeScript 네이티브 테스트, ESM 호환

Core Identity

설명
Serverless-First EC2 없이 Lambda로만 구성. 요청 없으면 비용 $0, 자동 스케일링
Event-Driven EventBridge 크론 + Slack slash command + Lambda 비동기 호출로 완전한 이벤트 기반 설계
AI-Agnostic Factory 패턴으로 GPT · Claude · Gemini 런타임 전환. 새 AI 제공자 추가 시 어댑터 1개만 구현
Safe by Design HMAC-SHA256 서명 검증, 멱등성 체크, DLQ 안전망으로 중복·위조 요청 차단
IaC Complete template.yaml 하나로 전체 AWS 인프라를 코드로 재현

Architecture

image.png


Problem → Solution

Problem 1: Slack 3초 제한 vs AI 응답 30~120초

Slack은 슬래시 커맨드 응답이 3초 내로 없으면 "시간 초과" 에러를 사용자에게 표시합니다. AI 코드 리뷰는 최소 30초, 길면 2분이 소요됩니다.

사용자 /review → Slack → API Gateway → Lambda
                                        ↑ 여기서 AI 처리하면 → 3초 초과 → 에러

단순 해결책의 문제: Lambda 타임아웃을 늘려도 Slack이 먼저 에러를 표시합니다. Slack의 response_url 방식은 5분 제한이지만 payload 크기 제한이 있습니다.

Solution 1: 비동기 Lambda 호출 패턴

image.png