# task-2128: Supabase Edge Functions 5개 배포 + 구글 트렌드 안정화

## ★ 프로젝트: `/home/jay/projects/InsuRo/`

## 배경
task-2125 E2E 검증 결과, 5개 Supabase Edge Function이 미배포(404) 상태로 14개 기능 중 5개가 미동작.
배포만 하면 11개 → 14개 정상으로 복구.

## 작업 1: Edge Function 배포

### 배포 대상 5개
1. `suggest-topics` — AI 토픽 제안
2. `generate-content` — 콘텐츠 생성 (스트리밍)
3. `generate-image` — 이미지 생성
4. `newsletter-chat` — 마켓 뉴스레터 챗 (SSE)
5. `premium-chat` — 보험료 비교 챗 (SSE)

### 코드 경로
`/home/jay/projects/InsuRo/supabase/functions/` 하위 디렉토리에 이미 존재.

### 배포 명령
```bash
cd /home/jay/projects/InsuRo
npx supabase functions deploy suggest-topics --project-ref zayhfjuwviporbzokudr
npx supabase functions deploy generate-content --project-ref zayhfjuwviporbzokudr
npx supabase functions deploy generate-image --project-ref zayhfjuwviporbzokudr
npx supabase functions deploy newsletter-chat --project-ref zayhfjuwviporbzokudr
npx supabase functions deploy premium-chat --project-ref zayhfjuwviporbzokudr
```

### 주의사항
- project-ref는 반드시 `zayhfjuwviporbzokudr` 사용 (.env의 VITE_SUPABASE_PROJECT_ID와 일치)
- task-2125에서 config.toml에 다른 project ID(`dmyjpvxhlwmrqqqisbjj`)가 있을 수 있음 → `--project-ref`로 명시 지정
- Supabase access token: 환경변수 `SUPABASE_ACCESS_TOKEN` 필요. .env 또는 .env.keys에서 확인
- 없으면 `npx supabase login` 실행 필요

### 배포 전 확인
```bash
# config.toml의 project_id 확인
cat /home/jay/projects/InsuRo/supabase/config.toml | grep project_id

# 현재 404 확인
curl -s https://zayhfjuwviporbzokudr.supabase.co/functions/v1/suggest-topics -w "\nHTTP: %{http_code}\n"
```

## 작업 2: 구글 트렌드 에러 로깅 강화

### 현재 문제
`server/main.py:956-962`에서 `except Exception:`으로 예외를 삼키고 있어 에러 원인 파악 불가.
Google rate limit(429) 또는 TLS 차단 시 "구글 트렌드 데이터 조회에 실패했습니다"만 반환.

### 수정
```python
# 수정 전 (L956-962)
try:
    result = await asyncio.to_thread(_fetch_trends)
except Exception:
    raise HTTPException(status_code=503, detail="구글 트렌드 데이터 조회에 실패했습니다")

# 수정 후
try:
    result = await asyncio.to_thread(_fetch_trends)
except Exception as e:
    import traceback
    print(f"[google-trends] ERROR: {type(e).__name__}: {e}")
    traceback.print_exc()
    detail = "구글 트렌드 데이터 조회에 실패했습니다"
    if "429" in str(e) or "Too Many" in str(e):
        detail = "구글 트렌드 요청 한도 초과 — 잠시 후 다시 시도해주세요"
    raise HTTPException(status_code=503, detail=detail)
```

### 서비스 재시작
```bash
systemctl --user restart insuro-api
```

## ★ 먼저 읽을 파일
- `/home/jay/projects/InsuRo/supabase/config.toml` — project_id 확인
- `/home/jay/projects/InsuRo/supabase/functions/suggest-topics/index.ts` — L1~30
- `/home/jay/projects/InsuRo/server/main.py` — L956~962 (구글 트렌드 에러 핸들링)

## 검증 시나리오 (이게 되면 성공)

### 시나리오 1: Edge Function 배포 확인
```bash
curl -s https://zayhfjuwviporbzokudr.supabase.co/functions/v1/suggest-topics \
  -H "Authorization: Bearer <anon_key>" \
  -H "Content-Type: application/json" \
  -d '{}' -w "\nHTTP: %{http_code}\n"
```
→ 404가 아닌 응답 (401 인증 필요 또는 200 정상)

### 시나리오 2: 5개 함수 전부 배포 확인
각각 curl로 호출 → 404 아닌 응답

### 시나리오 3: 구글 트렌드 에러 상세
서버 로그(journalctl)에 에러 유형 + traceback 출력 확인

### 시나리오 4: insuro.biz에서 기능 동작
- 콘텐츠 생성 → 실제 결과 반환 (Edge Function 경유)
- 마켓 뉴스레터 → SSE 스트리밍 응답

## 완료 시그니처
- 5개 Edge Function 배포 완료 (curl 404 → 비-404 응답)
- 구글 트렌드 에러 로깅 강화 + 서버 재시작
- insuro.biz에서 최소 1개 기능 E2E 확인 (콘텐츠 생성 또는 뉴스레터 챗)

## 레벨
- critical

## 프로젝트
- insuro
