입력 검증 + API 보안 — Rate Limiting · CORS · 환경변수
입력 검증 + API 보안 — Rate Limiting · CORS · 환경변수
🎯 이 lesson 을 읽고 나면
이 lesson 을 다 읽고 나면 아래 3가지를 자신 있게 할 수 있습니다.
- ▸✅ .env 관리 + GitHub Secret Scanning
- ▸✅ API Rate Limit (Token Bucket) 구현
- ▸✅ CORS 화이트리스트 + helmet 보안 헤더
학습 목표를 체크리스트로 두고 다 답할 수 있게 되면 lesson 을 닫으세요.
.env 파일 관리 — *GitHub leak 1위 사고 원인*
비밀 정보를 코드에 직접 박지 마세요
Git 에 올리면 영구 기록. 누군가 발견하면 즉시 악용.
.env 파일로 분리
.gitignore 에 반드시
프로젝트 처음 만들 때 즉시 추가. 한 번 커밋되면 git filter-repo 같은 도구로 history 통째로 다시 쓰는 대공사 필요.
.env.example 은 OK
다른 개발자에게 "이 키들이 필요해" 안내용. 실제 값은 없으니 커밋 OK.
GitHub leak 사고 — 실제 사례
- ▸AWS 키 노출 → 24시간 내에 자동 봇이 발견 → 비트코인 채굴 → 천만 원 청구
- ▸Stripe 키 노출 → 결제 시스템 탈취
- ▸OpenAI 키 노출 → 토큰 무한 사용
GitHub Secret Scanning 이 자동 감지하지만 돈은 이미 빠져나간 뒤.
키가 노출됐다면
1. 즉시 키 폐기 (rotate) — AWS/OpenAI 콘솔에서 새 키 발급, 옛 키 삭제
2. Git history 정리 — git filter-repo 또는 BFG Repo-Cleaner
3. 비용 모니터링 — 청구서 확인
4. 팀에 알림
"한번 노출 = 영구 노출" — 새 키 발급이 필수.
환경별 분리
프로덕션 값은 GitHub Actions Secrets, AWS Parameter Store, Vault 같은 전문 저장소. 절대 .env 파일 로 서버에 두지 마세요 (백업·로그·실수로 노출 위험).
🤖 AI 에게 이렇게 요청해보세요
- ▸"이 코드에서 하드코딩된 API 키를 process.env 로 빼주고 .env.example 도 만들어줘"
- ▸"이 프로젝트 .gitignore 가 안전한지 검토해줘"
CORS · Rate Limiting · HTTPS — 3대 방어선
CORS — 왜 브라우저가 차단하나
CORS (Cross-Origin Resource Sharing) 는 브라우저의 안전장치. 다른 도메인의 API 호출을 기본 차단.
없으면 — 악성 사이트가 내 은행 사이트의 API 를 내 로그인 쿠키로 호출 가능.
서버에서 허용하기
Express (Node.js)
Spring Boot
안티패턴 — 모든 origin 허용
공개 API 가 아니면 origin 을 화이트리스트 로 명시.
Rate Limiting — 남용 방지
왜 필요한가
- ▸공격자가 1초에 1만 회 호출 → 서버 다운
- ▸비밀번호 무차별 대입 (brute force)
- ▸AI API 비용 폭발
Express + express-rate-limit
Redis 기반 (분산 환경)
서버 인스턴스 여러 대 일 때 Redis 공유. 단일 서버 메모리 카운트는 분산에 부적합.
로그인 엔드포인트는 더 엄격하게
HTTPS — 2026년 필수
왜 필수인가
- ▸HTTP 는 평문 전송 — 와이파이 도청 가능
- ▸Chrome / Safari 가 "안전하지 않음" 표시 → 신뢰도 추락
- ▸Service Worker · 카메라 등 모던 API 가 HTTPS 강제
Let's Encrypt 무료 인증서
90일 유효 + 자동 갱신. 0원으로 모든 사이트가 HTTPS.
Vercel · Netlify
자동으로 HTTPS 적용. 별도 설정 0개.
보안 헤더 5가지 — 무료 점수
helmet 이 자동 설정:
- ▸
X-Content-Type-Options: nosniff - ▸
X-Frame-Options: SAMEORIGIN(clickjacking 방지) - ▸
Strict-Transport-Security(HSTS — HTTPS 강제) - ▸
X-XSS-Protection(옛 브라우저용) - ▸
Referrer-Policy: strict-origin-when-cross-origin
🤖 AI 에게 이렇게 요청해보세요
- ▸"이 Express API 에 helmet + CORS 화이트리스트 + 글로벌 rate limit 추가해줘"
- ▸"로그인 엔드포인트에 5분에 5회 제한 추가해줘"
- ▸"이 코드의 보안 취약점 5가지를 찾아줘"