stack-analysis
CHAPTER 109 / 120
읽기 약 2분
FUNCTION
의존성 보안: npm audit + Snyk + Renovate
핵심 개념
npm audit·Snyk·Dependabot·Renovate·SCA — 자동 의존성 보안.
본문
의존성 위험
2024년 통계:
- 평균 프로젝트 1500+ 의존성
- 공급망 공격 (supply chain) 급증
- log4shell·left-pad 사례
→ 자동화 없이는 관리 불가능npm audit (기본)
# 검사
pnpm audit
npm audit
# 자동 수정 (가능한 것만)
pnpm audit --fix
npm audit fix
# 심각도 필터
npm audit --audit-level=moderate
# CI 통합
pnpm audit --audit-level=high && pnpm testSnyk (더 강력)
# 무료 plan
pnpm dlx snyk auth
pnpm dlx snyk test
pnpm dlx snyk monitor
# 자동 PR
pnpm dlx snyk fix
# CI
pnpm dlx snyk test --severity-threshold=high
# license 검사
pnpm dlx snyk test --print-depsDependabot (GitHub 무료)
# .github/dependabot.yml
version: 2
updates:
- package-ecosystem: npm
directory: /
schedule:
interval: weekly
day: monday
open-pull-requests-limit: 10
versioning-strategy: increase
groups:
production:
dependency-type: production
development:
dependency-type: development
ignore:
- dependency-name: react
update-types: ['version-update:semver-major']
commit-message:
prefix: chore
include: scope
# GitHub Actions 자동 업데이트
- package-ecosystem: github-actions
directory: /
schedule:
interval: weeklyRenovate (더 강력)
// renovate.json
{
"extends": ["config:recommended"],
"schedule": ["before 9am on monday"],
"labels": ["dependencies"],
"rangeStrategy": "bump",
"packageRules": [
{
"matchUpdateTypes": ["patch", "minor"],
"automerge": true,
"automergeType": "branch"
},
{
"matchPackagePatterns": ["^@types/"],
"groupName": "type definitions",
"automerge": true
},
{
"matchPackageNames": ["next", "react", "react-dom"],
"groupName": "Next.js + React",
"schedule": ["before 9am on monday"]
}
],
"vulnerabilityAlerts": {
"labels": ["security"],
"automerge": true
}
}SBOM (Software Bill of Materials)
# CycloneDX
pnpm dlx @cyclonedx/cyclonedx-npm --output sbom.json
# Syft
syft . -o cyclonedx-json > sbom.json
# → 사용 중인 모든 의존성·버전 목록
# → 컴플라이언스 (SOC 2, ISO 27001)
# → 취약점 발생 시 영향 평가의존성 보안 체크리스트
[정기]
☐ pnpm audit 매주
☐ Dependabot/Renovate PR 검토
☐ Snyk monitor 활성
[CI]
☐ npm audit --audit-level=high (필수)
☐ Snyk test (선택)
☐ 라이선스 검사 (license-checker)
[정책]
☐ lockfile commit (pnpm-lock.yaml)
☐ exact version 또는 ~minor only
☐ 알 수 없는 maintainer 패키지 회피
☐ 큰 의존성은 자체 구현 검토라이선스 검사
# license-checker
pnpm dlx license-checker --summary
# 결과
├─ MIT: 1234
├─ ISC: 456
├─ Apache-2.0: 78
├─ BSD-3-Clause: 23
└─ GPL-3.0: 1 ⚠️ (commercial 위험)
# 정책 적용
pnpm dlx license-checker --onlyAllow "MIT;ISC;Apache-2.0;BSD-3-Clause"
# → 다른 라이선스 발견 시 실패공급망 공격 방어
1. Lockfile 항상 commit
pnpm-lock.yaml / package-lock.json
2. CI에 frozen install
pnpm install --frozen-lockfile
3. 큰 변경은 수동 검토
- major version
- 새 maintainer
- permission 변경
4. 알려진 위험 패키지 차단
- .npmrc에 deny list
- 또는 사내 registry (Verdaccio)
5. Dependency confusion 방어
- scoped packages (@my-org/...)
- private registry로 차단알림 + 대응
// GitHub Security Alerts → Slack
// .github/workflows/security-alert.yml
on:
security_advisory: { types: [published] }
jobs:
notify:
runs-on: ubuntu-latest
steps:
- uses: 8398a7/action-slack@v3
with:
status: custom
custom_payload: |
{
text: "🚨 New security advisory: ${{ github.event.security_advisory.summary }}"
}
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}다음 챕터
CH.110 "보안 종합: 프로덕션 보안 체크리스트 50항목".
AI 프롬프트
🤖 AI에게 잘 물어보는 법 — 모델·전략별 프롬프트
Claude
무료: Sonnet 4.6 / Pro $20/mo: Opus 4.6
내 코드의 의존성 보안 부분을 분석해서 실전 분석 + 개선 우선순위를 알려줘.
ChatGPT
무료: GPT-5.5 / Plus $20/mo: GPT-5.5 Pro
의존성 보안 관련 베스트 프랙티스 5가지를 비교 분석해서 패턴 추출를 알려줘.
Gemini
무료: 2.5 Flash / Pro $19.99/mo: 3.1 Pro
내 프로젝트 전체에서 의존성 보안 최적화 가능 위치를 보고해줘.
Grok
무료: Grok 4.1 / SuperGrok $30/mo
2026년 한국 시장의 의존성 보안 트렌드를 솔직히 알려줘.
⭐ 이것만 기억하세요
의존성 보안: npm audit + Snyk + Renovate는 이 3가지만 확실히 잡으세요
1.Dependabot/Renovate + npm audit = 자동 PR + CI 검증
2.lockfile commit + frozen-lockfile = 공급망 일관성
3.SBOM + 라이선스 검사 = 컴플라이언스 + 위험 가시성
공유하기
진행도 109 / 120