[AI] FastAPI 서버가 사용하는 임베딩 캐시와 GPU 요청 메시지 큐도 Backend 서버와 같은 Redis에 함께 올려도 될까? - 100-hours-a-week/5-yeosa-wiki GitHub Wiki

1. 문제 제기

[ "현재 VPC에는 백엔드 서버에서 사용하는 Redis 서버가 이미 존재하는데, FastAPI 서버가 사용하는 임베딩 캐시GPU 요청 메시지 큐도 같은 Redis에 함께 올려도 될까?” ]


2. 다중 인스턴스 환경에서의 인메모리 임베딩 캐시의 한계

  • FastAPI 서버가 단일 인스턴스일 때는, 임베딩 결과를 인스턴스의 로컬 메모리에 저장(LRU 캐시 등)하여 빠르게 재사용하는 것이 가장 효율적이다.

  • 하지만 서비스가 수평 확장되어 여러 인스턴스로 분산되면 문제가 발생한다:

    문제점 설명
    캐시가 인스턴스마다 분리됨 인스턴스 A에서 계산한 임베딩을 인스턴스 B에서는 사용할 수 없음
    중복 연산 발생 같은 이미지가 여러 인스턴스에 들어오면 중복 임베딩 계산이 발생
    후속 작업이 실패할 수 있음 임베딩 결과를 기반으로 하는 카테고리 분류, 중복 사진 판별 등에서 캐시 miss 발생 가능
  • 즉, 인메모리 캐시는 단일 인스턴스 환경에서는 최적이지만,

    다중 인스턴스 환경에서는 캐시 일관성이 깨지므로 한계가 있다.


3. 해결책: 임베딩 캐시를 중앙 Redis 서버에 저장

  • 서비스가 확장된 이후에는, 임베딩 캐시도 중앙 Redis 인스턴스에 저장하여 모든 인스턴스가 공통으로 조회할 수 있도록 설계하는 것이 필요하다.

  • 장점

    항목 설명
    중복 계산 제거 임베딩된 이미지를 재사용 가능 → GPU 부하 감소
    후속 작업 일관성 확보 어떤 인스턴스든 동일한 임베딩에 접근 가능
    메시지 큐와 함께 Redis에서 통합 관리 가능 Redis의 공간만 나누면 됨 (cache:, queue: 등)

4. Redis 하나를 백엔드와 FastAPI가 같이 써도 될까?

  • 기술적으로는 가능하지만, 다음과 같은 이유로 분리 운영을 권장한다

    이유 설명
    용도/패턴 차이 백엔드는 세션 캐시 (GET/SET), FastAPI는 메시지 큐 (LPUSH/BLPOP), embedding (pickle 저장 등)
    장애 전파 위험 큐 작업 폭주 시 전체 Redis 지연 → 백엔드에도 영향
    운영 설정 분리 eviction, maxmemory, RDB 설정 등을 용도에 맞게 최적화 가능
    모니터링 방식도 다름 백엔드는 latency 중심, AI Redis는 처리량/큐 길이 중심

5. 권장 구성

Redis 인스턴스 용도 사용 서비스
redis-backend 세션 캐시, 로그인 정보 등 백엔드 서버
redis-ai 이미지 임베딩 캐시, GPU 요청 메시지 큐 FastAPI 서버, Worker

6. 결론

  • 단일 인스턴스 환경에서는 인메모리 캐시로도 충분했지만,

    다중 인스턴스로 확장된 이후에는 임베딩 캐시 역시 중앙 Redis에 저장하는 구조로 전환해야 한다.

  • 또한 Redis는 용도에 따라 **AI용(캐시 + 큐)**과 **백엔드용(세션)**으로 나누어 운영하는 것이 안정성, 확장성 모두에서 유리하다.