Web/Web

[Web] 서버 성능 테스트 종류와 도구 및 대규모 트래픽 상황 대비

728x90

 

 

 

0. 성능 테스트의 필요성

 

- 서버 개발을 완료하고 오류 없이 동작한다고 해도, 실제 서비스에서는 많은 사람들이 동시에 서버에 접속하기 때문에 서버에 부하 발생

    - 이 과정에서 여러 문제점이 발견될 수 있다

- 또한, 서비스가 운영되는 과정에서 서비스 트래픽이 성장세에 있을 때 추가적인 자원이 필요할 수도 있다

- 서버 개발자는 이러한 문제점을 사전에 방지하기 위해 성능 테스트가 필요하다

 

 

 

1. 성능 테스트 (Performance Test)

시스템 구성 요소가 특정 상황에서 어떤 성능을 보이는지 확인하기 위해 수행되는 테스트
제품의 리소스 사용, 확장성 및 안정성을 검증할 수 있다

- 성공적인 성능 테스트는 DB, 네트워크, SW, HW 등과 관련된 대부분의 성능 문제를 예측한다

- 성능 테스트의 종류에는 부하 / 스트레스 / 스파이크 / 볼륨 / 내구성 / 확장성 테스트가 존재한다

 

- 주요 용어

    1. Users : 서버를 사용중인 사람

       Concurrent User : 언제든 부하를 줄 수 있는 사용자

       Active User : 실제 서버에 부하를 주고 있는 사용자

    2. TPS (Transaction Per Second) : 일정 시간 동안 얼마나 많은 요청을 처리 가능한지

       성능 테스트의 주요 지표로 활용

    3. Time : 서비스를 사용하는 시간

       성능 테스트의 대상 구간 : 클라이언트가 요청을 보내고 응답을 받는 시점까지의 시간

 

 

 

 

2. 성능 테스트의 종류

많이 수행하는 5가지 테스트를 알아보자!

1. 부하 테스트 (Load Test) : 특정 부하를 제한 시간동안 부여 (일반적으로 1시간 기준)

2. 지속성 테스트 (Endurance Test) : 특정 부하를 오랜 시간동안 부여 (일반적으로 8시간 이상)

3. 스트레스 테스트 (Stress Test) : 일반적인 부하 테스트보다 훨씬 높은 부하 상황에서의 시스템 성능 검증

        - 시스템 장애 발생 여부, 사용 가능 상태로 유지되는지 여부, 부하가 정상 수준으로 돌아갈 때 우아하게(gracyfully) 복구되는지 

4. 최고 부하 테스트 (Spike Test) : 일순간 감당할 수 없는 부하를 주고, 웹 애플리케이션이 죽지 않고 동작하고 회복 가능한지 확인

5. 중단점 테스트 (BreakPoint Test) : 동시 단말 사용자 수를 점진적으로 증가시켜, 시스템 장애 시점을 결정

 

 

 

 

3. 성능 테스트 도구

성능 테스트 도구는 아주 많지만, 그 중 몇 가지를 소개한다

 

3.1. AB (Apach Bench)

Apache HTTP server Benchmarking tool

- Command Line을 통해 쉽고 간단하게 성능 테스트 가능한 도구

   쿠키, 헤더 정보 등이 복잡한 페이지보다는 간단한 API 호출 테스트에 적합

 

3.2. JMeter

- Apache에서 만든 순수 Java 오픈소스 성능 테스트 도구

   전세계적으로 많은 사람들이 사용

- HTTP, HTTPS, FTP, JDBC 등 다양한 프로토콜 및 서버 테스트 가능

- 다양한 외부 플러그인을 사용하여 확장 가능

- 테스트 계획을 실행하고 결과를 분석할 수 있는 GUI 제공

 

3.3. nGrinder

- 네이버 오픈소스 프로젝트

   우리나라에서 많이 활성화

- Jython, Groovy 스크립트를 사용하여 테스트 시나리오 작성 가능

- 프로젝트 관리, 모니터링, 결과 및 보고서 관리를 위한 웹 기반 인터페이스 제공

 

 

 

4. 대규모 트래픽 상황

대규모 트래픽 상황을 대비하여 테스트를 진행하고 문제를 해결하며, 이후에도 모니터링할 수 있는 도구들에 대해 알아보자!

 

4.1. 대규모 트래픽 상황을 대비하는 방법

- 서버 성능을 테스트할 도구 / 방법론을 정의하고 테스트하기

- 부하가 걸리는 지점 / 문제 식별하기

   가장 많은 경우 : DB (ex. 트랜잭션을 처리하거나 테이블에 락을 잡거나 변경 시의 Alter 문제)

- 문제 상황에 따라 해결 방법 적용하기 (캐싱, SQL 튜닝, 서버 증설 등)

    • 해결 방법 예시

        ‣ 서버의 수평적 확장과 로드 밸런싱

        ‣ 캐시 사용

        ‣ CDN 사용 →콘텐츠를 여러 리전에 분산하여 물리적 거리 줄임 → 응답 속도 향상

        ‣ 데이터 베이스 최적화

        ‣ DNS 캐싱 서버 사용

        ‣ 코드 최적화

        ‣ 서버의 수직적 확장 (CPU 또는 RAM 추가, 서버 업그레이드 등)

        ‣ 네트워크 대역폭 늘리기

    • ex. 병목지점이 DB인 경우

            ‣ SQL 튜닝, DB버전 또는 설정 변경

           자주 접근하는 데이터를 메모리상에 캐싱하여 DB 자원 효율적 사용

           서버자원 늘려 Scale Up / Scal Out

 

 

4.2. 유용한 모니터링 툴

- 프로메테우스 (Prometheus) : 메트릭 기반의 오픈소스 모니터링 시스템

    메트릭(Metrixc) : 서버의 상태를 측정한 항목이나 지표 (CPU 사용률, 메모리 사용률, 트래픽 등)

    • 데이터와 메트릭을 저장하고 애플리케이션의 성능 및 상태 모니터링 제공

   쿠버네티스 클러스터 및 Docker 컨테이너들을 쉽게 모니터링 가능

       현재 쿠버네티스 상에서 가장 많이 사용

   이해하기 쉬운 PromQL 쿼리 언어를 사용하여 결과와 Ruleset 정의 가능

 

- 그라파나 (Grafana) : 오픈소스 메트릭 데이터 시각화 도구

   프로메테우스는 메트릭을 저장하는데에 특화되어 있지만 시각화에는 특화 X

        → 프로메테우스 DB에 쿼리를 날려 데이터를 가져와 시각화하는 툴 : Grafana!

 

- 엘라스틱 서치 (ElasticSearch) : 분산형 RESTful 검색 및 분석 엔진

   텍스트, 숫자, 정형 및 비정형 데이터 등 모든 유형의 데이터를 위한 무료 검색 및 분석 엔진

   빠른 속도, 확장성, 복원성, 정형 / 비정형 데이터 모두 수용가능한 유연성

       빠른 데이터 확인이 필요한 인프라 모니터링, 보안-실시간 탐지, 마케팅 분석 등 분야에 활용

   실시간 검색 / 분석 기능 제공하고, 분산환경의 로그를 통합으로 수집하여 통합 저장소의 역할 수행 가능

       로그 데이터 분석을 지원할 수 있다 → ELK(ElasticSearch, LogStack, Kibana) 구성

 

 

 

 

 

 

📌 References

https://choibulldog.tistory.com/61

https://loosie.tistory.com/822

https://youtu.be/b4Ro_2cK9V8?si=UaYun3JO-sSkQZDr

https://velog.io/@hyunshoon/Monitoring-Prometheus-총-정리#prometheus

https://lordofkangs.tistory.com/329

https://jeounpar.tistory.com/29

 

 

 

 

 

 

728x90