DevOps/성능 테스트

부하 테스트 계획 및 도구

chanstory 2023. 3. 3. 15:50
반응형

 


부하 테스트 진행 전 서비스 수준 목표(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/

 

AWS 기반 웹 및 애플리케이션 서버 부하 테스트: A to Z | Amazon Web Services

사용자가 이용하고 있는 온라인 서비스로부터 예상치 못한 느려짐을 겪거나, 접속 불가로 인해 서비스 이용 조차 할 수 없다면, 서비스에 중요한 재방문율(Retention Rate)과 유료 전환율(Conversation R

aws.amazon.com

 

jmeter

- Apache JMeter는 Apache 소프트웨어 재단에서 개발한 오픈소스 성능테스트 도구
- 무료이며 사용자가 작성한 테스트 스크립트를 쉽게 재사용할 수 있음

- 다양한 플러그인과 확장 기능이 존재, 사용자 커뮤니티가 활발
- 부하테스트에 집중되어 있고 과도한 부하테스트 시뮬레이션 가능
- UI 제공 가능 / 내 컴퓨터에 손상 안감

- VUS 다수 생성 (가상 유저)

- 단점으로는 복잡한 테스트 시나리오나 대규모 시스템에서는 부적합

 

loadview

- 클라우드 기반의 성능 테스트 도구

- 대규모 시스템에서도 안정적인 결과 제공

- 사용자 시나리오 생성 및 관리 간편

- JMeter와 비슷하지만 유료임

- 시각화 서비스가 좋음

- 오류를 잘잡아냄

- 보안을 알아서 설정함

- 빠른 시간 내에 통계를 잘냄

 

LoadNinja

- LoadNinja는 SmarBear 소프트웨어에서 개발한 클라우드 기반 성능 테스트 도구

- 녹화 기능을 이용해 브라우저 레벨에서 스크립트를 생성하여 사용자 시나리오를 생성 할 수 있음

- 분산 테스트와 지속적ㅈ인 성능 모니터링 제공

- 브라우저 기반의 테스트로 실제 사용자가 직면할 수 있는 성능 문제 확인 가능

 

* 주목 받고 있는 부하 테스트 도구 - 무료로 사용할 수 있는 CLI 도구를 제공하지만, 추가 기능을 SaaS 형태로 제공

k6

- 부하테스트 및 성능 테스트를 위한 오픈소스 도구

- 분산 시스템과 마이크로서비스 아키텍처에서의 성능을 검증

- 부하 시뮬레이션할 수 있음

- 실시간으로 모니터링 결과를 분석할 수 있는 그래프 및 통계도 제공

 

k6 참고링크

https://k6.io/

 

Load testing for engineering teams | Grafana k6

k6 is an open-source tool and cloud service that makes load testing easy for developers and QA engineers.

k6.io

 

Arillery.io

- 부하테스트를 위한 오픈소스 도구

- 사용자 친화적인 DSL 지원

- 클라우드 기반 테스트 지원

- 대규모 분산 테스트 수행

- 사용자 지정 가능한 메트릭 수집

- 지표를 대시보드에 시각화하여 테스트 결과 쉽게 확인 가능

 

Arillery.io 참고링크

https://www.artillery.io/

 

Artillery.io | Load & Smoke Testing

Keep production reliable, customers happy, and pagers silent.

www.artillery.io

 

 

반응형