# API Key 관리 가이드 ## 📋 개요 PHP 백엔드에서 발급하는 API Key의 안전한 관리 및 주기적 갱신 대응 방법 --- ## 🔑 현재 API Key 정보 ```yaml 개발용 API Key: 키 값: 42Jfwc6EaRQ04GNRmLR5kzJp5UudSOzGGqjmdk1a 발급일: 2025-11-07 용도: 개발 환경 고정 키 갱신: 주기적으로 변동 가능 ``` --- ## 🔐 보안 원칙 ### ✅ DO (반드시 해야 할 것) - `.env.local`에만 실제 키 저장 - 서버 사이드 코드에서만 사용 - Git에 절대 커밋 금지 - 팀 공유 문서로 키 관리 ### ❌ DON'T (절대 하지 말 것) - 하드코딩 금지 - `NEXT_PUBLIC_` 접두사 사용 금지 - 브라우저 코드에서 사용 금지 - 공개 저장소에 업로드 금지 --- ## 📁 파일 구성 ### .env.local (실제 키 - Git 제외) ```env # API Key (서버 사이드 전용 - 절대 공개 금지!) # 개발용 고정 키 (주기적 갱신 예정) # 발급일: 2025-11-07 # 갱신 필요 시: PHP 백엔드 팀에 새 키 요청 API_KEY=42Jfwc6EaRQ04GNRmLR5kzJp5UudSOzGGqjmdk1a ``` ### .env.example (템플릿 - Git 커밋 OK) ```env # API Key (⚠️ 서버 사이드 전용 - 절대 공개 금지!) # 개발팀 공유: 팀 내부 문서에서 키 값 확인 # 주기적 갱신: PHP 백엔드 팀에서 새 키 발급 시 업데이트 필요 API_KEY=your-secret-api-key-here ``` ### .gitignore 확인 ```bash # 라인 100-101에 이미 포함됨 .env.local .env*.local ``` --- ## 🔄 API Key 갱신 프로세스 ### 1️⃣ PHP 팀에서 새 키 발급 ``` PHP 백엔드 팀 → 새 API Key 발급 ↓ 팀 공유 문서 업데이트 ``` ### 2️⃣ 로컬 개발 환경 업데이트 ```bash # .env.local 파일 열기 vi .env.local # 또는 code .env.local # API_KEY 값만 변경 API_KEY=새로운키값여기에입력 # 개발 서버 재시작 npm run dev ``` ### 3️⃣ 프로덕션 환경 업데이트 #### Vercel 배포 ```bash # CLI로 업데이트 vercel env add API_KEY production # 또는 대시보드에서 # Settings → Environment Variables → API_KEY 편집 ``` #### AWS/기타 환경 ```bash # 환경 변수 업데이트 export API_KEY=새로운키값 # 또는 배포 설정에서 환경 변수 수정 ``` ### 4️⃣ 검증 ```bash # 개발 서버 시작 시 자동으로 검증됨 npm run dev # 콘솔 출력 확인: # 🔐 API Key Configuration: # ├─ Configured: ✅ # ├─ Valid Format: ✅ # ├─ Masked Key: 42Jf********************dk1a # └─ Length: 48 chars ``` --- ## 🛠️ API Key 검증 유틸리티 ### 자동 검증 기능 ```typescript // lib/api/auth/api-key-validator.ts import { apiKeyValidator } from '@/lib/api/auth/api-key-validator'; // 개발 서버 시작 시 자동 실행 console.log(apiKeyValidator.getDebugInfo()); // 출력 예시: // API Key Status: // ├─ Configured: ✅ // ├─ Valid Format: ✅ // ├─ Masked Key: 42Jf********************dk1a // └─ Length: 48 chars ``` ### 수동 검증 ```typescript import { apiKeyValidator } from '@/lib/api/auth/api-key-validator'; // API Key 존재 확인 if (!apiKeyValidator.isConfigured()) { console.error('API Key not configured!'); } // 형식 검증 if (!apiKeyValidator.isValid()) { console.error('Invalid API Key format!'); } // 디버그 정보 출력 console.log(apiKeyValidator.getDebugInfo()); ``` --- ## 📊 사용 예시 ### 서버 사이드 (Next.js API Route) ```typescript // app/api/sync/route.ts import { createApiKeyClient } from '@/lib/api/auth/api-key-client'; export async function GET() { try { // 환경 변수에서 자동으로 키를 가져옴 const client = createApiKeyClient(); const data = await client.fetchData('/api/external-data'); return Response.json({ success: true, data }); } catch (error) { console.error('API request failed:', error); return Response.json( { error: 'Failed to fetch data' }, { status: 500 } ); } } ``` ### 백그라운드 스크립트 ```typescript // scripts/sync-data.ts import { createApiKeyClient } from '@/lib/api/auth/api-key-client'; import { apiKeyValidator } from '@/lib/api/auth/api-key-validator'; async function syncData() { // 1. 환경 변수 확인 console.log(apiKeyValidator.getDebugInfo()); if (!apiKeyValidator.isValid()) { throw new Error('Invalid API Key configuration'); } // 2. API 요청 const client = createApiKeyClient(); const data = await client.fetchData('/api/sync-endpoint'); console.log('Sync completed:', data); } syncData().catch(console.error); ``` --- ## ⚠️ 에러 처리 ### API Key 미설정 ``` ❌ API_KEY is not configured! 📝 Please check: 1. .env.local file exists 2. API_KEY is set correctly 3. Restart development server (npm run dev) 💡 Contact backend team if you need a new API key. ``` **해결 방법:** 1. `.env.local` 파일 생성 확인 2. `API_KEY=실제키값` 입력 3. `npm run dev` 재시작 ### API Key 형식 오류 ``` ❌ Invalid API Key format! - Minimum 32 characters required - Only alphanumeric characters allowed ``` **해결 방법:** 1. PHP 팀에서 발급받은 키 확인 2. 복사 시 공백/줄바꿈 없는지 확인 3. 정확한 키 값 재입력 --- ## 🔍 만료 경고 (선택사항) ### 만료 체크 기능 ```typescript // lib/api/auth/key-expiry-check.ts import { apiKeyValidator } from './api-key-validator'; // API Key 발급일 const issuedDate = new Date('2025-11-07'); // 90일 유효기간으로 체크 const status = apiKeyValidator.checkExpiry(issuedDate, 90); console.log(status.message); // ✅ API Key valid (75 days left) // ⚠️ API Key expiring in 10 days // 🔴 API Key expired! Contact backend team. if (status.isExpiring) { console.warn('⚠️ Please contact backend team for new API key!'); } ``` --- ## 📚 체크리스트 ### 초기 설정 - [ ] `.env.local` 파일 생성 - [ ] `API_KEY` 값 입력 - [ ] `.gitignore`에 `.env.local` 포함 확인 - [ ] 개발 서버 시작 후 검증 확인 ### 키 갱신 시 - [ ] PHP 팀에서 새 키 수령 - [ ] `.env.local` 업데이트 - [ ] 로컬 개발 서버 재시작 - [ ] 검증 로그 확인 - [ ] 프로덕션 환경 변수 업데이트 ### 보안 점검 - [ ] Git에 `.env.local` 커밋 안됨 - [ ] 브라우저 코드에서 사용 안함 - [ ] `NEXT_PUBLIC_` 접두사 없음 - [ ] 팀 공유 문서에 키 기록 --- ## 🚀 다음 단계 API Key 설정 완료 후: 1. `createApiKeyClient()` 사용하여 API 요청 2. 서버 사이드 코드에서만 호출 3. 에러 발생 시 검증 로그 확인 4. 주기적으로 만료 시간 체크 (선택) --- ## 📞 문의 - **API Key 발급**: PHP 백엔드 팀 - **기술 지원**: 프론트엔드 팀 - **보안 문제**: DevOps/보안 팀