---
task_id: task-2270
type: context
scope: task
created: 2026-04-28
updated: 2026-04-28
status: in-progress
---

# 맥락 노트: task-2270

**task**: task-2270

---

## 결정 근거

### 3 Step Why 자문

1st Why: "왜 이 설계가 필요한가?"
→ Edge Function의 Gemini API가 GOOGLE_AI_API_KEY 미설정으로 4건 모두 작동 불가. AI 기능 복구 필요.

2nd Why: "왜 아누 서버(Claude CLI) 전환이 최선인가?"
→ anu_provider.py가 이미 존재, generate() 함수가 검증됨. 동일 패턴으로 4건 추가만 하면 됨.

3rd Why: "왜 Gemini 키 재설정보다 나은가?"
→ 아누 서버 통합으로 단일 AI 경로 관리 (비용 추적/모니터링/모델 교체 용이). Edge Function 의존성 제거로 배포 단순화.

### 설계 핵심 결정

1. **데이터 조회 전략**: Edge Function은 Supabase DB를 직접 조회했으나, 서버 엔드포인트에서는 프론트가 이미 가진 데이터를 전달하는 방식 vs 서버에서 Supabase client로 조회하는 방식
   - 결정: analyze-performance → 서버에서 Supabase 조회 (프론트에 데이터 없음, 사용자 전체 콘텐츠 필요)
   - 결정: analyze-customer → 서버에서 Supabase 조회 (고객 정보+메모+대화 필요)
   - 결정: evaluate-consultation → 프론트에서 transcript 전달 (이미 프론트에 텍스트 있음)
   - 결정: transcribe-call → 프론트에서 transcript + customer_id 전달 (FormData→JSON 변환)

2. **transcribe-call 음성 처리**: Claude CLI는 음성 STT 불가. 기존 Edge Function도 실제 STT를 하지 않고 텍스트만 AI 분석.
   - 결정: 음성 파일은 기존대로 Supabase Storage에 업로드. 서버에서는 텍스트 분석만 수행.
   - 프론트에서 FormData 대신 JSON body로 변경.

## 참조 자료

- anu_provider.py: `/home/jay/projects/InsuRo/server/anu_provider.py`
- 기존 패턴: `main.py:1436` (anu_provider.generate 사용 예시)
- Edge Functions: `/home/jay/projects/InsuRo/supabase/functions/`
- 프론트 API config: `/home/jay/projects/InsuRo/src/config/api.ts`

## 주의사항

- main.py가 5000줄+ 대형 파일 → Edit 시 offset/limit으로 삽입 위치 확인 필수
- transcribe-call은 호출처 3곳 (KakaoAnalysis, CallLogTab, AudioRecorder) → FormData에서 JSON 전환 시 음성 업로드 로직 분리 주의
- analyze-customer는 DB 저장 로직 포함 (customers.ai_summary 업데이트, customer_ai_summaries 삽입, agent_todos 삽입)
- transcribe-call도 DB 저장 (customer_call_logs 삽입, agent_todos 삽입, customers.ai_summary 업데이트)
