부하 테스트 진행 전 서비스 수준 목표(SLO) 설정
Latency에 중점을 둔 SLO 예시
- GET 호출의 90%는 1ms 이내에 완료해야 한다.
- GET 호출의 99%는 10ms 이내에 완료해야 한다.
- GET 호출의 99.9%는 100ms 이내에 완료해야 한다.
Throughput에 중점을 둔 SLO 예시 (1일 기준으로의 RPS 계산)
- 순간적으로 요청이 치솟는 피크(peak) 트래픽에서의 처리량을 바탕으로 함
- DAU(Daily Active User : 1일 접속자 수 ) : 5만명
- 1명당 편균 접속 횟수 : 20회
- 1일 평균 접속 수에 대한 피크 트래픽 배율 : 3배 (보통 평균의 2~3배를 곱함)
- 안전 계수 (얼마만큼 넉넉하게 프로비저닝 할 것인가) : 3배
하루 = 86,400초
50000 x 20 / 86400 x 3 x 3 = 104 RPS (약 100 RPS)
따라서 서비스는, 100 RPS 를 달성해야 함
성능테스트 메트릭
1. CPU 용량의 백분율 - 사용된 CPU
2. 메모리 사용량 - 작업 요청 처리하는 동안 컴퓨터 기본 메모리 사용량 측정
3. 요청 시간 - 요청 전송 시간 + 요청 시간 + 응답 시간 => 총 시간
4. 평균 로드 시간
5. 처리량
6. 평균 대기 시간 - Latency + Wait time(시스템이 요청을처리하는데 걸리는 대기시간)
=> Latency가 낮으면 사용자가 요청을 빠르게 처리할 수 있고 Wait time이 낮으면 시스템 요청이 빨리 처리됨)
=> wait time 은 Latency 와 다르게, 시스템의 내부 작업 시간 등을 포함하여 측정
7. 대역폭
8. 초당 요청 수
9. 에러율
10. 트랜잭션
부하 테스트 전 고려되어야 할 점
- 충분한 테스트용 서버 자원 확보
- 최대의 트래픽을생성하여 테스트 하기 위해 충분한 서버 자원 요구 / 부족할 경우 적절한 테스트 불가 - 테스트 시, 블랙박스 혹은 격리된 환경 제어
- 부하 테스트는 많은 요청과 패킷을 생성하기 때문에 사내 인프라의 많은 부분을 포화 상태로 만들기 쉬움 - 글로벌 기반의 부하 생성
- 전 세계 각 지역에서 부하를 생성하여 테스트 하여야 실제 사용 패턴에 가까운 시나리오가 됨 - 높은 비용과 불규칙적인 사용성에 대한 주의
- 격리된 환경 및 여러 리전을커버 하기 위한 테스트 환경은 높은 비용을 요구함
- 자원을 효율적으로 활용하지 못하기 때문에 불필요한 비용 발생 - 높은 아키텍처 복잡성에 대한 주의
- 상기 언급된 부분을 고려하여 부하 테스트 환경 구성 시 높은 복잡성이 요구됨
부하 테스트 단계
- 비결합(Loosely Coupled) 된 개별 컴포넌트에 대한 부하 테스트
- 각 컴포넌트 별 병목 현상 빠르게 발견 및 수정 가능 - 내부 서비스에 대한 부하 테스트
- 로그 기록 서비스와 같이 높은 처리량이 요구되는 서비스나 결제 서비스 등 중요한 내부 서비스를 대상으로 테스트 진행 - 외부 서비스에 대한 부하 테스트
- 소셜 서비스나 Google 등 플랫폼에 대한 서비스들 또는 푸시 알림 서비스 등의 외부 서비스를 대상으로 테스트 진행 - 전체 스택에 대해 부하 테스트
- 개별 컴포넌트 테스트 완료 후 컴포넌트 간의 상호작용을 알기 위해 처음부터 끝까지 전체 스택에 대해 테스트 진행
* 소프트웨어 개발주기
분석 -> 설계 -> 구현 -> 테스트 -> 이행
테스트 요구사항 정의 -> 성능 테스트 계획 -> 성능 테스트 설계 -> 성능 테스트 구현 -> 성능 테스트 수행 -> 성능 테스트 종료
부하 테스트 종류
- Load Testing
- 실제 사용자 수와 유사한 양의 사용자를 시스템에 동시에 접속시켜서 시스템의 성능과 안정성을 테스트
- 얼만큼의 트래픽을 처리할 수 있는지, 최대 부하에서도 잘 동작하는지, 응답 시간이 얼마나 걸리는지 등 확인 - Stress Testing
- 과도한 부하를 시스템에 가해 시스템이 어떻게 동작하는지를 테스트
- 이를 통해 시스템이 어디까지 버틸 수 있는지, 과부하가 걸렸을때 어떻게 대처하는지 확인
- ex) 2분 정도에 100개 요청 -> 300개 요청 -> 500개 요청 천천히 요청 수 를 늘리다가 CPU 및 메모리 상태 관찰
-> 요청 수 를 0개로 다시 내렸을때의 리소스 변화 관찰 - Capacity Testing
- 시스템 용량 테스트
- 시스템이 처리할 수 있는 최대 부하를 파악 및 용량 증설 및 하드웨어 확장성 예측
- Load Testing는 시스템이 어떤 부하를 견딜 수 있는지 확인하는 것이며 Capacity Testing은 시스템이 처리할 수 있는
최대 부하를 파악 하는 것 - Volume Testing
- 시스템이 처리할 수 있는 대량의 데이터를 테스트 하는 것
- 다양한 양의 데이터를 처리할 수 있는지 처리 속도가 어떤지, 데이터 무결성이 유지되는지 등을 확인 - Soak Testing
- 장기간 동작하면서 안정성을 유지할 수 있는지 테스트
- 시스템이 장기간 동작 하면서 발생할 수 있는 메모리 누수, 쓰레드 누수, 성능 저하 등의 문제를 발견할 수 있음
- 시스템의 안정성과 성능 보장을 위해 리소스, 메모리, CPU 사용량 등 측정
- 일회성이 아닌 주기적으로 테스트를 하여야함 - Scalability Testing
- 시스템이 증가하는 사용자나 트래픽에 대해 어떤 성능이 보이는지를 테스트 하는 것
- 최대 사용자 수나 최대 트래픽에 대한 테스트
- 일정 수의 사용자나 트래픽에 대한 시스템 성능을 측정하고, 이를 증가시켜가며 시스템의 한계 파악
성능 테스트 메트릭
클라이언트 사이드 메트릭
1. TTFB - Time To First Byte (첫번째 바이트가 처리되는데 까지의 시간)
2. 페이지 크기 / 무게 (특정 웹페이지 크기)
3. 상호 작용할 시간
4. 렌더링 시간 (로딩 시간)
5. 속도 지수 (홈페이지가 열리는 시간)
6. 로드 시간 (특정 테마를 접속했을 때 걸리는 시간)
7. 페이로드
서버 사이드 메트릭
1. Requests per Second (RPS)
2. Uptime
3. Error rate
4. 스레드 수
5. 최고 응답 시간
6. 처리량
7. 대역폭
모바일 앱 메트릭
1. 앱 설치 시간
2. 앱 실행 시간
3. 앱 백그라운드 처리
4. 클라이언트측 리소스 사용량
5. 응답 시간
6. 평균 로드 시간
7. 대역폭 및 네트워크 호환성
8. 동시 사용자
9. 초당 요청
부하테스트 시 유용한 팁
- 로그 기록과 확인
- 적절한 인스턴스의 선택
- 비용최소화
- 다양한 도구와 서비스의 복합적 활용
부하 테스트 도구
* AWS에서 소개하는 부하테스트 도구
참고링크
https://aws.amazon.com/ko/blogs/korea/how-to-loading-test-based-on-aws/
jmeter
- Apache JMeter는 Apache 소프트웨어 재단에서 개발한 오픈소스 성능테스트 도구
- 무료이며 사용자가 작성한 테스트 스크립트를 쉽게 재사용할 수 있음
- 다양한 플러그인과 확장 기능이 존재, 사용자 커뮤니티가 활발
- 부하테스트에 집중되어 있고 과도한 부하테스트 시뮬레이션 가능
- UI 제공 가능 / 내 컴퓨터에 손상 안감
- VUS 다수 생성 (가상 유저)
- 단점으로는 복잡한 테스트 시나리오나 대규모 시스템에서는 부적합
loadview
- 클라우드 기반의 성능 테스트 도구
- 대규모 시스템에서도 안정적인 결과 제공
- 사용자 시나리오 생성 및 관리 간편
- JMeter와 비슷하지만 유료임
- 시각화 서비스가 좋음
- 오류를 잘잡아냄
- 보안을 알아서 설정함
- 빠른 시간 내에 통계를 잘냄
LoadNinja
- LoadNinja는 SmarBear 소프트웨어에서 개발한 클라우드 기반 성능 테스트 도구
- 녹화 기능을 이용해 브라우저 레벨에서 스크립트를 생성하여 사용자 시나리오를 생성 할 수 있음
- 분산 테스트와 지속적ㅈ인 성능 모니터링 제공
- 브라우저 기반의 테스트로 실제 사용자가 직면할 수 있는 성능 문제 확인 가능
* 주목 받고 있는 부하 테스트 도구 - 무료로 사용할 수 있는 CLI 도구를 제공하지만, 추가 기능을 SaaS 형태로 제공
k6
- 부하테스트 및 성능 테스트를 위한 오픈소스 도구
- 분산 시스템과 마이크로서비스 아키텍처에서의 성능을 검증
- 부하 시뮬레이션할 수 있음
- 실시간으로 모니터링 결과를 분석할 수 있는 그래프 및 통계도 제공
k6 참고링크
Arillery.io
- 부하테스트를 위한 오픈소스 도구
- 사용자 친화적인 DSL 지원
- 클라우드 기반 테스트 지원
- 대규모 분산 테스트 수행
- 사용자 지정 가능한 메트릭 수집
- 지표를 대시보드에 시각화하여 테스트 결과 쉽게 확인 가능
Arillery.io 참고링크
'DevOps > 성능 테스트' 카테고리의 다른 글
병목현상이란? (원인과 대책) (0) | 2023.03.03 |
---|---|
가용성 및 확장성 평가 / 부하 테스트 (Throughtput) (0) | 2023.03.03 |