우리들 중 다수는 부하테스트(Load Test) 스트레스 테스트(Stress Test)의 용어의 차이를 잘 모른 채 그냥 동의어로 사용하는 경향이 있다. 이러한 용어의 명확한 구분 없이 사용하는 사이트의 경우는, 도대체 적절한 부하테스트를 하자는 것인지, 의미있는 스트레스 테스트를 하자는 것인지 목표가 명확하지 않는 경우가 대부분이다.

스트레스테스트(Stress Test)는 어플리케이션이 실행 시에 필요로 하는 각종 리소스(CPU, RAM, Disk )의 허용하는 한도를 넘어서서 비정상적인 높은 부하를 발생시켜보는 테스트를 일컫는다. 일정한 한도를 넘어서는 부하 상황이 되면 경우에 따라 JVM이 다운되거나, 데이터를 잃어버리게 되는 것 등과 같이 시스템의 비정상적인 작동을 유발시킬 수도 있다. 이 같은 결점(Bug)이나 결함(failure)을 찾기 위해 스트레스를 가해 보는 것이다. 스트레스 테스트 시의 부하(일련의 들어오는 요청)는 이처럼 시스템 리소스의 한계점을 시험하려는 의도이기 때문에, 다분히 의도적으로 왜곡되는 경향이 있으며, 향후 실제 접속자에 의해 발생하는 부하량 패턴과는 거리가 멀 수도 있다.

반면, 부하테스트(Load Test)는 적절한 부하를 발생시켜 통계적으로 의미있는 수치를 측정하는 테스트를 일컫는다. 부하테스트의 두 가지 중요한 목적 중 하나는 장시간 서비스 가능 여부를 확인하는 신뢰성(reliability) 테스트와 두 번째는 성능 테스트(Performance Test)이다. 부하테스트(Load Test)라는 용어 자체는 대단히 모호하며 그 용어를 의미있게 사용하기엔 너무나 일반적이고 미흡한 면이 없잖아 있다. 예를 들어 부하(Load)라는 것이 과부하(Overload) 높은부하(High Load)를 암묵적으로 항상 의미한다고 생각하는가? 성능테스트(Performance Test) 관점에서의 부하(Load)는 최소레벨(0 tps)에서부터, 리소스 고갈 상황이나 기형적인 응답시간의 극심한 저하 혹은 트렌젝션 실패 등과 같은 상황이 발생하기 직전까지의 최대 레벨(Maximum tps)까지 다양할 수 있다.

성능테스트(Performance Test)는 부하테스트 중 하나의 관점, 즉 성능적 관점만 측정하겠다는 뜻이 담겨 있다. 해당 시스템 혹은 어플리케이션의 성능을 측정한다함은 점진적인 부하량 증가 과정에서 더 이상 단위시간당 최대 처리량(TPS)이 증가하지 않을 때, 그 때의 수치를 측정하고 그 수치를 해석하는 과정을 의미한다. 성능테스트의 일반적인 목적은 현재의 시스템 혹은 어플리케이션이 최대로 수용가능한 동시단말사용자수가 몇 명인지, 혹은 목표로 정한 성능이 도출되지 않을 때 병목지점이 어딘지를 밝히고 목표성능을 획득하기 위해 무엇을 시정해야하는지를 찾아내기 위함이다. 성능테스트 과정에서 매우 중요한 부분은 목표성능을 설정하고 그러한 목표성능을 확인/측정하기 위해 향후 시스템 운영 중에 실제로 발생할 접속사용자의 호출패턴이 어떠하냐를 분석/추정하는 과정이 반드시 필요하고, 이를 근간으로 점진적 부하를 발생시켜야 의미있는 성능테스트 결과를 도출할 수 있다. 그렇지 않을 경우 성능테스트가 자칫 스트레스테스트로 끝나고 만다. 

각 용어를 도식으로 표현하면 다음과 같다.



Posted by sjokim
,