환경변수 가이드
.env.example 파일을 복사하여 설정합니다.
cp .env.example .env.local # 로컬 개발
cp .env.example .env.production # 프로덕션
1. Firebase 클라이언트 SDK
브라우저에 노출되는 공개 키입니다. Firebase 콘솔 > 프로젝트 설정 > 앱에서 확인.
| 변수 | 용도 | 발급처 |
|---|---|---|
NEXT_PUBLIC_FIREBASE_PROJECT_ID | 프로젝트 ID | Firebase 콘솔 |
NEXT_PUBLIC_FIREBASE_API_KEY | Web API 키 | Firebase 콘솔 |
NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN | Auth 도메인 | Firebase 콘솔 |
NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET | Storage 버킷 | Firebase 콘솔 |
NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID | Messaging Sender ID | Firebase 콘솔 |
NEXT_PUBLIC_FIREBASE_APP_ID | 앱 ID | Firebase 콘솔 |
2. Firebase Admin SDK (서버 전용)
절대 브라우저에 노출 금지. Firebase 콘솔 > 서비스 계정 > 새 비공개 키 생성.
| 변수 | 용도 | 발급처 |
|---|---|---|
FB_ADMIN_PROJECT_ID | 프로젝트 ID | 서비스 계정 JSON |
FB_ADMIN_CLIENT_EMAIL | 서비스 계정 이메일 | 서비스 계정 JSON |
FB_ADMIN_PRIVATE_KEY | 비공개 키 | 서비스 계정 JSON |
3. AI 모델 설정
너홀로프로의 AI는 두 가지 경로로 동작합니다:
3.1 클라이언트 AI — Firebase AI Logic (주 기능)
AI 서류 생성, 전략 분석 등 주요 AI 기능은 클라이언트에서 Firebase AI Logic (firebase/ai)을 통해 호출합니다. 별도 환경변수 불필요 — Firebase 프로젝트 설정에 포함됩니다.
| 기능 | 모델 | 호출 위치 |
|---|---|---|
| AI 서류 생성 | Gemini (Firebase AI Logic) | 클라이언트 (firebase/ai) |
| AI 전략 분석 | Gemini (Firebase AI Logic) | 클라이언트 (firebase/ai) |
| AI 대시보드 브리핑 | Gemini (Firebase AI Logic) | 클라이언트 (firebase/ai) |
모델 교체 전략
현재 Firebase AI Logic을 통해 Gemini를 사용합니다. 향후 국산형 소버린 AI가 출시되면 LLM을 교체할 계획입니다.
3.2 서버 AI — LLM 공급자 (보조 기능)
서버 측 보조 AI 기능(lib/llm/)은 환경변수로 공급자를 교체할 수 있습니다.
| 변수 | 용도 | 기본값 |
|---|---|---|
LLM_PROVIDER | 공급자 선택 | anthropic |
LLM_MODEL | 모델명 | claude-sonnet-4-6 |
LLM_API_KEY | API 키 | - |
LLM_BASE_URL | API URL (openai-compatible 전용) | - |
ANTHROPIC_API_KEY | Anthropic 전용 (하위호환) | - |
교체 가능한 공급자 목록:
| 공급자 | LLM_PROVIDER | LLM_MODEL | LLM_BASE_URL |
|---|---|---|---|
| Anthropic Claude | anthropic | claude-sonnet-4-6 | (자동) |
| Google Gemini | openai-compatible | gemini-2.5-flash | https://generativelanguage.googleapis.com/v1beta/openai |
| NAVER HyperCLOVA X | openai-compatible | HCX-003 | https://clovastudio.stream.naver.com/v1 |
| LG EXAONE | openai-compatible | EXAONE-3.5-7.8B-Instruct | https://api.exaone.ai/v1 |
| Ollama (로컬) | openai-compatible | llama3.2 | http://localhost:11434/v1 |
| OpenAI | openai-compatible | gpt-4o | https://api.openai.com/v1 |
4. 의뢰인 포털 인증
iron-session 세션 관리 + 카카오/네이버 OAuth 본인확인에 사용됩니다. 상세 설정 절차: OAuth 설정 가이드
| 변수 | 용도 | 발급처 |
|---|---|---|
PORTAL_SESSION_SECRET | iron-session 쿠키 암호화 키 (32자 이상) | openssl rand -base64 32 |
KAKAO_CLIENT_ID | 카카오 REST API 키 | developers.kakao.com |
KAKAO_CLIENT_SECRET | 카카오 Client Secret | 카카오 앱 > 보안 |
NAVER_CLIENT_ID | 네이버 Client ID | developers.naver.com |
NAVER_CLIENT_SECRET | 네이버 Client Secret | 네이버 앱 등록 시 발급 |
PORTAL_SESSION_SECRET미설정 시 기본 더미값 사용 (개발 전용, 프로덕션 필수 설정)- 카카오/네이버 미설정 시 OAuth 버튼은 표시되지만 인증 실패 → OTP 폴백 사용
5. 이메일 발송 (Resend)
포털 OTP 인증, 직원 초대, 기일 알림 이메일에 사용됩니다.
| 변수 | 용도 | 발급처 |
|---|---|---|
RESEND_API_KEY | API 키 (re_로 시작) | resend.com |
RESEND_FROM_EMAIL | 발신 이메일 | Resend 도메인 인증 필요 |
미설정 시 이메일 발송 대신 서버 로그에 출력됩니다.
6. 에러 모니터링 (Sentry)
| 변수 | 용도 | 발급처 |
|---|---|---|
NEXT_PUBLIC_SENTRY_DSN | Sentry DSN | sentry.io |
SENTRY_ORG | 소스맵 업로드용 (선택) | sentry.io |
SENTRY_PROJECT | 소스맵 업로드용 (선택) | sentry.io |
SENTRY_AUTH_TOKEN | 소스맵 업로드용 (선택) | sentry.io |
미설정 시 Sentry가 비활성화됩니다.
7. 결제 (토스페이먼츠)
현재 전환 예정 상태. 설정은 주석 처리되어 있습니다.
| 변수 | 용도 | 발급처 |
|---|---|---|
TOSS_CLIENT_KEY | 클라이언트 키 (전환 예정) | developers.tosspayments.com |
TOSS_SECRET_KEY | 시크릿 키 (전환 예정) | 동일 |
NEXT_PUBLIC_BASE_URL | 결제 콜백 URL | 프로덕션 도메인 |
8. 개발 도구
| 변수 | 용도 | 기본값 |
|---|---|---|
NEXT_PUBLIC_USE_EMULATOR | Firebase 에뮬레이터 사용 | false |
NEXT_PUBLIC_ENABLE_AI | AI 기능 활성화 | false |
NEXT_PUBLIC_RECAPTCHA_SITE_KEY | reCAPTCHA v3 사이트 키 | - |