TDD문화 도입 | (3) 커버리지 측정 및 자동화 시스템 구축 (GitLab + Vitest)
TDD문화 도입 | (3) 커버리지 측정 및 자동화 시스템 구축 (GitLab + Vitest)
📌 이 글은 TDD 시리즈 중 3편입니다.
1편: Vitest 전환과 커버리지 기반 품질 관리
2편: 주간 커버리지 대시보드로 시각화하기
4편: Tech 발표, Vitest로 안정적인 프론트엔드 개발하기
1. 도입 배경
- 프론트엔드 프로젝트에서 테스트 자동화 및 커버리지 관리 필요성 증가
- MR(Merge Request) 시점에 자동으로 커버리지를 측정하고 팀원들이 직접 확인할 수 있는 체계 구축 요구
- 코드 품질을 정량적으로 관리하고 리팩토링 안정성을 확보하기 위한 자동화된 커버리지 관리 시스템 도입
2. GitLab CI/CD 파이프라인 구축
2.1 파이프라인 스테이지 설계
MR이 생성될 때마다 자동으로 테스트를 수행하고, 그 결과와 커버리지 리포트를 생성하여 업로드하도록 test 스테이지를 추가했습니다.
1
2
3
stages:
- test
- build
2.2 Docker 기반 Node 환경
- GitLab Runner 기본 환경에는 Node.js 미설치 →
node명령어 실행 불가 - 해결책: node:22 도커 이미지 pull 후 job 실행
- Docker 환경에서 테스트 및 커버리지 리포트 안정적으로 수행
3. 테스트 커버리지 측정 자동화
3.1 Vitest 리포터 설정
- Cobertura 리포터 → 상세 커버리지 분석
- JUnit 리포터 → GitLab UI에서 테스트 결과 확인
- 다양한 리포트 생성으로 데이터 활용도 향상
3.2 GitLab CI 커버리지 설정
1
2
3
4
5
6
7
8
9
10
test_coverage:
stage: test
script:
- npm run test:coverage
- cat coverage/coverage.txt
coverage: '/All files\\s*\\|\\s*[0-9.]+\\s*\\|\\s*[0-9.]+\\s*\\|\\s*[0-9.]+\\s*\\|\\s*([0-9.]+)\\s*\\|/'
artifacts:
reports:
junit: coverage/junit.xml
cobertura: coverage/cobertura.xml
- coverage badge로 대시보드에서 상태 가시성 확보
- MR UI에서 커버리지 수치를 직접 확인 가능

- JUnit & Cobertura 리포트 → GitLab과 연동해 품질 메트릭 시각화

4. 로컬 개발 환경 개선
4.1 Pre-commit Hook 설정
- 커밋 전에 자동으로 테스트 실행 (husky 사용)
- 실패 시 커밋 차단 → 품질 저하 방지
4.2 테스트 최적화
- Vitest 설정 업데이트
- 커버리지 측정 대상 명확화, 불필요한 파일 제외
5. 시스템 운영 및 모니터링
5.1 커버리지 데이터 수집
- 주간 단위 자동 수집
- 장기적인 품질 트렌드 분석
- 취약 영역 조기 식별
5.2 리포팅 자동화
- GitLab MR에서 커버리지 변화 바로 확인
- 주간 단위 커버리지 리포트 자동 생성 및 팀 공유
6. 결과 및 개선 효과
6.1 개발 프로세스 향상
- MR 시점 자동 테스트 → 코드 품질 향상
- 테스트 작성 문화 정착
- 리팩토링 안정성 확보
6.2 운영 효율성 증대
7. 시행착오
- 문제: 전체 패키지 설치 후 테스트 실행 → 파이프라인 2분 이상 소요
- 임시 해결: coverage.txt 기반 결과 수집
- 근본 문제: 사용자별 커밋 차이로 .txt 충돌 발생
- 최종 해결: Docker 기반으로 환경 통일 + CI artifact 활용
8. 향후 계획
- 커버리지 임계값 설정 → 기준치 미달 시 MR 자동 차단
- 테스트 실행 속도 최적화 (캐싱, selective test)
- 리포트 시각화 개선 및 Slack 알림 고도화
- 장기적으로 자동화된 코드 품질 분석 & 테스트 전략 수립 추진
9. 참고 자료
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

