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

2024. 5. 3. 01:44·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
저작자표시 비영리 변경금지 (새창열림)

'Web > Web' 카테고리의 다른 글

[Web] 서블릿 필터 (Servlet Filter)  (1) 2024.02.01
[Web] JSP란? JSP 호출과정 / 기본객체 / EL / JSTL  (1) 2024.02.01
[Web] 서블릿(Servlet)이란? JSP와 MVC 패턴으로의 변화  (1) 2024.01.31
[Web] HTTP 응답 상태코드와 요청 메서드(GET / POST)  (0) 2024.01.31
[Web] WAS란? 동적 / 정적 콘텐츠, Tomcat 요청 처리 과정  (0) 2024.01.10
'Web/Web' 카테고리의 다른 글
  • [Web] 서블릿 필터 (Servlet Filter)
  • [Web] JSP란? JSP 호출과정 / 기본객체 / EL / JSTL
  • [Web] 서블릿(Servlet)이란? JSP와 MVC 패턴으로의 변화
  • [Web] HTTP 응답 상태코드와 요청 메서드(GET / POST)
s_ih_yun
s_ih_yun
  • s_ih_yun
    CODESYUN
    s_ih_yun
  • 전체
    오늘
    어제
    • 분류 전체보기 (326)
      • Computer Science (26)
        • Concept (3)
        • Algorithm (23)
      • Web (54)
        • Web (7)
        • Spring (14)
        • MyBatis (1)
        • AWS (7)
        • HTML & CSS (14)
        • JavaScript (11)
      • Programming (37)
        • C++ (3)
        • Java (6)
        • Python (10)
        • MySQL (1)
        • Oracle (2)
        • Git (15)
        • Dev Tools (0)
      • Infra˙ DevOps (1)
      • Baekjoon (104)
        • 단계별로 풀어보기 (78)
      • CodeUp (98)
        • Python 기초 100제 (98)
      • Programmers (2)
      • Books (3)
      • etc (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • Syun's Pages
  • 인기 글

  • 태그

    Programmers
    C
    HTML
    clean code
    oracle
    CodeUp 기초 100제
    단계별로 풀어보기
    c++
    Python
    JavaScript
    github
    myBatis
    web
    aws
    알고리즘
    자료구조
    VS Code
    git
    웹
    BOJ
    Cloud
    codeup
    Tistory
    CSS
    java
    SourceTree
    MySQL
    db
    spring
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
s_ih_yun
[Web] 서버 성능 테스트 종류와 도구 및 대규모 트래픽 상황 대비
상단으로

티스토리툴바