TL;DR

  1. 인프라 정상 — 모든 컨테이너 healthy. Redis 메모리·슬로우로그 이상 없음.
  2. chat_v2 인덱싱 백필 Dead Letter Queue 에 3건 누적 — 1주 전(2026-05-15) 실패 메시지가 한 번도 drain 되지 않음. 운영 매물의 chat_v2 색인 파이프라인이 사실상 정지 상태.
  3. 워커 코드에 3중 결함이 남아 있어 백필을 재가동해도 다시 실패할 가능성.
  4. Qdrant properties_oai3l_3072_v1 의 329 points 중 8건 미인덱싱 — optimizer lag, 검색은 brute-force 폴백.

1. Container 상태

containerstatus
ai-real-estate-backend-108healthy 5m
ai-real-estate-worker-108healthy 5m
ai-real-estate-postgres-1healthy 2d
ai-real-estate-qdrant-1healthy 6d
ai-real-estate-redis-1 / cache / stackhealthy 6d

2. PostgreSQL properties

statuscount
published160
private6 (deleted 1)
live total165

인덱싱 상태 컬럼(embedded_at, vector_indexed) 없음 — DB 자체로 lag 측정 불가.

최근 매물 5건은 private (2026-05-21) — chat_v2 백필 대상 아님.

3. Qdrant properties_oai3l_3072_v1

points_count329
indexed_vectors_count321 8 미인덱싱
statusgreen
vector3072 / cosine
segments4
payload schemadeposit, rent, room_count, property_type, address(text)

미인덱싱 8건은 optimizer lag (indexing_threshold=500 미만이라 HNSW 미빌드). 검색은 brute-force 폴백 — 기능 영향 없으나 latency 영향.

329 vs PG live 165 차이(164건)는 archived/private/history 포함으로 추정 (payload id 샘플 3건 모두 PG 존재 확인 — orphan 아님).

4. Redis (main)

used_memory2.12M (peak 2.86M)
connected_clients50
blocked_clients0
maxmemory_policynoeviction
AOFoff
RDB5697 changes 미저장
슬로우 로그10건 모두 dramatiq EVALSHA fetch (10–17ms) — 정상
chat_v2_indexing.XQ.msgsHLEN = 3 (DLQ 적체)

5. chat_v2 인덱싱 워커 결함 CRITICAL

5.1 DLQ 메시지 (1주 전 실패, 미재처리)

#retry에러위치
12 AttributeError: SqlAlchemyPropertyRepository.find_all_by_status chat_v2_indexing.py:54
22 RuntimeError: Future attached to a different loop chat_v2_indexing.py:68
31·2 psycopg.OperationalError: 127.0.0.1:30432 refused pg_llm_cache.py:46

5.2 근본 결함 3종

결함원인현재 상태
A. find_all_by_status 메서드 부재 repo 인터페이스 미정의, except 폴백 의존 존재 코드 미수정
B. asyncpg engine 모듈 싱글톤 + 매 actor 호출 asyncio.run() engine 이 첫 호출 loop 에 바인딩됨 — 두 번째부터 깨짐 존재
C. pg_llm_cache DSN 127.0.0.1:30432 1주 전 잘못된 DSN, composition.py:97에서 settings.database_url 사용으로 이미 수정 수정됨, DLQ 메시지만 미처리

6. 권장 조치

우선작업
P1DLQ 메시지 3건 수동 drain — HDEL dramatiq:chat_v2_indexing.XQ.msgs <id>
P1SqlAlchemyPropertyRepository.find_all_by_status 추가 또는 폴백 경로 검증
P2_get_session_factory 를 actor 호출마다 재생성 — Dramatiq actor 표준 패턴
P2PG properties ↔ Qdrant ID set-diff — 누락 매물 식별 후 reindex_chat_v2_property 개별 재색인
P3Qdrant indexing_threshold 100 으로 낮추거나 snapshot flush
P3properties 테이블에 indexed_at timestamptz 추가 — DB 자체로 lag 추적