2021-nolto icon indicating copy to clipboard operation
2021-nolto copied to clipboard

[BE] k6를 사용한 성능 테스트를 수행

Open bosl95 opened this issue 3 years ago • 0 comments

기능 요구 사항

성능 테스트 도구 비교

여러 성능 테스트가 있지만 이 중에서는 Java 플랫폼 응용 프로그램인 JMeter와 K6 사이에서 어떤 장점이 있는 지 알아보자.

JMeter 장점

  • Jmeter는 GUI를 제공
  • 코딩 경험이 많지 않으면 Jmeter
  • Jmeter는 1988년에출시, 많은 프로토콜을 제공한다.
  • k6는 2017년 출시하였다. 지원되는 프로토콜은 아래와 같다.
  • Jmeter는 출시한 지 오래되어 k6에 비해 문서가 많다.
  • Jmeter는 테스트에 대한 리포트를 기본적으로 제공한다.
  • 램프업 패턴(초기 서비스의 사용율이 비주기적으로 등락하는 현상)에 대한 시뮬레이션이 가능하다

K6의 장점

  • 어려운 설정 없이 바로 설치하여 사용할 수 있다.
    • Jmeter는 java의 sdk, jdk 등의 버전을 확인하며 설치해야하고 복잡
  • k6는 플러그인을 따로 설치할 필요 없이 내장되어 있다.
  • 성능이 향상되어있기 때문에 인프라에 대한 비용이 절감
    • J는 1스레드 1Vuser ⇒ 굉장히 구식 효율적 X
    • k는 이것에 대한 옵티마이저를 함. (스케쥴링을 하면서)
    • k는 10만명 가까이 vUser를 생성할 수 있음
  • 협업에 k6가 좋음.
    • jmeter는 기본적으로 UI를 통한 테스트 프로그램의 작성이 가능. 따라서 수정을 하려면 jmx파일을 복사본으로 가져와 수정해야하는데, 코드 자체도 굉장히 구식이고 파일을 여는 데도 시간이 오래 걸림
    • 반면 k6는 js를 작성해서 사용하기 때문에 굉장히 쉽게 접근이 가능하고 수정할 수 있다.
  • k6는 목표 지향적이다.
    • threshold를 설정해 테스트의 레벨을 정할 수 있음

출처 : https://youtu.be/noZppBruOSY

Jmeter는 이럴 때 사용한다.

  • 여러 다양한 프로토콜을 사용하는 경우
  • 시나리오를 기록할 필요가 있는 경우
  • 모든 테스트에 대한 전체적인 시나리오가 요구되는 경우
  • UI를 선호하거나 자스/yml/json을 잘 모르는 경우

K6는 이럴 때 사용한다.

  • 개발친화적인 CLI를 사용하는 경우
  • 세션을 기록하기 위해 har 파일을 사용하는 경우
  • 임계점을 설정하고 확인하는 경우 (목표 기반, 편하게 자동화하는 로드 테스트)
  • 좋은 문서화 제공 (https://k6.io/docs/javascript-api/)
  • 자바스크립트를 통한 경량화된 사용
  • nodejs, 브라우저를 실행하지 않음

출처 : https://azevedorafaela.com/2020/07/06/load-tests-jmeter-vs-k6/

cloud watch 적용기

  • was ec2에 역할 추가

image

  • cloud watch agent 패키지 설치
wget https://s3.amazonaws.com/amazoncloudwatch-agent/debian/amd64/latest/amazon-cloudwatch-agent.deb
sudo dpkg -i amazon-cloudwatch-agent.deb
  • /opt/aws/amazon-cloudwatch-agent/etc/statsd.json 생성
{
    "metrics": {
        "namespace": "k6",
        "metrics_collected": {
            "statsd": {
                "service_address": ":8125",
                "metrics_collection_interval": 5,
                "metrics_aggregation_interval": 0
            }
        }
    }
}
  • cloudwatch agent 실행
sudo amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:/opt/aws/amazon-cloudwatch-agent/etc/statsd.json
  • cloudwatch agent 상태 확인
amazon-cloudwatch-agent-ctl -a status
  • k6 실행
K6_STATSD_ENABLE_TAGS=true k6 run --out statsd script.js

image

  • checks — 성공적인 검사 비율
  • data_received — 수신 된 데이터의 양
  • data_sent — 전송 된 데이터 양
  • http_req_blocked — 요청을 시작하기 전에 사용 가능한 TCP 연결을 기다리는 데 소요 된 시간
  • http_req_connecting — TCP 연결 설정에 소요 된 시간
  • http_req_duration— 요청에 대한 총 시간. http_req_sendinghttp_req_waiting+를 기준으로 계산됩니다.http_req_receiving.
  • http_req_failed - 데이터 수신에 실패한 정도인듯?
  • http_req_receiving — 데이터 수신에 소요 된 시간
  • http_req_sending — 데이터 전송에 소요 된 시간
  • http_req_tls_handshaking — TLS 핸드 쉐이킹에 소요 된 시간
  • http_req_waiting — 원격 호스트의 응답을 기다리는 데 소요 된 시간
  • http_reqs — k6에 의해 생성 된 총 요청
  • iteration_duration— default함수 를 실행하는 데 걸린 총 시간
  • iterations— default함수가 호출 된 총 횟수
  • vus — 활성 가상 사용자 수
  • vus_max — 테스트에 할당 된 최대 가상 사용자
  • https://ichi.pro/ko/k6-sogae-api-buha-teseuteu-dogu-21071336538749

부하테스트와 스트레스 테스트

성능 테스트

  • 실제 트래픽 상황에서의 정상 동작
  • 기존 시스템 대비 BenchMarking

부하 테스트

  • 리소스 병목 탐색, 어플리케이션 버그 탐색
  • 이벤트 상황과 같은 순간 트래픽 최대치, 한계치를 탐색
  • 신규 스펙 장비에서 MYSQL 설정 최적화 탐색

스트레스 테스트

  • 장기간 부하 발생에 대한 한계치를 탐색, 예외 동작 상황 확인
  • Graceful Shutdown 정상 동작 확인
  • 데이터베이스 failover 상황, 자동 복구, 예외 동작 상황 확인
  • 외부 요인(PG사)의 밀릴, 예외 상황 동작 확인

프로젝트 부하 테스트 살펴보기

bosl95 avatar Oct 25 '21 01:10 bosl95