만약 피파를 오늘 처음부터 만든다면
2026년 프로젝트를 위한 이상적인 CI/CD 설정이야. 소규모 팀, 실사용자, 적당한 규모를 가정했어. 하나씩 조립해 나가고, 한 번에 다 만들려고 하지 마.
저장소 수준 기본 설정
- 메인 브랜치 보호: CI 통과 필수, 엄격한 상태 확인, 병합 큐 사용, 강제 푸시 금지, 가능하면 서명된 커밋 사용.
- 비밀값 스캐닝과 푸시 보호 활성화.
- Dependabot 알림과 패치는 자동 병합되는 버전 업데이트로 설정.
- CodeQL은 주간 일정으로 실행.
워크플로 라이브러리
ci.yml— 포맷팅 → 린트 → 타입 검사 → 유닛 테스트 → 통합 테스트. 모든 PR에 적용.permissions: read설정, 진행 중인 작업 취소(concurrency cancel-in-progress), 문서 경로 무시(docs 경로-ignore).release.yml— 태그 푸시 시 빌드, 서명, 게시, GitHub 릴리스 생성.deploy-staging.yml— 메인 브랜치 병합 시 스테이징 환경에 배포, 스모크 테스트 진행.deploy-prod.yml— 버전 입력값을 받는 workflow_dispatch 실행 조건, 필수 리뷰어와 브랜치 정책을 가진 운영 환경.nightly.yml— 전체 테스트 매트릭스, 의존성 감사, 베이스 이미지 리빌드. workflow_dispatch와 연동.codeql.yml+dependabot-auto-merge.yml— 보안 인프라.
인증과 비밀값
- 클라우드 인증은 OIDC. 장기 키는 없음.
- 조직 수준
GITHUB_TOKEN기본값 = 제한됨(restricted). - 워크플로마다 명시적인
permissions:설정. - 서드파티 액션은 커밋 SHA 고정.
- 비밀값 교체 런북과 분기별 훈련.
관측 가능성
- 핵심 지표를 담은 단계 요약(단계 summary).
- 배포 시 슬랙 알림 (성공 + 실패).
- CI 건강 상태(통과율, p95 소요 시간, 플레이크율)를 게시하는 주간 요약 작업.
AI/ML 서비스라면 추가로
- 릴리스 자산으로 베이스라인을 관리하는 평가 게이트(eval gate) 워크플로.
- 무거운 연산(MLX용 Apple Silicon, 학습용 GPU 박스)을 위한 셀프 호스티드 러너.
- 학습 파이프라인이 푸시하는 모델 레지스트리.
- API 계약 테스트(모킹된 브레인)와 평가 테스트(실제 브레인)를 별도 작업으로 분리.
진짜 가치
이 설정들 중 특별한 건 없어. 각 요소는 이미 어느 퀘스트에든 들어있거든. 규율은 첫 사건을 겪고 나서야 땜질하는 게 아니라, 새 프로젝트를 첫날부터 모두 갖추는 것이야.