본문 바로가기

Back-end/Basic

성능, 부하, 스트레스 테스트

성능 테스트란

  • 시스템의 병목 지점을 찾기 위한 목적
  • 특정 부하에서 응답성 및 안정성 측면에서, 시스템이 어떻게 동작하는지 측정하기 위한 비기능 테스트
  • 확장성, 신뢰성 및 리소스 사용과 같은 시스템의 다른 품질 속성을 조사, 측정, 검증할 수 있음

 

성능 테스트 종류

  • 부하 테스트, 스트레스 테스트, 내구성 테스트 (Endurance/Soak Testing), 최고점 부하 테스트 (Spike Testing)

 

 

서비스의 속도를 결정하는 기준 Throughput Latency를 보면 알 수 있음

 

Throughput이란 시간당 처리량을 의미하며, TPS(Transaction Per Second), RPS(Request Per Second) 등으로 불리며, 
'1초에 처리하는 단위 작업의 수' 혹은 '1초에 처리하는 HTTP 요청 수' 등으로 해석 가능

서비스 성능의 지표

 

Latency 서버가 클라이언트로부터 요청을 받아서 응답을 보내주기까지 걸리는 시간을 의미

서비스가 작업을 얼마나 빠르게 처리할 수 있는지를 나타내는 성능 지표

영어 그대로 직역해보자면 서버가 클라이언트의 요청을 처리하는데 발생하는 지연 시간으로 생각해볼 수 있음

 

 

1. 성능 테스트 서비스가 목표하는 최대 사용자 수에 도달하기 위해 현재 성능을 파악하고, 개선하는 작업

2. 서비스의 성능을 알 수 있는 지표 Throughput Latency

3. 전체 서비스의 성능을 개선하기 위해서는 하위 시스템의 병목 구간, Critical Path를 찾아 개선하여 Throughput이 증가해야만 하고, 각 하위 시스템의 Latency를 줄여서 전체 서비스의 Latency를 줄여야 함

 

 

 

부하 테스트란?

  • 임계값 한계에 도달할 때까지 시스템의 부하를 지속적으로 꾸준히 증가시켜 시스템을 테스트하는 것
  • 성능 테스트의 하위 집합

 

부하 테스트의 목적

  • 버퍼 오버플로, 메모리 누수 및 잘못된 메모리 관리와 관련된 응용 프로그램의 결함을 노출함
  • 부하 테스팅의 결과로 발견되는 문제는 로드 밸런싱 문제, 대역폭 문제, 기존 시스템의 용량 등이 포함될 수 있음
  • 데이터베이스, 하드웨어, 네트워크 등의 응용 프로그램의 모든 구성 요소의 상한을 결정함
  • 미래에 예상되는 애플리케이션에 대한 부하를 관리할 수 있음

 

부하 테스트 도구

  • Jmeter
  • nGrind
  • Gatiling

 

모니터링 도구 - APM

  • Application Performance Management의 약자로, 응용 소프트웨어의 성능과 서비스 가용성을 모니터링하고 관리하는 도구

  • 종류
    - 제니퍼
    - Elastic APM
    - 와탭

    - PinPoint
      Java로 작성된 대규모 분산 시스템용 APM 도구
      Transaction 추적을 제공
      임계치를 설정하여, Event 발생 시 SMS 또는 Email을 통해 알림을 받음
      우아한 형제들, 네이버, NHN 등에서 사용중

 

부하 테스트 진행 순서

 

1. 주요 시나리오 테스트

- 주요 시나리오 선정 후 시나리오 별로 얼마나 견디는지 테스트

 

2. 트랜잭션별 단위 테스트

- 각 트랜잭션 별로 얼마나 견디는지 테스트

 

3. 주요 시나리오 가중치 테스트

- 각 시나리오의 가중치를 부여하여 얼마나 견디는지 테스트

4. 테스트 결과 공유

5. 개선 후 다시 테스트

6. 결과 분석

 

 

스트레스 테스트 할 때 주안점

  • 예상 TPS 보다 여유롭게 테스트
  • 기대 Latency를 만족할 때까지 테스트
  • Scale-out을 해도 성능이 늘지 않으면 병목을 의심

 

데민 3초 이내 통과

script 및 불필요한 로그 수정

 

 

참고:  https://scshim.tistory.com/442

https://hyuntaeknote.tistory.com/10

'Back-end > Basic' 카테고리의 다른 글

대용량 트래픽 처리 방법 - Scale Up VS Scale Out  (0) 2022.03.09
TCP 3, 4-way handshake  (0) 2022.03.07
SEDA(Staged Event-Driven Architecture)  (0) 2022.03.06
Kafka Streams API  (0) 2022.03.06
Cloud Native 란?  (0) 2022.03.06