티스토리 뷰
성능 검증(Performance Test) 방법 중 하나인 스트레스 검증(Stress Test)에 대한 이야기를 해보려고 한다. 시스템의 성능을 가늠하고 측정하는 방법에는 여러 가지가 있을 수 있지만, 대표적으로 많이 활용하는 3가지는 부하 검증(Load Test), 스트레스 검증(Stress Test), 내구성 검증(Endurance Test)이 있다. 클라우드 환경이 널리 퍼지면서 확장성 검증(Scalability Test)도 성능 검증의 범주에 포함되고 있다. 1
내 주변의 통계는 늘 틀린다는 것을 알고있지만, 실무에서 많은 소프트웨어 개발자들을 만나다보면 시간부족을 이유로 검증과정을 대충 넘기는 것을 자주 볼 수 있었고, 테스트에 대해 잘 모르는 개발자들도 의외로 많았다. 성능 검증과 성능 분석을 혼용해서 말하기도 하고, 부하 검증과 스트레스 검증을 같은 것으로 생각하는 경우도 더러 있었다. 세세한 차이까지 잘 모를지라도 성능 검증을 하겠다는 의지를 갖는 것만으로도 고마운 일이지만, 성능검증을 하겠다고 생각했다면, 검증의 종류와 목적에 대해 이해하고 도구를 활용할 필요가 있다. 2
이번에는 스트레스 검증에 대해 이야기 해보려고 한다. 사람에게 스트레스란 만병을 유발하는 안좋은 긴장상태를 말한다. 우리가 흔히 스트레스를 받았다고 말하는 것은 사람이 감당할 수 없을만큼의 압박을 받았다는 뜻이다. 시스템에서의 스트레스도 같은 맥락을 가진다. 쉽게 생각해서, 시스템이 견딜 수 없는 상태가 되었을 때 어떤 이상동작을 보이는 지 확인 하는 것이다. 시스템이 용량의 한계를 넘었을 때 보이는 현상을 이해하는 것은 성능 검증에서 여러 통찰을 얻을 수 있게 해준다.
먼저, 시스템 한계초과 후 발생하는 시스템의 상태변화를 관찰할 수 있다. 이러한 관측은 운영환경에서 시스템이 한계상황을 맞이했을 때 어떻게 동작하는 지 예측할 수 있게 해준다. 또한 주변 시스템과 연계되어 있다면, 한계상황에서 주변 시스템에 끼치는 영향도 미리 파악해 볼 수 있게 해준다. 예를 들어 레디스(Redis)의 경우, 백업을 위해 시스템 메모리를 일시적으로 2배 가까이 사용한다. 스트레스 검증을 통해서 레디스가 한계상황에 몰리는 현상을 미리 짚어볼 수 있었을 것이고, 그랬다면 'C사의 모든 판매제품 일시품절 사태'를 막을 수 있었을 지도 모른다. 3다음, 한계상황이 언제 발생하고 그 전에 어떤 징후가 있는 지 살펴볼 수 있게 해준다. 운영환경에서 비슷한 상황이 되었을 때, 미리 취할 수 있는 대응 조치를 마련해 둘 수 있는 것이다. 만약, 사용자 요청과 메모리 사용량 증가 추세가 일정하다면, 어느 정도의 시간이 흐른 후에 한계치에 도달하는 것을 예측할 수 있다. 그렇다면 자동 조절(Auto-Scaling)이 동작하는 시간을 감안하여 미리 자동 확장 및 축소 조절이 실행되도록 정책을 정의할 수 있다. 운영환경에서 시스템 장애를 막을 수 있는 중요한 정보를 얻게 되는 셈이다. 다음, 시스템의 한계 값을 얻을 수 있다. 사실 이부분 때문에 많은 개발자들이 부하 검증과 스트레스 검증을 혼동하는 경우가 많다. 부하를 주는 것이 스트레스를 주는 것이라고 생각하기 때문이다. 부하 검증은 원하는 기준치의 부하를 견딜 수 있는 지 확인하는 것이고, 스트레스 검증은 시스템이 고장나는 기준을 확인하고 그 기준을 넘었을 때 나타나는 현상들을 확인하는 것이기 때문에 차이가 있다.
스트레스 검증은 시스템의 한계를 측정하고 그 이후에 나타날 고장 증상을 확인하는 점검이다. 그래서 시스템의 여러 고장 증상을 미리 확인하고 정상 동작 범위를 파악할 수 있도록 해준다. 당신이 소프트웨어 개발자이면서 냉장고 사용자라면, 냉장고 사용설명서에 있는 냉장고 사용환경과 고장증상 설명처럼 당신의 소프트웨서 작동범위와 고장증상 설명서를 만들어야 한다. 스트레스 검증은 소프트웨어의 작동환경과 정상 동작 범위 보고서를 작성할 수 있도록 해준다.
'Sorry Architecture' 카테고리의 다른 글
Runbook (0) | 2020.12.05 |
---|---|
RBAC with AWS IAM (0) | 2020.02.16 |
Code Review, Thumbs-up (0) | 2019.07.02 |
GitHub Workflow (0) | 2019.06.16 |
Asynchronous Code Review (0) | 2019.06.10 |