자동화 테스트를 CI/CD 프로세스에 통합하면 코드 변경 시 결함을 조기 발견할 수 있습니다. 이는 현대 개발 프로세스와 제품 안정성 확보에 필수적입니다.
문제의 역사: 전통적으로 자동화 테스트는 수동으로 또는 개별 작업을 통해 실행되었습니다. 지속적 통합(CI, Continuous Integration) 및 지속적 배포(CD, Continuous Deployment) 개념의 등장으로 모든 테스트를 각 커밋 시 자동으로 실행해야 할 필요성이 생겼습니다. 현재 Jenkins, GitLab CI/CD, GitHub Actions, TeamCity 및 그 유사한 시스템이 널리 사용되고 있습니다.
문제점: 자동화 테스트가 통합되지 않으면 버그가 늦게 발견됩니다: 개발자가 문제를 놓칠 수 있어 생산에 영향을 미칠 수 있습니다. 수동 실행은 릴리스를 지연시키고 각 변경의 품질에 대한 확신을 주지 않습니다.
해결책: CI/CD에 자동화 테스트를 통합하면 다음과 같은 이점을 제공합니다:
이를 위해 테스트는 파이프라인 내에서 별도의 작업으로 설정됩니다: 일반적으로 유닛 테스트, 통합 테스트, UI 및 부하 테스트를 위한 단계가 있습니다. .gitlab-ci.yml 예시는 다음과 같습니다:
stages: - test - deploy unit_test: stage: test script: - npm run test:unit ui_tests: stage: test script: - npm run test:ui
주요 특징:
자동화 테스트의 CI/CD 통합이 개발 속도를 늦추지 않을까요?
아닙니다, 올바르게 설정된 파이프라인은 병렬 처리, 격리된 환경 및 필요한 테스트만 실행할 수 있는 트리거를 사용하여 버그를 조기에 발견하여 릴리스를 빨리 진행할 수 있습니다.
파이프라인의 모든 단계에서 모든 자동화 테스트를 실행해야 할까요?
아니요, 일반적으로 초기 단계(예: 풀 리퀘스트 검토)에서는 빠른 확인(린터 및 유닛 테스트)을 사용하고, 전체 회귀 자동화 테스트는 릴리스 전에 또는 야간 빌드에서만 실행됩니다.
CI/CD에서 자동화 테스트만으로 수동 회귀 테스트를 잊고 생존할 수 있나요?
권장하지 않습니다 — 자동화는 반복되는 시나리오에 효과적이지만 복잡한 케이스와 사용자 경험 검증은 여전히 수동 검사가 필요합니다.
프로젝트에서 모든 자동화 테스트가 각 커밋에서 실행되어 파이프라인이 40 분까지 늘어나며, 개발자들은 자신의 브랜치를 병합하기 위해 테스트 완료를 기다려야 했습니다. 이로 인해 충돌 상황과 릴리스 지연이 발생했습니다.
장점:
단점:
작업을 분리하여 파이프라인을 설계했습니다: 기능 브랜치에서는 빠른 테스트만 실행하고, 전체 회귀는 stage/prod에서 수행했습니다. 오류와 보고서는 봇이 수집하여 팀은 실패에 대한 알림을 받고 신속하게 대응했습니다.
장점:
단점: