"서버 없이 4개의 Lambda로 구성한 알고리즘 학습 자동화 Slack bot"
매일 아침 백준 문제를 자동 추천하고,
/review한 번에 내 코드에 대한 AI 코드 리뷰가 스레드에 달립니다.
| 분류 | 기술 | 선택 이유 |
|---|---|---|
| 런타임 | 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 호환 |
| 축 | 설명 |
|---|---|
| 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 인프라를 코드로 재현 |

Slack은 슬래시 커맨드 응답이 3초 내로 없으면 "시간 초과" 에러를 사용자에게 표시합니다. AI 코드 리뷰는 최소 30초, 길면 2분이 소요됩니다.
사용자 /review → Slack → API Gateway → Lambda
↑ 여기서 AI 처리하면 → 3초 초과 → 에러
단순 해결책의 문제: Lambda 타임아웃을 늘려도 Slack이 먼저 에러를 표시합니다. Slack의 response_url 방식은 5분 제한이지만 payload 크기 제한이 있습니다.
