← Lecture Note
B
APPENDIX · 부록

환경 변수 체크리스트

.env.local 템플릿

모든 키를 .env.local 한 파일에 모읍니다. 절대 커밋하지 마세요(.gitignore.env*.local 확인). 배포 시에는 vercel env로 동일하게 올립니다.

.env.local 템플릿

# ── LLM ──
ANTHROPIC_API_KEY="sk-ant-..."          # Claude (강사 Agent 답변)
OPENAI_API_KEY="sk-proj-..."            # 임베딩(text-embedding-3-small)

# ── 음성 (ElevenLabs) ──
ELEVENLABS_API_KEY=sk_...
NEXT_PUBLIC_VOICE_HANS17=IXlopTLhDcKBLBlJjBG5   # 강사 보이스
NEXT_PUBLIC_VOICE_GHOST=L48DKpNJAULWpYwR0KCt    # 마왕 나래이션

# ── Supabase (대규모 RAG · pgvector) ──
NEXT_PUBLIC_SUPABASE_URL="https://<ref>.supabase.co"
NEXT_PUBLIC_SUPABASE_ANON_KEY="eyJ..."
SUPABASE_SERVICE_ROLE_KEY="eyJ..."      # 서버 전용(관리자 조회). 절대 클라이언트 노출 금지

# ── 메일 (선택) ──
RESEND_API_KEY=re_...

# ── 관리자 ──
ADMIN_TOKEN=...                          # 대화 로그/관리자 페이지 게이트

체크리스트

  • .env*.local.gitignore에 있는가 (커밋 방지)
  • NEXT_PUBLIC_* 는 클라이언트 노출용만 (비밀키엔 붙이지 말 것)
  • SUPABASE_SERVICE_ROLE_KEY 는 서버 라우트에서만 사용
  • 로컬 = .env.local, 배포 = vercel env add NAME production(+ preview/development)
  • 배포 후 vercel env pull 로 로컬과 동기 확인
  • 키 회전(rotate) 시 로컬·Vercel 양쪽 모두 교체

NEXT_PUBLIC 구분

종류위치
서버 전용(비밀)ANTHROPIC_API_KEY, SUPABASE_SERVICE_ROLE_KEYprocess.env.*, 라우트/서버
클라이언트 노출(공개 가능)NEXT_PUBLIC_VOICE_*, NEXT_PUBLIC_SUPABASE_URL브라우저 번들에 인라인됨

⚠️ 비밀키에 NEXT_PUBLIC_ 을 붙이면 브라우저로 새어 나갑니다. anon key·voice id 처럼 공개돼도 되는 것만.

핵심 정리

  • 키는 한 파일(.env.local) · 커밋 금지 · 배포처 env에 동일 등록.
  • 공개/비밀 구분이 보안의 90%. service_role·API 키는 서버 전용.