Load Performance Testing
부하 성능 테스트를 통해 어플리케이션의 백엔드에 대한 보류 중인 코드 변경 사항의 영향을 테스트할 수 있습니다. GitLab CI/CD 내에서 백엔드의 영향을 테스트할 수 있습니다.
GitLab은 애플리케이션의 시스템 성능을 측정하기 위해 무료이자 오픈 소스인 k6를 사용합니다. 이를 통해 부하 하에서의 애플리케이션의 성능을 측정할 수 있습니다.
브라우저 성능 테스트가 클라이언트 브라우저에서 웹 사이트의 성능을 측정하는 데 사용되는 것과는 달리, 부하 성능 테스트는 API, 웹 컨트롤러 등 어플리케이션 엔드포인트에 대한 다양한 유형의 부하 테스트를 수행하는 데 사용됩니다. 이를 통해 백엔드나 서버가 규모에 맞게 어떻게 실행되는지 테스트할 수 있습니다.
예를 들어, 부하 성능 테스트를 통해 애플리케이션의 유명한 API 엔드포인트에 대한 여러 동시 GET 호출을 수행하여 성능을 확인할 수 있습니다.
부하 성능 테스트 작동 방식
먼저, .gitlab-ci.yml
파일에서 부하 성능 보고서 artifacts를 생성하는 작업을 정의합니다. GitLab은 이 보고서를 확인하여 소스 브랜치와 대상 브랜치 간의 주요 부하 성능 메트릭을 비교한 다음, 병합 요청 위젯에 정보를 표시합니다:
다음으로, 테스트 환경을 구성하고 k6 테스트를 작성해야 합니다.
테스트가 완료된 후 병합 요청 위젯에 표시되는 주요 성능 메트릭은 다음과 같습니다:
- Checks: k6 테스트에서 구성된 checks의 통과율입니다.
- TTFB P90: 응답을 받기 시작하는 데 걸린 시간에 대한 90분위수, 즉 Time to First Byte (TTFB).
- TTFB P95: TTFB에 대한 95분위수.
- RPS: 평균 요청 속도(초당 RPS)는 테스트가 달성한 속도입니다.
참고:
부하 성능 보고서에 비교할 데이터가 없는 경우(예: 처음으로 .gitlab-ci.yml
에 부하 성능 작업을 추가한 경우) 부하 성능 보고서 위젯이 표시되지 않습니다. 대상 브랜치(main
등)에서 적어도 한 번 실행되어야 해당 브랜치를 대상으로 하는 병합 요청에서 표시됩니다.
부하 성능 테스트 작업 구성
부하 성능 테스트 작업을 구성하는 것은 여러 가지 구성 요소로 나눌 수 있습니다:
- 처리량(throughput)과 같은 테스트 매개변수를 결정합니다.
- 부하 성능 테스트 대상 테스트 환경을 설정합니다.
- k6 테스트를 설계하고 작성합니다.
테스트 매개변수 결정
첫 번째로 해야 할 일은 실행할 부하 테스트의 유형을 결정하고 실행 방식(예: 사용자 수, 처리량 등)을 결정하는 것입니다.
위와 관련한 지침은 k6 문서 및 특히 k6 테스트 가이드를 참조하십시오.
테스트 환경 설정
부하 성능 테스트를 준비하는 데 많은 노력이 필요합니다. 테스트할 부하를 처리할 수 있는지 확인해야 합니다. 또한 부하 성능 테스트에 대상 환경에 대표적인 테스트 데이터가 필요합니다.
운영 환경에서 이러한 테스트를 실행하지 않는 것을 권장합니다.
부하 성능 테스트 작성
환경이 준비되면 k6 테스트 자체를 작성할 수 있습니다. k6는 유연한 도구이며 다양한 유형의 성능 테스트를 실행하는 데 사용할 수 있습니다. 테스트 작성에 대한 자세한 정보는 k6 문서를 참조하십시오.
GitLab CI/CD에서 테스트 구성
k6 테스트가 준비되면 다음 단계는 GitLab CI/CD에서 부하 성능 테스트 작업을 구성하는 것입니다. 이 작업을 하는 가장 쉬운 방법은 GitLab에 포함된 Verify/Load-Performance-Testing.gitlab-ci.yml
템플릿을 사용하는 것입니다.
참고: 대규모 k6 테스트를 수행하는 경우 실제 테스트를 수행하는 GitLab Runner 인스턴스가 테스트를 처리할 수 있는지 확인해야 합니다. 자세한 사양은 k6의 안내를 확인하십시오. 기본 공유 GitLab.com 러너는 대부분의 대규모 k6 테스트를 처리할 수 있는 사양이 충분하지 않을 수 있습니다.
이 템플릿은 작업에서 k6 도커 컨테이너를 실행하며, 작업을 사용자화하는 여러 가지 방법을 제공합니다.
예를 들어 다음과 같은 구성 워크플로우가 있습니다:
- Docker-in-Docker workflow와 같이 GitLab Runner를 Docker 컨테이너로 실행합니다.
-
.gitlab-ci.yml
파일에서 기본 부하 성능 테스트 CI/CD 작업을 구성합니다. 템플릿을 포함하고 CI/CD 변수로 구성해야 합니다:include: template: Verify/Load-Performance-Testing.gitlab-ci.yml load_performance: variables: K6_TEST_FILE: <PROJECT 내 K6 테스트 파일 경로>
위 예제에서는 CI/CD 파이프라인에서 load_performance
작업을 생성하여 k6 테스트를 실행합니다.
참고:
Kubernetes 설정의 경우 다른 템플릿을 사용해야 합니다: Jobs/Load-Performance-Testing.gitlab-ci.yml
.
k6는 다양한 옵션을 가지고 있어 테스트를 어떻게 실행할지를 설정할 수 있습니다(예: RPS로 실행할 처리량, 테스트의 실행 시간 등). 거의 모든 옵션은 테스트 자체에서 구성할 수 있지만, 콘솔 명령줄 옵션을 K6_OPTIONS
변수를 통해 전달할 수도 있습니다.
예를 들어, 다음과 같이 CLI 옵션으로 테스트의 기간을 재정의할 수 있습니다:
include:
template: Verify/Load-Performance-Testing.gitlab-ci.yml
load_performance:
variables:
K6_TEST_FILE: <PROJECT 내 K6 테스트 파일 경로>
K6_OPTIONS: '--duration 30s'
GitLab은 k6의 결과를 summary export를 통해 부하 성능 보고서 artifacts로 저장해야만 주요 성능 메트릭을 병합 요청 위젯에서 표시합니다. 항상 최신의 부하 성능 artifacts를 사용하며, 테스트에서의 summary 값을 활용합니다.
만약 GitLab Pages가 활성화되어 있다면, 보고서를 브라우저에서 직접 확인할 수 있습니다.
리뷰 앱에서의 로드 성능 테스트
위의 CI/CD YAML 구성 예제는 정적 환경에 대한 테스트에 사용되지만, 일부 추가 단계를 추가하여 리뷰 앱 또는 동적 환경과 함께 작동하도록 확장할 수 있습니다.
가장 좋은 방법은 동적 URL을 .env
파일에 job artifact로 저장한 다음, 우리가 제공한 K6_DOCKER_OPTIONS
라는 사용자 정의 CI/CD 변수를 사용하여 k6 Docker 컨테이너를 구성하는 것입니다. 이를 통해 k6는 이후 표준 JavaScript를 사용하여 스크립트에서 .env
파일의 환경 변수를 사용할 수 있습니다. 예를 들어: http.get(`${__ENV.ENVIRONMENT_URL}`)
.
예를 들어:
-
리뷰
작업에서:- 동적 URL을 캡처하고
.env
파일에 저장합니다. 예:echo "ENVIRONMENT_URL=$CI_ENVIRONMENT_URL" >> review.env
. -
.env
파일을 작업 artifact로 설정.
- 동적 URL을 캡처하고
-
로드 성능
작업에서:- 리뷰 작업에 의존하도록 설정하여 환경 파일을 상속받습니다.
-
Docker CLI 옵션인 환경 파일에 대한
K6_DOCKER_OPTIONS
변수를 설정합니다. 예:--env-file review.env
.
k6 테스트 스크립트를 환경 변수를 사용하도록 구성하세요.
당신의 .gitlab-ci.yml
파일은 다음과 유사할 수 있습니다:
stages:
- deploy
- performance
include:
template: Verify/Load-Performance-Testing.gitlab-ci.yml
review:
stage: deploy
environment:
name: review/$CI_COMMIT_REF_SLUG
url: http://$CI_ENVIRONMENT_SLUG.example.com
script:
- run_deploy_script
- echo "ENVIRONMENT_URL=$CI_ENVIRONMENT_URL" >> review.env
artifacts:
paths:
- review.env
rules:
- if: $CI_COMMIT_BRANCH # 변경하여 파이프라인 규칙을 일치시키거나, 필요한 경우 `only/except`를 사용합니다.
load_performance:
dependencies:
- review
variables:
K6_DOCKER_OPTIONS: '--env-file review.env'
rules:
- if: $CI_COMMIT_BRANCH # 변경하여 파이프라인 규칙을 일치시키거나, 필요한 경우 `only/except`를 사용합니다.