포스트

소프트웨어 성능 테스트의 개념과 종류


개요

이전 정보처리기사 시험을 준비할 때 서버의 성능 테스트에 관련해 공부한 적이 있다.

성능 테스트를 거치면 서버의 안정성, 속도, 확장성 등을 평가할 수 있는데, 이를 통해 애플리케이션 서버의 품질을 높일 수 있게 된다.


샐로그 프로젝트의 성능 테스트를 진행하기 전에 간단히 서버 성능 테스트의 개념과 종류에 대해 알고가고자 이 포스트를 작성한다.




웹 애플리케이션 서버 성능 테스트 개념

우선 성능 테스트라는 것은 다양한 조건에서 얼마나 작동을 잘 하는지, 혹은 특정 워크로드에서 애플리케이션의 안정성, 속도 등이 얼마나 잘 유지되는지를 판별하는 과정이다.

굳이 서버라고 명시를 안해도 웹 애플리케이션에 대한 성능 테스트는 위와 같은 내용을 담아내야 한다.

이러한 테스트를 거쳐 출력된 결과물을 바탕으로 소프트웨어의 품질을 보장할 수 있는 다양한 방법을 찾을 수 있게 된다.

즉, 유지보수의 목표점을 찾을 수 있는 것이다.


성공적인 성능 테스트라 함은 단순히 기능의 동작 속도나 안정성 뿐만 아니라 데이터 베이스, 네트워크, 하드웨어 등을 포함해 대부분의 각도에서 성능 문제를 예측할 수 있어야 한다.




성능 테스트의 의미

성능 테스트는 여러 가지 중요한 의미와 목적을 가지고 진행한다.

앞서 말했듯 소프트웨어의 안정성 및 신뢰성을 확보할 수 있을 뿐 아니라 추후 사용자 경험을 향상시킬 수 있는 지표가 된다.


병목 현상 및 성능 저하의 원인을 파악하여 좀 더 탄탄한 소프트웨어를 제작할 수 있다.

또한, 확장성을 검증하여 비지니스가 성장하더라도 시스템이 원활히 운영될 수 있게 할 수 있다.


뿐만 아니라 시스템이 필요로 하는 자원을 정확히 파악하여 적절한 용량 계획을 수립하는 등 자원의 과도한 소비를 억제할 수 있기 때문에 결과적으로는 비용 절감의 효과도 볼 수 있는 것이다.


정리하면, 성능 테스트 진행 후 유지보수를 진행함으로써 소프트웨어의 품질을 향상 시키고 리소스 비용을 절감할 수 있으며 가장 중요한 사용자 경험 향상으로 경쟁력을 높일 수 있게 된다.




주요 성능 지표

성능 테스트 시 주로 살펴보아야 할 지표가 있다.

첫 째는 응답 시간이다.

사용자가 요청을 보낸 후 응답을 받기까지 걸리는 시간을 의미하는데, 사용자 경험에 결정적인 영향을 미치므로 중요한 지표 중 하나이다.


둘 째는 처리량이다.

단위 시간당 처리되는 요청이나 트랜잭션의 수를 의미하며, 시스템의 처리 능력을 나타내는 지표이다.


셋 째는 자원 사용률이다.

CPU, 메모리, 디스크 I/O, 네트워크 대역폭 등의 사용률을 나타내는 지표로써 자원 사용의 효율성을 평가하고, 병목 현상을 식별하는 데에 사용된다.


넷 째는 에러율이다.

요청 중 실패한 요청의 비율을 나타내며, 시스템의 안정성을 평가하는 데에 중요한 지표이다.


성능 테스트 수행 시 이러한 지표를 살펴볼 수 있으며 앞으로 유지보수를 어떻게 해야하는 가에 대한 기준이 될 수 있다.




성능 테스트의 종류

성능 테스트는 단순하게 하나로만 정의할 수 있는 것은 아니다.

어느 목적을 가지고 어떻게 진행하느냐에 따라 그 종류가 상이하다.

첫 번째로 부하 테스트(Load Testing)이 있다.

이 부하 테스트를 서버에 예상되는 최대 트래픽을 가하고, 서버가 얼마나 안정적으로 운영되는 지 확인하는 작업이다.

즉, 한계치까지 몰아 붙여 비정상적인 상황이 발생하는 지 확인하는 테스트이다.


두 번째는 스트레스 테스트(Stress Testing)이다.

이는 앞선 부하 테스트와 다르게 서버의 예상 최대 사용량보다 더 높은 부하를 가하여 서버의 한계점을 확인하고, 어떤 조건에서 실패하는 지를 파악한다.

한계치 이상의 부하를 가하여 어느 시점에 비정상적으로 동작하는 지를 확인하는 작업이다.


세 번째는 내구성 테스트(Soak Testing)이다.

장시간 동안 지속적으로 부하를 가하여 서버의 안정성 뿐만 아니라 메모리 누수 등을 확인한다.


네 번째는 스파이크 테스트(Spike Testing)이다.

짧은 시간 내에 급격히 증가하는 트래픽으로 서버의 반응을 확인한다.


이렇게 주요한 네 가지의 성능 테스트 종류를 확인해 보았는데, 각각 어떻게 진행하느냐에 따라 목표가 다르지만 모두 중요한 테스트이다.




성능 테스트 과정

그렇다면 이 성능 테스트를 어떤 식으로 진행해야할까?

각 과정을 단계 별로 살펴보자.

  1. 성능 테스트 계획 수립
    • 목표 설정 : 테스트의 목적과 목표를 정의한다. 예를 들어, 최대 동시 사용자 수, 응답 시간, 처리량 등을 설정한다.
    • 테스트 범위 결정 : 어떤 부분을 테스트할지 범위를 설정한다. 예를 들어, 특정 API, 전체 애플리케이션, 데이터베이스 성능 등이 포함된다.
    • 자원 준비 : 테스트를 수행하기 위해 하드웨어 및 소프트웨어 자원을 준비한다.
  2. 테스트 환경 설정
    • 테스트 서버 준비 : 실제 운영환경과 유사한 테스트 환경을 구축한다. 이는 성능 테스트 결과의 신뢰성을 높이는 데 중요하다.
    • 데이터 준비 : 테스트에 사용할 데이터를 준비한다. 실제 운영 데이터와 유사한 데이터를 사용하는 것이 좋다.
    • 도구 설치 및 설정 : JMeter, Gatling, Locust 등 성능 테스트 도구를 설치하고 설정한다.
  3. 테스트 시나리오 작성
    • 사용자 시나리오 정의 : 실제 사용자 행동을 반영한 테스트 시나리오를 작성한다. 예를 들어, 로그인, 데이터 검색, 주문 처리 등이 포함된다.
    • 부하 패턴 정의 : 부하를 증가시키는 방법을 정의한다. 예를 들어, 동시 사용자 수를 점진적으로 증가시키거나 특정 시간 동안 일정한 부하를 유지한다.
  4. 테스트 실행
    • 기초 테스트 : 테스트 환경이 제대로 설정되었는지 확인하기 위해 작은 규모의 테스트를 먼저 실행해 본다.
    • 본격적인 테스트 : 설정된 시나리오와 부하 패턴에 따라 성능 테스트를 실행한다. 이 단계에서는 다양한 부하 조건에서 애플리케이션의 성능을 측정한다.
  5. 모니터링 및 데이터 수집
    • 서버 모니터링 : CPU, 메모리, 네트워크, 디스크 I/O 등의 자원 사용량을 모니터링한다.
    • 애플리케이션 모니터링 : 애플리케이션 내부의 성능 지표를 모니터링한다. 예를 들어, 응답 시간, 처리량, 에러율 등을 확인한다.
    • 로그 수집 : 애플리케이션 로그를 수집하여 성능 문제를 분석한다.
  6. 결과 분석
    • 데이터 분석 : 수집된 데이터를 분석하여 성능 병목 현상을 식별한다.
    • 문제점 파악 : 응답 시간이 느리거나 에러율이 높은 부분을 찾아낸다.
    • 비교 분석 : 목표 성능 지표와 실제 결과를 비교하여 성능 목표 달성 여부를 평가한다.
  7. 최적화 및 개선
    • 코드 최적화 : 성능 문제를 야기하는 코드를 최적화한다. 예를 들어, 쿼리 최적화, 메모리 사용 개선 등이 포함된다.
    • 구성 변경 : 서버 설정이나 애플리케이션 구성 파일을 변경하여 성능을 개선한다.
    • 재테스트 : 최적화 및 개선 작업 후 다시 성능 테스트를 실행하여 변경 사항의 효과를 확인한다.
  8. 보고서 작성
    • 테스트 결과 요약 : 테스트 결과를 요약하여 보고서를 작성한다.
    • 문제점 및 해결 방안 : 발견된 문제점과 그에 대한 해결 방안을 보고서에 포함한다.
    • 향후 계획 : 추가적인 성능 테스트 계획이나 개선 방안을 제시한다.
  9. 지속적인 모니터링
    • 운영 환경 모니터링 : 실제 운영 환경에서도 성능 모니터링을 지속하여 문제를 사전에 발견하고 대응한다.


시스템의 요구사항이나 필요에 따라 내용은 달라질 수 있으나, 일반적으로 위의 흐름대로 성능 테스트를 진행한다.

체계적으로 계획을 수립하고, 결과를 분석하여 지속적으로 개선해 나가는 것이 이 성능 테스트의 주요 목표이다.


후기

이제 개념에 대해 어느정도 알아냈으니 다음 포스트는 샐로그 프로젝트에 적용해볼 수 있는 성능 테스트 도구에 대해 알아 볼 것이다.

이후 샐로그 프로잭트에 해당 도구를 사용하여 성능 네 가지 종류의 성능 테스트를 진행해보고, 간단히 보고서를 작성한 다음 개선해 볼 생각이다.

이전 통합 테스트까지의 여정을 겪고 테스트 커버리지를 확인하고 나니 소프트웨어의 품질이 올라갔다는게 체감이 되어서 이번 성능 테스트도 기대된다.

이 블로그는 저작권자의 CC BY 4.0 라이센스를 따릅니다.