---
task_id: task-2118
type: context
scope: task
created: 2026-04-23
updated: 2026-04-23
status: completed
---

# 맥락 노트: task-2118

**task**: task-2118

---

## 결정 근거

### 3 Step Why

**1st Why**: "왜 DB에 직접 데이터를 INSERT하는가?"
→ A: 마이그레이션 SQL 파일(20260422000000_add_infokeyword_access.sql)은 존재하지만, Supabase 프로덕션 DB에 적용되지 않았음. supabase db push가 실행되지 않은 상태.

**2nd Why**: "왜 supabase db push 대신 REST API로 INSERT하는가?"
→ B: Supabase CLI 토큰이 로컬에 설정되어 있지 않고, supabase link도 안 된 상태. REST API + service_role_key를 사용하면 동일한 결과를 안전하게 달성 가능.

**3rd Why**: "왜 REST API가 supabase CLI보다 낫나?"
→ C: CLI는 마이그레이션 시스템(schema_migrations 테이블)에 기록을 남기므로 향후 충돌 가능성이 있음. REST API INSERT는 데이터만 추가하므로 마이그레이션 이력과 무관하게 안전. ON CONFLICT DO NOTHING이 있어 마이그레이션이 추후 실행되어도 충돌 없음.

### 핵심 발견: Supabase 프로젝트 ID 불일치
- config.toml: `dmyjpvxhlwmrqqqisbjj` (구 프로젝트)
- 실제 프로덕션: `zayhfjuwviporbzokudr` (신 프로젝트)
- .env 파일에서 확인됨

### Codex 사전 검증 결과
- FAIL (critical 3건, high 2건, medium 3건)
- critical 이슈 중 2건은 기존 아키텍처 이슈 (FeatureGate/require_feature 이중 구조)
- 이번 태스크 범위: DB 데이터 적용으로 관리자 토글 표시 → 해당 이슈와 무관

## 참조 자료

- 마이그레이션 SQL: `supabase/migrations/20260422000000_add_infokeyword_access.sql`
- AdminSubscriptions.tsx: `src/pages/AdminSubscriptions.tsx` (line 130-131: fetchData)
- FeatureGate: `src/components/FeatureGate.tsx` (planFeatureMap 기반)
- useFeatureGate: `src/hooks/use-feature-gate.ts` (subscription_plans.features 기반)
- 서버 require_feature: `server/main.py:400` (PLAN_FEATURE_MAP 기반)
- task-2113 보고서: `memory/reports/task-2113.md` (선행 작업)

## 주의사항

- FeatureGate(최소 플랜 기반)와 useFeatureGate(DB features 기반)가 이중 구조로 존재
- 관리자 토글 OFF해도 맥스 이상 사용자는 FeatureGate/require_feature로 접근 가능
- 이 이중 구조 통합은 별도 아키텍처 태스크로 분리 권장
