성능 테스트
“부하·응답시간·처리량을 측정하는 비기능 테스트. JMeter·LoadRunner.”
성능 테스트란 무엇인가
성능 테스트(Performance Test)는 시스템이 일정한 부하 아래에서 요구된 응답시간과 처리량을 유지하는지를 측정하는 비기능 테스트다. 기능 테스트가 '무엇을 하는가'를 확인한다면, 성능 테스트는 '얼마나 빠르고 얼마나 많이 견디는가'를 확인한다.
동일한 기능이라도 사용자 한 명일 때와 수천 명이 동시에 접속할 때의 거동은 전혀 다르며, 이 차이를 정량적으로 드러내는 것이 성능 테스트의 목적이다. 응답시간, 처리량(Throughput), 동시 사용자 수, 자원 사용률 같은 지표를 측정해 시스템이 운영 환경의 요구를 감당할 수 있는지를 사전에 판정한다.
비기능 요구사항의 검증
성능 테스트는 비기능 요구사항을 검증하는 핵심 수단이다. 비기능 요구사항은 '특정 화면이 2초 이내에 응답해야 한다'처럼 시스템의 품질 수준을 수치로 규정하지만, 기능 명세에 비해 자주 모호하게 남겨진다.
목표 응답시간, 견뎌야 할 동시 접속 규모, 허용되는 오류율 같은 기준이 사전에 정의되어 있지 않으면 측정 결과를 합격과 불합격으로 가를 근거가 사라진다. 따라서 성능 테스트의 출발점은 도구 선택이 아니라 측정 가능한 성능 목표를 요구사항 단계에서 확정하는 일이다.
기준이 없는 성능 측정은 숫자를 모을 뿐 판정을 내리지 못한다.
부하·스트레스·내구 시험
성능 테스트는 목적에 따라 여러 유형으로 나뉜다. 부하 테스트는 예상되는 정상 범위의 부하를 가해 목표 응답시간과 처리량이 지켜지는지를 본다.
스트레스 테스트는 한계를 넘는 부하를 가해 시스템이 어느 지점에서 무너지고 어떻게 회복하는지를 확인한다. 내구 테스트는 일정한 부하를 장시간 유지해 메모리 누수나 자원 고갈처럼 시간이 지나야 드러나는 문제를 잡아낸다.
또한 짧은 시간에 급격히 부하가 치솟는 상황을 재현하는 스파이크 시험도 있다. 어떤 유형을 수행할지는 해당 시스템이 실제로 직면할 위험의 성격에 따라 선택한다.
| 측정 지표 | 의미 |
|---|---|
| 응답시간 | 요청 처리 속도 |
| 처리량 | 단위시간 처리량 |
| 동시 사용자 | 동접 규모 |
| 자원 사용률 | 병목 진단 단서 |
측정 도구와 시나리오 설계
성능 테스트는 다수의 가상 사용자를 생성해 부하를 가하는 도구를 통해 수행한다. JMeter는 오픈소스 기반으로 폭넓게 쓰이며, LoadRunner는 상용 도구로 대규모 부하 생성과 분석에 강점을 가진다.
그러나 도구의 성능보다 중요한 것은 실제 사용 양상을 반영한 시나리오 설계다. 평균적인 부하만 가정하고 측정하면 특정 기능에 트래픽이 몰리는 현실의 첨두 상황을 놓친다.
측정 데이터의 규모와 분포가 운영 환경과 동떨어지면, 시험실에서 통과한 시스템이 개통 직후 느려지는 결과로 이어진다.
병목 진단과 시스템 테스트 연계
성능 테스트의 진짜 가치는 합격·불합격 판정을 넘어 병목 지점을 찾아내는 데 있다. 응답이 느려지는 원인은 애플리케이션 로직, 데이터베이스 질의, 네트워크, 인프라 자원 등 여러 계층에 흩어져 있으며, 부하 구간별 자원 사용률을 함께 관찰해야 어느 계층이 한계에 먼저 도달하는지가 드러난다.
이 진단을 시스템 테스트 단계에서 충분히 수행해 두면, 운영 개통 이후 부하가 실제로 올라갈 때의 위험을 미리 줄일 수 있다. 반대로 성능 검증을 형식적으로 넘기면 개통 직후 응답 지연과 장애가 한꺼번에 터지며, 이 시점의 대응 비용은 사전 진단의 수십 배에 이른다.
성능은 개발이 끝난 뒤 확인하는 항목이 아니라 설계 단계부터 목표로 안고 가야 하는 품질 속성이다.
관련 용어