# InsuRo 프로덕션 API 에러 3건 긴급 수정

## 작업 레벨: Lv.2 (서버 버그 수정)

## 배경
전수조사(task-2172/2173)에서 프로덕션에서 발생하는 API 에러 3건 발견.
프론트엔드 UI는 정상 반영됐으나, 백엔드 API에서 에러 발생.

## 에러 1: 정보성키워드 분석 API 500 에러 (High)

- 엔드포인트: `POST /api/insuro/keywords/analyze`
- 증상: Hidden 유저로 "암보험 추천" 분석 시 500 에러 → "키워드 분석 작업 생성에 실패했습니다"
- task-2155에서 get_user_plan() 플랜 체크는 수정됨 (403 에러 해소)
- 하지만 500 에러가 별도로 발생 → **서버 로직 내부 에러**
- 스크린샷: `memory/reports/qa-screenshots/03-infokey-analysis-error.png`

### 디버깅 방법
```bash
cd /home/jay/projects/InsuRo/server
# 서버 로그 확인
tail -100 /tmp/insuro-server.log 2>/dev/null

# 직접 API 호출 (Hidden 유저 JWT 사용)
curl -X POST "http://localhost:8001/api/insuro/keywords/analyze" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <JWT>" \
  -d '{"keyword": "암보험 추천", "options": {}}'
```

### 가능한 원인
1. keywords/analyze 엔드포인트의 내부 로직 에러 (Haiku/Sonnet API 호출 실패?)
2. 환경변수 미설정 (ANTHROPIC_API_KEY 등)
3. Supabase 연결 문제
4. task-2155 수정 후 다른 부분 리그레션

## 에러 2: 금소법 동의 API 405 Method Not Allowed (High)

- 엔드포인트: `POST /api/insuro/compliance/consent`
- 증상: 면책 동의 체크박스 체크 시 405 → 동의 정보 서버 저장 실패
- task-2156에서 consent API를 추가했으나, **프로덕션 서버에 해당 라우트가 없는 것으로 추정**
- 405 = Method Not Allowed → 라우트는 있지만 POST 메서드가 허용 안 됨, 또는 라우트 자체가 없음

### 디버깅 방법
```bash
# 라우트 목록 확인
curl http://localhost:8001/openapi.json | python3 -c "
import sys,json
d = json.load(sys.stdin)
for path, methods in d.get('paths', {}).items():
    if 'compliance' in path:
        print(f'{list(methods.keys())} {path}')
"

# 직접 호출
curl -X POST "http://localhost:8001/api/insuro/compliance/consent" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <JWT>" \
  -d '{"consent_version": "v1.0", "content_hash": "test"}'
```

### 가능한 원인
1. task-2156 코드가 main에 머지됐지만 **서버가 재시작되지 않아** 구 코드 실행 중
2. 라우트 등록 순서 문제 (다른 미들웨어가 /compliance 경로 가로챔)
3. consent 엔드포인트 데코레이터에 POST 메서드 누락

## 에러 3: profiles API 400 에러 (Medium)

- 엔드포인트: Supabase REST API `/rest/v1/profiles`
- 증상: 거의 모든 페이지에서 반복 발생 (콘솔)
- 400 Bad Request → 쿼리 파라미터 또는 필터 조건 오류

### 디버깅 방법
```bash
# 브라우저 콘솔에서 정확한 요청 URL 확인
# Network 탭에서 profiles 요청의 전체 URL과 응답 body 확인
```

### 가능한 원인
1. 프론트엔드에서 profiles 테이블 조회 시 없는 컬럼 참조
2. RLS 정책 위반 (organization_id 관련)
3. 프로필 데이터 형식 불일치

## 수정 순서
1. **서버 재시작** (가장 먼저) — task-2155/2156 코드 반영 확인
2. 서버 로그 확인 + 3개 에러 각각 디버깅
3. 원인 특정 후 수정
4. 수정 후 3개 API 모두 정상 응답 확인

## 검증 시나리오
1. Hidden 유저로 정보성키워드 "암보험 추천" 분석 → 성공 (500 해소)
2. 금소법 면책 체크박스 체크 → consent API 성공 (405 해소)
3. 모든 페이지에서 profiles 400 에러 없음 (콘솔 확인)
4. 기존 기능 회귀 없음

## 참고
- task-2172 보고서: `/home/jay/workspace/memory/reports/task-2172.md`
- task-2173 보고서: `/home/jay/workspace/memory/reports/task-2173.md`
- InsuRo 서버: `/home/jay/projects/InsuRo/server/main.py`
- .env: `/home/jay/projects/InsuRo/.env`