성능 테스트

둥냥둥냥둥·2024년 1월 12일
0
post-thumbnail

성능 테스트란

성능 테스트는 소프트웨어 시스템이나 애플리케이션의 성능을 측정하고 평가하기 위한 활동이며, 이러한 테스트는 시스템이 특정 작업을 수행하는 데 걸리는 시간, 응답 시간, 처리량, 확장성 등과 같은 성능 측정 지표를 확인하여 시스템의 강건성, 안정성 및 사용자 경험을 평가한다. 성능 테스트는 시스템의 부하 처리 능력, 안정성, 응답 속도 등을 검증하는 데 사용한다.

응답 시간 확인

  • 시스템이 특정 작업을 수행하는 데 걸리는 시간을 측정하여 사용자 경험을 개선하고 시스템이 기대치를 충족하는지 확인.

부하 처리 능력 확인

  • 시스템이 일정 부하 아래에서 얼마나 잘 동작하는지를 확인하고, 최대 부하에서도 안정적으로 동작하는지 평가.

확장성 평가

  • 시스템이 사용자 수나 데이터 양이 증가함에 따라 어떻게 확장되는지 평가하여 시스템이 성장에 적절히 대응할 수 있는지 확인.

안정성 및 오류 관리

  • 시스템이 부하나 스트레스에 노출될 때 안정성을 평가하고, 오류가 발생했을 때 적절하게 처리하는지 확인.

자원 사용량 분석

  • 시스템이 실행 중에 어떤 자원(메모리, CPU, 네트워크 등)을 사용하는지 확인하여 효율성을 평가.


주요 테스트 종류

부하 테스트 (Load Test)

  • 시스템이 얼마만큼의 부하를 견뎌낼 수 있는지를 테스트
  • 낮은 수준의 부하부터 높은 수준의 부하까지
    트래픽을 증가시키며 한계점 측정 및 튜닝을 통한 임계치를 향상을 목표

스트레스 테스트 (Stress Test)

  • 예상 부하보다 더 많은 부하 상황에서
    얼마나 안정적으로 시스템이 동작하느냐 확인
  • 설정 오류나 메모리 및 자원의 누수 확인

주요 실행 시점

  • 배포 이전 시스템 평가 시
  • 자원 누수 재현 필요시
  • 연말 성과 평가 시즌


성능 테스트 용어

TPS

  • 초당 처리할 수 있는 트랜잭션의 수를 나타내는 측정 단위
  • 트랜잭션은 시스템이나 애플리케이션에서 수행되는 하나의 작업 또는 요청
  • 어떤 동작을 하나의 트랜잭션으로 정의하느냐는 시스템이나 테스트 목적에 따라 다를 수 있다
  • 특정 성능 테스트 도구에서는 RPS라는 용어를 사용

Average

  • 트랜잭션/요청들의 평균 응답 시간
  • 시스템이나 애플리케이션의 성능을 평가할 때 응답 시간이 중요한 지표 중 하나

Vuser

  • 성능 테스트를 수행할 때 사용하는 동시 수행 가상 사용자
  • 동기 호출 기반의 테스트 도구에서는 쓰레드의 개수와 대응

Ramp Up

  • 점점 더 vuser 개수를 늘려가는 것을 의미

Saturation Point

  • 성능 테스트 중에 시스템이나 애플리케이션의 성능이 더 이상 향상되지 않는 지점

계산식
TPS = 동시 사용자수 (vuser개수) / 평균 응답시간
사용자 인터렉션이 있는 경우, 평균 응답 시가에 thinking tim 을 넣기도 하나, BE 프로젝트는 대부분 미고려


중앙 집중 vs 분산 성능 테스트기

중앙 집중 성능 테스트

단일 컨트롤러
중앙 집중 성능 테스트에서는 일반적으로 테스트를 제어하는 단일 컨트롤러가 존재합니다. 이 컨트롤러가 테스트 시나리오를 관리하고 가상 사용자의 동작을 제어한다.

집중된 리소스
테스트의 제어와 결과 수집이 중앙화되어 있기 때문에 테스트 실행에 필요한 모든 리소스가 중앙 서버에 집중된다.

간편한 관리
단일 컨트롤러를 통해 쉽게 테스트를 관리하고 제어할 수 있다.

분산 성능 테스트

분산된 에이전트
분산 성능 테스트에서는 테스트를 수행하는 데에 여러 에이전트가 분산되어 작업합니다. 각 에이전트는 독립적으로 작동하며, 테스트 중에 특정 부분을 책임지거나 여러 부분을 동시에 수행할 수 있다.

리소스 효율성
분산 성능 테스트는 여러 머신을 활용하여 테스트를 분담하므로, 리소스를 효율적으로 활용할 수 있다.

더 높은 확장성
대규모의 테스트를 수행할 때 분산 성능 테스트는 더 높은 확장성을 제공할 수 있다.


성능 테스트 진행 절차
1. 일단 1개의 개발 서버에서 Sanity
2. 성능 테스트 필요성 공유
3. 성능 테스트 방해 지점 파악 및 제외
4. 개발 서버에 대한 성능 테스트 실행 및 성능 확인
5. 운영 서버에 대한 성능 테스트 진행 계획 전체 공유
6. 운영 서버에 대한 성능 테스트 및 문제 해결


Locust 기반 성능 테스트 - 1

Locust 소개

Locust는 성능 테스트를 수행하기 위한 오픈 소스의 부하 테스트 도구이다. Python으로 작성되어 있으며, 코드를 통해 테스트 시나리오를 정의하고 실행할 수 있다. Locust는 특히 웹 애플리케이션의 성능 테스트에 많이 사용되지만, 다양한 종류의 시스템에 대한 성능 테스트에 적용할 수 있다.

Python 기반 성능 테스트 도구

  • https://locust.io/
  • 단순한 locustfile.py 하나만 작성하여 테스트 가능
  • 단독 / 분산 테스트 지원, Web UI지원
  • 효율적 부하 생성 (1대의 pc로도 충분히 많은 로드 생성)
  • 쉬운 API / 많은 레퍼런스

제약사항

  • python 학습이 필요함
  • 트랜잭션 정의 미지원/ master -> worker 간 스크립트share 미지원
설치 및 실행 방법

1. 사전에 python3 설치
    pip3 install locust

2. mac 이면 brew 로도 설치 가능, 그러나 로컬 디버깅 불가
   brew install locust

3. docker 로 실행. 단 localhost가 docker 내부로 제한 주의
   docker run -p 8089:8089 -v $PWD:/mnt/locust locustio/locust \
   -f/mnt/locust/locustfile.py


Locust Quick Start

1. locustfile.py 스크립트 작성

from locust import HttpUser, between, task

class MyUser(HttpUser):
    host="http://localhost:8080"

    @task
    def hello-world(self):
        self.client.get("/")
if__name__=="__name__":
  run_single_user(HelloWorldUser)

2.로컬 실행

python3 locustfile.py

3.locust 실행

locust

Locust cheat sheet


profile
Java 먹자

0개의 댓글