docs(CI): 품질 게이트·브랜치 보호 PR 워크플로 문서화
All checks were successful
CI / backend-test (push) Successful in 1m28s
CI / frontend-build (push) Successful in 21s

Spotless/JaCoCo/ESLint/커버리지 게이트와 로컬 교정법, main 보호 규칙과
학생 PR 실습 흐름을 CI.md에 정리.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
AWESOMEDEV 2026-07-17 18:06:03 +09:00
parent 63f34aa025
commit daf3e9ac09

View File

@ -69,8 +69,34 @@ bash deploy/smoke-test.sh
> **권장 배포 흐름**: 빌드 → 업로드 → `docker compose up`**`bash deploy/smoke-test.sh`**.
> 스모크가 빨간불이면 배포에 문제가 있는 것이니 바로 롤백/수정한다.
## 품질 게이트 (push/PR마다 자동 검사)
CI가 통과해야 하는 관문이 아래처럼 늘었다. **로컬에서 먼저 돌려 보고 밀면** 빨간불을 피한다.
| 게이트 | 무엇을 막나 | 로컬에서 고치는 법 |
|---|---|---|
| Spotless(백엔드) | 안 쓰는 import·줄끝 공백·파일끝 개행 | `cd backend && mvn spotless:apply` |
| JaCoCo(백엔드) | 라인 커버리지 30% 미만으로 **후퇴** | 테스트 추가 (`mvn test``target/site/jacoco/index.html`) |
| ESLint(프론트) | 안 쓰는 변수·없는 전역·React 훅 오용 | `cd frontend && npm run lint` |
| 커버리지(프론트) | 채점 로직 `runSql.js` 40% 미만 | `npm run coverage` 로 확인 후 테스트 보강 |
> 커버리지 바닥(30%/40%)은 "지금보다 나빠지지 마라"는 **래칫(ratchet)**이다.
> 테스트를 늘리면 이 숫자도 함께 올려 바닥을 끌어올리는 게 건강한 흐름.
## main 브랜치 보호 (PR 워크플로)
`main`은 보호 규칙이 걸려 있다(Gitea → 저장소 설정 → 브랜치):
- **CI 두 개(backend-test·frontend-build)가 초록불이어야** merge 가능
- **PR에 승인 1개 필요** (멘토가 학생 PR을 리뷰·승인)
- 학생은 `main`에 직접 push 불가 → **브랜치 만들어 PR** 여는 흐름을 익힌다
- 운영·배포용으로 관리자 계정만 직접 push 허용(화이트리스트)
학생 실습 흐름: `git switch -c feat/내작업` → 커밋 → push → Gitea에서 PR 생성 →
CI 초록불 + 멘토 승인 → merge. (실무 표준 흐름을 그대로 경험)
## 다음 개선 (학생 티켓)
- Maven·npm 캐시로 CI 실행 시간 단축
- main 브랜치 보호(테스트 통과해야 merge)
- 커버리지 바닥을 단계적으로 상향(30%→40%→…)
- 스모크 테스트를 배포 스크립트에 자동 편입(deploy 후 자동 실행·실패 시 알림)
- E2E 테스트(Playwright: 로그인→강좌→퀴즈)