학습 목표
1~15편 주제를 단계·계층별 배포 전 체크리스트로 통합할 수 있다.
SDLC 게이트(설계·빌드·스테이징·운영)에서 자동·수동 점검을 구분할 수 있다.
CI/CD 보안 파이프라인(시크릿 스캔·SAST·의존성·스테이징 검증) 개요를 설명할 수 있다.
OWASP ASVS 레벨과 시리즈 범위 매핑 개념을 설명할 수 있다.
Go/No-Go 배포 판단·예외 기록 프로세스를 설명할 수 있다.
문제 상황
- 각 편 체크리스트는 있지만 프로덕션 배포 전 한 장 통합 표 없음
- 금요일 17시 보안 팀 수동 리뷰 — 병목·누락 반복
- staging TLS 끔·debug true — prod 설정 드리프트 미발견
- JWT 만료 없음(5편)·SQLi 테스트 없음(9편)·Vault 미연동(13편) — 개별 이슈는 알지만 게이트 없음
- 감사 로그 스키마 없음(15편) — 사고 후 조사 불가
Part 4 운영 보안 마무리 — 13~15편 통제를 1~12편 설계·취약점 방어와 묶어 배포 전 게이트로 운영한다.
체크리스트는 완벽한 보안이 아니라 누락 방지·재현 가능한 점검이다. Zero Trust·공급망·클라우드 IAM은 Part 5에서 확장한다.
1. 시리즈 맵과 체크리스트 범위

| Part | 편 | 체크리스트 도메인 |
|---|---|---|
| 1 | 1~3 | CIA·원칙·TLS — 전송·신뢰 경계 |
| 2 | 4~8 | 인증·인가 — 세션·JWT·OAuth·OIDC·RBAC |
| 3 | 9~12 | OWASP — Injection·XSS·CSRF·BAC·misconfig |
| 4 | 13~15 | 운영 — 시크릿·API·감사·PII |
- 2편 원칙(least privilege, defense in depth, fail secure) — 모든 항목 판단 기준
- Network HTTPS(2_Network) — 3편 TLS와 중복 점검 한 줄로 통합
- Platform Secret 주입(5_Platform) — 13편 저장과 함께 배포 표에 기재
2. SDLC 단계별 게이트

| 단계 | 시점 | 대표 점검 | 자동화 |
|---|---|---|---|
| Design | RFC·API 스펙 | threat model, authz matrix | 템플릿·리뷰 |
| Build | PR·merge | gitleaks, SAST, dep scan, unit | CI 필수 |
| Pre-deploy | staging → prod | 통합 체크리스트, DAST smoke | 스크립트 + sign-off |
| Operate | prod | audit·alert·rotation·drill | SIEM·runbook |
- shift left — 9편 Injection 테스트를 배포 전이 아니라 PR에서
- staging = prod parity — CORS·rate limit·TLS 버전 동일 검증
3. 배포 전 통합 체크리스트
아래는 1~15편 핵심을 한 표로 묶은 최소 세트. 상세는 각 편 체크리스트 **참조.
3.1 기반·전송 (Part 1)
| 항목 | 확인 | 편 |
|---|---|---|
| TLS 1.2+ / HSTS | prod 강제, cert 만료 알람 | 3 |
| Cipher suite | forward secrecy, weak 제거 | 3 |
| Fail secure | auth 장애 시 deny | 2 |
| Security headers | CSP, X-Frame, nosniff | 10, 12 |
3.2 인증·인가 (Part 2)
| 항목 | 확인 | 편 |
|---|---|---|
| Session / JWT | httpOnly, Secure, 짧은 TTL, alg 고정 | 4, 5 |
| OAuth / OIDC | Auth Code + PKCE, state, nonce | 6, 7 |
| Authz | 매 요청 검사, RBAC·ownership | 8, 11 |
| Admin | 별도 role, MFA, 감사 | 8, 15 |
3.3 애플리케이션 취약점 (Part 3)
| 항목 | 확인 | 편 |
|---|---|---|
| Injection | prepared stmt, ORM, 입력 검증 | 9 |
| XSS | escape, CSP, no innerHTML |
10 |
| CSRF | token / SameSite | 10 |
| BAC / IDOR | object-level check, no guessable id only | 11 |
| SSRF | URL allowlist, no metadata IP | 12 |
| Components | dep CVE scan, pin version | 12 |
| Misconfig | debug off, default cred 없음, error safe | 12, 14 |
3.4 운영 (Part 4)
| 항목 | 확인 | 편 |
|---|---|---|
| Secrets | Vault/SM, no git, rotate | 13 |
| API | rate limit, schema, CORS allowlist | 14 |
| Audit | event schema, auth events, append-only | 15 |
| PII | mask at source, no secret in log | 15 |
| Trace | trace_id on audit + app | 15 |
# code/pre-deploy-checklist.example.yaml (발췌)
version: "1.0"
service: payment-api
environment: production
gates:
build:
- secret_scan: pass # gitleaks / trufflehog
- dependency_cve: no_critical
- unit_tests: pass
staging:
- tls_min: "1.2"
- debug_enabled: false
- auth_smoke: pass # login + 403 negative
- rate_limit_smoke: pass
production:
- checklist_signed_by: [tech-lead, security-champion]
- audit_stream: enabled
- rollback_plan: documented
4. CI/CD 보안 게이트

| 게이트 | 도구 예 | 실패 시 |
|---|---|---|
| Secret scan | gitleaks, GitHub secret scanning | merge block |
| SAST | Semgrep, CodeQL | block or warn by severity |
| Dependency | Dependabot, Trivy, OSV | CVE critical block |
| Container | image scan, non-root | deploy block |
| IaC | checkov, tfsec | plan block |
| Staging smoke | auth, 401/403, health | promote block |
# code/ci-security-gate.example.yml (발췌)
name: security-gates
on: [pull_request]
jobs:
secret-scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: gitleaks/gitleaks-action@v2
sast:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: returntocorp/semgrep-action@v1
dependency:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: pip audit --strict # or npm audit at high
- warn-only SAST는 소음만 — critical은 반드시 block
- fork PR — secret 없음; workflow 설계 주의 (13편)
5. 자동화 vs 수동 점검

| 자동 (CI·스크립트) | 수동 (리뷰·침투) |
|---|---|
| 시크릿·CVE·SAST | threat model 갱신 |
| TLS cipher scan | authz matrix 완전성 |
| staging smoke | 비즈니스 로직 우회 |
| checklist YAML lint | 예외 승인·기한 |
- security champion — 팀당 1명, 배포 표 서명 권한 아님 필수
- 예외 — Jira ticket, 만료일, 완화 조치 문서화; 영구 예외 금지
6. ASVS와 레벨 선택
OWASP ASVS (Application Security Verification Standard) — 요구사항 체크리스트 표준.
| ASVS 레벨 | 적용 | 시리즈 대응 |
|---|---|---|
| L1 | 일반 웹·API | Part 1~3 대부분 |
| L2 | 민감 데이터·B2B | + Part 4 운영·감사 |
| L3 | 고위험·규제 | + Part 5 ZT·supply chain·IAM |
- 본 시리즈 1~16편 — L1~L2 핵심 커버; L3·인프라 심화는 17~19편
- ASVS 항목 ID를 내부 체크리스트 행에 매핑 — 감사·갭 추적
7. Go/No-Go 배포 판단
| Go | No-Go |
|---|---|
| 모든 block 게이트 pass | critical CVE 미패치 |
| staging 체크리스트 100% or 승인 예외 | audit 스트림 미연결 |
| rollback·on-call 확인 | prod only 설정 미검증 |
| 침해 공지 채널 대기 | 시크릿 평문 잔존 의심 |
배포 당일 (요약)
1. CI green + staging checklist signed
2. prod config diff review (no debug, TLS on)
3. deploy → smoke (auth, health, sample audit event)
4. 30min watch: error rate, auth failures, 429
- hotfix도 최소 게이트 — secret scan + smoke; 사후 체크리스트 보완
8. Part 4 마무리 체크리스트
| 항목 | 확인 |
|---|---|
| Unified sheet | Part 1~4 한 표 or YAML |
| CI gates | secret, dep, SAST block 정책 |
| Staging parity | TLS, auth, rate limit 동일 |
| Sign-off | champion + 예외 ticket |
| ASVS map | L1/L2 갭 문서 |
| Operate | audit·rotation·SIEM 연동 |
| 안티패턴 | |
|---|---|
| 체크리스트만 있고 게이트 없음 | PR에서 자동 실패 |
| 수동 전부 | 피로·누락 |
| prod 첫 점검 | staging 동일 스크립트 |
| 예외 구두 승인 | ticket·만료 없음 |
9. 정리
- 체크리스트 — 1~15편 분산 통제를 배포 게이트로 통합
- SDLC — Design·Build·Pre-deploy·Operate 단계별 다른 도구
- 자동 + 수동 — CI block과 authz 리뷰 병행
- ASVS — 외부 기준과 내부 표 매핑
- Part 4 완료 — 앱 계층 운영 보안 기반 확보; Part 5에서 인프라·공급망·신뢰 모델 확장
다음에 다룰 것
- Zero Trust
- never trust always verify, ZTNA, micro-segmentation
해당 내용은 OWASP ASVS, OWASP Cheat Sheet Series, NIST SSDF SP 800-218 의 내용을 기반으로 합니다.
'애플리케이션 보안' 카테고리의 다른 글
| Supply Chain 보안 (1) | 2026.07.05 |
|---|---|
| Zero Trust (1) | 2026.07.04 |
| 로깅과 감사 (0) | 2026.07.02 |
| API 보안 (0) | 2026.07.01 |
| 시크릿 관리 (0) | 2026.06.30 |