인메모리 DB
Atomic한 자료구조들 제공
키-값 쌍으로 저장
Redis는 워낙 빠르고 단순해서 보통 튼튼하지만, “네트워크 장애 / 커넥션 고갈 / Redis 재시작 / 클러스터 failover” 같은 순간적인 다운타임이 생기면 API 서버는 바로 장애를 맞음
그럴 때 서킷 브레이커를 걸어두면
Redis가 일정 시간 동안 다운되면 → 계속 때리기 대신 즉시 실패 처리
Redis가 회복되면 → 자동으로 다시 시도
Redis 장애가 있다고 API 서버/서비스 전체가 무너지지 않도록 보호
즉, Redis 장애가 시스템 전체 장애로 확산되는 걸 막는 패턴
1. 연결 관리
- Connection Pool 사용: redis.ConnectionPool로 연결 재사용
- Singleton 패턴: 애플리케이션 전체에서 하나의 Redis 인스턴스 공유
- 의존성 주입: FastAPI의 Depends로 Redis 클라이언트 주입
2. 구조화
app/
├── core/
│ └── redis.py # Redis 설정 및 클라이언트
└── infra/
└── redis_service.py # Redis 비즈니스 로직
3. 환경설정
- 환경별 Redis 설정 분리 (dev/prod)
- 연결 타임아웃, 재시도 정책 설정
- SSL/TLS 설정 (프로덕션)
4. 에러 처리
- redis.ConnectionError 핸들링
- 서킷 브레이커 패턴 적용
- Graceful degradation (Redis 장애시 서비스 계속)
5. 데이터 직렬화
- JSON 직렬화/역직렬화 일관성
- Pydantic 모델과 통합
- 키 네이밍 컨벤션 (app:model:id)
6. 성능 최적화
- Pipeline 사용으로 네트워크 호출 최소화
스트림으로 백엔드 API 서버 → worker로 던지고
worker는 처리 후 xack으로 완료 표시
그 과정에서 worker는 KNative로 서버리스 함수 실행 요청을 보내고, 결과를 받아 Job Entity 업데이트 + callback 발행