인메모리 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 발행