<aside> ✅

실습 완료: GitHub Actions에 코드 품질·보안 검사 6종을 연결하고, summary를 Required Status Check로 설정해 실패한 PR은 Merge 차단 → 문제 수정 → 전체 통과 후 Merge까지 확인했다

</aside>

1. 실습 목표

이번 실습의 핵심은 GitHub Actions를 단순 실행하는 것이 아니라, CI 검출 결과를 실제 Merge 정책과 연결하는 SecOps 흐름을 경험하는 것이었다.

Fork + Clone
   ↓
GitHub Actions Workflow 구성
   ↓
PR 생성 → 취약점/오류 검출
   ↓
Ruleset + Required Check 설정
   ↓
실패한 PR Merge 차단
   ↓
Repair Loop
   ↓
CI 전체 통과 → Merge

2. Fork와 Pull Request

Fork

Fork는 다른 사용자의 GitHub 저장소를 내 계정으로 복사해 독립적으로 수정·커밋·실습할 수 있게 하는 기능이다.

이번 실습에서는 원본 kintoun-secops/secops-actions-lab을 개인 계정으로 Fork한 뒤 개인 저장소에서 작업했다.

Pull Request

**Pull Request(PR)**는 별도 브랜치의 변경사항을 main에 병합하기 전에 변경 내용, 리뷰, 자동 CI 결과를 확인하는 절차다.

<aside> ⚠️

Fork 실습에서는 PR 생성 전 상단 Repository와 base/compare 브랜치를 확인해야 한다. 원본 저장소가 아니라 개인 Fork의 main을 대상으로 PR을 생성하는 것이 핵심이다.

</aside>

3. GitHub Actions CI 구성

이번 실습에서는 6개의 검사 도구를 별도 재사용 Workflow로 구성하고, 07-ci-summary.yml에서 하나로 묶었다.

도구 역할 Workflow
Ruff 포맷·린트·Python 보안 규칙 01-ruff.yml
mypy 정적 타입 검사 02-mypy.yml
pytest 단위 테스트·커버리지 03-pytest.yml
pip-audit Python 의존성 CVE 검사 04-pip-audit.yml
Semgrep SAST·Taint 분석 05-semgrep.yml
gitleaks Git History의 Secret 탐지 06-gitleaks.yml
summary 6개 검사 결과 집계·Merge Gate 07-ci-summary.yml
PR
 ↓
07 - CI summary
 ├─ Ruff
 ├─ mypy
 ├─ pytest
 ├─ pip-audit
 ├─ Semgrep
 └─ gitleaks
      ↓
   summary

01~06은 workflow_call 기반 재사용 Workflow로 두고, 07이 이들을 호출한다. 이렇게 구성하면 마지막 summary가 모든 검사 결과를 한 번에 집계할 수 있다.

4. 1단계 · 검출 — 빨간 CI 확인

Workflow를 조립한 뒤 첫 PR을 생성하자 의도적으로 포함된 오류와 취약점 때문에 여러 Job이 실패했다.