← Log

부하 테스트의 개념과 지표

성능 부하 테스트 기록· 1 / 2
  1. 1 — 부하 테스트의 개념과 지표
  2. 2 — Artillery로 부하 테스트 시나리오 실행

백엔드 개발을 해오면서 서버 배포와 기능 구현을 위주로 담당하다 보니 테스트를 통해 성능 개선해볼 상황이 거의 없었기에, 내용이 알차지 않은 빈 껍데기만 만들고 있다는 느낌을 항상 받아왔다.

서버 개발자는 동일 서버 사양에서 더 많은 사용자에게 쾌적한 서비스 환경을 제공할 수 있어야 하는데, 특히 부하 테스트를 통해 대용량 트래픽 및 성능을 개선하는 간접적인 경험이 필요하다는 것을 느꼈다.

성능 테스트에는 다양한 종류의 테스트가 있지만, 가장 일반적인 부하 테스트를 진행할 것이다.

먼저 테스트 관련 내용을 공부한 후, 개별 테스트부터 전체 프로세스 테스트까지 부하 테스트를 진행해보고자 한다.

부하 테스트

부하 테스트(Load test) 란 서버가 얼마 만큼의 요청을 견딜 수 있는지 테스트하는 방법이다.

코드의 문법적, 논리적 문제를 확인하는 유닛 테스트와 통합 테스트와는 별개로, 서버에 몇 명의 동시 접속자나 일일 사용자를 수용할 수 있는지를 예측하는 테스트이다.

유저의 수와 초당 API 요청 등을 증가시키며 시스템의 내구성을 테스트하고 결과를 모니터링하며 애플리케이션의 한계를 찾아내는 것이 목표이다.

부하 테스트 vs 스트레스 테스트

스트레스 테스트(Stress Test) 는 시스템에 과부하를 가해 안정성 한계를 확인하고, 시스템을 무너졌을 때 어떤 동작을 보이는지 확인하는 테스트이다.

서버가 최대로 수용할 수 있는 처리량(임계값)을 확인하는 부하 테스트와는 다른 관점에서, 시스템이 커버할 수 있는 대역폭 이상으로 과부하를 주며 과부하 상태일 때 모니터링 도구는 정상적으로 복구되는지, 시스템이 장애 조치를 하는지, 보안상의 문제가 발생하는지 등을 확인한다.

가장 이상적인 시스템은 부하가 걸려서 시스템이 고장난 이후에도 데이터 손상 없이 서비스가 정상 상태로 돌아오는 것이다.

  • 부하 테스트: “얼마나 많은 요청을 문제없이 처리하는가?”
  • 스트레스 테스트: “수용 능력을 벗어났을 때, 어떻게 동작하고, 복구가 가능한가?”

일반적으로 스트레스 테스트 이전에 부하 테스트를 먼저 진행한다.

부하 테스트를 통해 시스템의 최대 수용 능력을 파악해 성능을 최적화 한 후, 안정적인 상태에서 한계를 초과했을 때의 반응을 평가한다.

부하 테스트 과정

테스트는 기존에 진행했던 개인 프로젝트를 대상으로 한다.

아직 외부에 노출되지 않아 트래픽은 거의 없는 상황이지만, 가상의 트래픽을 주입해 성능을 측정해보고 개선점을 찾아볼 예정이다.

테스트 대상

테스트 대상 시스템은 다음과 같은 계층으로 구성된다.

  • Ubuntu OS 홈서버 > Nginx 웹서버 > Nest.js 백엔드 앱 > MySQL 데이터 베이스

각각의 섹션을 개별 테스트해 병목 현상을 파악해 개선점을 찾아낸 후에 전체 테스트를 진행한다.

참고 자료

  • [1] 성능테스트, 부하테스트, 스트레스 테스트..무엇이 다를까? (seongwon)
  • [2] 성능 테스트 유형 알아보기 (SungryongJun)
  • [3] 서버의 성능 테스트 [필요성, 개요, 간단한 구현] (kukjunLEE)
목차