역사적으로 소프트웨어의 성능은 주요 기능 부분 후에 점검되었습니다 — 개발자들은 수동으로 스크립트를 실행하거나 JMeter와 같은 도구를 사용하여 측정치를 수집했습니다. DevOps 및 CI/CD로의 대규모 전환에 따라 이러한 프로세스를 자동화하고 각 제공 단계에서 메트릭을 수집할 필요성이 생겼습니다.
문제는 부하 자동화가 단순히 준비된 테스트를 실행하는 것이 아니라 부하 시나리오의 세밀한 조정, 사용자 프로필 재현, 실제 네트워크 에뮬레이션, 지연 시간 고려, 제한된 테스트 장비 등으로 인해 복잡해진다는 것입니다.
현대적인 해결책은 전문 도구(Gatling, Locust, k6 등)를 도입하고, 사용자 프로필의 매개변수를 사용한 시나리오를 만들고, CI 파이프라인에 성능 테스트를 통합하며, 메트릭 수집 및 분석 자동화, 성능 저하 시 경고를 설정하는 것입니다.
주요 특징:
"부하 테스트"의 자동화는 오직 프로덕션에서만 허용된다는 것이 사실인가요?
아니요. 성능 및 스트레스 자동 테스트는 전용 스테이지 애플리케이션/스탠드에서 수행할 수 있어 SLA를 위반하지 않습니다. 이러한 자동화는 오히려 프로덕션에 배포되기 전에 하는 것이 바람직합니다.
부하 테스트가 통과하면 실제 사용자 경험에 대한 확신을 가질 수 있나요?
아니요 — 자동 테스트는 평균적인 모습만을 제공합니다. 실제 사용자의 행동은 네트워크 조건, 사용되는 플랫폼 및 기타 요인에 따라 다를 수 있으며, 이는 일대일로 에뮬레이션하기 어렵습니다.
응답 시간의 평균값만을 고려해야 하나요?
아니요. 백분위(예: 95, 99)를 고려하는 것이 극히 중요합니다. 평균값은 이상값 때문에 왜곡될 수 있으며, 꼬리 값은 UX에 가장 큰 영향을 미치는 경우가 많습니다.
한 회사는 시스템 로그인에 대해만 성능 자동 테스트를 도입했습니다: 스크립트는 1000번 로그인하고 평균 응답 시간을 분석했으며 문제를 해결했다고 판단했습니다. 그러나 첫 번째 실제 실행에서 대규모 타임아웃이 발생했습니다 — 병렬의 "무거운" 비즈니스 운영이 고려되지 않았고 API는 부하로 인해 중단되었습니다.
장점:
단점:
다른 팀에서는 모든 부하 프로필을 프로덕션 모니터링을 기반으로 작성하였고, 개별 스크립트는 다양한 장치와 네트워크에서 피크 활동을 에뮬레이션했습니다. 모든 결과는 자동으로 기준과 비교되며, 5% 이상의 편차가 경고를 유발하고 릴리스를 중단하게 했습니다.
장점:
단점: