Gidhub BE Developer

[Java Optimizing] 4. 성능 테스트 패턴 및 안티패턴 : 성능 테스트 유형

2021-02-07
goodGid

이 글은 자바 최적화 (Optimizing Java,가장 빠른 성능을 구현하는 검증된 10가지 기법) 책을 학습한 내용을 토대로 작성되었습니다.

Prologue

  • 성능 테스트의 다양한 패턴들에 대해 알아본다.

    그리고 테스트는 가능하다면 모든 면에서 운영 환경과 똑같이 설정해야 한다.


성능 테스트 유형

지연 테스트 (Latency Test)

종단 트랜잭션에 걸리는 시간은?

  • 고객이 트랜잭션 또는 페이지 로딩을 얼마나 오래 기다려야 하는지를 측정하는 테스트이다.

  • 지연 측정 시 반드시

    처리율을 어느 정도 수준으로 유지했는지 함께 기술해야 한다.


처리율 테스트 (Throughput Test)

현재 시스템이 처리 가능한 동시 트랜잭션 개수는?

  • 어떤 측면에서는 처리율은 지연과 동등한 개념이라고 볼 수 있다.

  • 사실상 한계점(=변곡점)이 바로 최대 처리율이다.

    한계점이 발생하는 지점과

    그 시점의 부하 수준을 포착하는 것이다.


부하 테스트 (Load Test)

특정 부하를 시스템이 감당할 수 있는가?

  • 부하 테스트는 처리율 테스트와 조금 다르다.

    시스템이 이 정도 부하는 견딜 수 있을까? 라는 질문에 대해

    Yes/No 답을 구하는 과정이다.

  • 예를 들어 트래픽이 상당할 것으로 예상하는 이벤트에 대비하기 위해 부하 테스트를 수행한다.


스트레스 테스트 (Stress Test)

이 시스템의 한계점은 어디까지인가?

처리율 테스트와 비슷한 개념이라는 생각이 든다.

  • 시스템 여력이 어느 정도인지 알아보는 수단이다.

  • 보통 일정 수준의 트랜잭션을 시스템에 계속 걸어놓는다.

    = 일정 수준의 트랜잭션 = 즉 특정 처리율 = 트랜잭션의 최대치

  • 시간이 갈수록 동시 트랜잭션이 증가하고 시스템 성능은 저하될 것이다.

    그리고 측정값이 나빠지기 시작하기 직전의 값이 바로 최대 처리율이다.


내구성 테스트 (Endurance Test)

시스템을 장시간 실행 시 성능 이상 증상이 나타나는가?

  • 메모리 누수, 캐시 오염, 메모리 단편화 등

    한참 시간이 지나야 문제를 일으키는 요소들이 있는데

    이런 종류의 문제는 내구 테스트로 감지한다.

  • 방법으로는 평균 사용률로 시스템에 일정 부하를 계속 주며 모니터링하다가

    갑자기 리소스가 고갈되거나 시스템이 깨지는 지점을 찾는다.

  • 내구 테스트는 빠른 응답을 요구하는 시스템에서 많이 이뤄진다.


용량 계획 테스트 (Capacity Planning Test)

리소스를 추가한 만큼 시스템 확장이 되는가?

  • 스트레스 테스트와 비슷한 면이 있다.

    하지만 분명히 구분되는 차이점이 있다.

  • 스트레스 테스트 : 현재 시스템이 어느 정도 부하를 버틸 수 있는가?

    용량 계획 테스트 : 업그레이드한 시스템이 어느 정도 부하를 버틸 수 있는가?

  • 따라서 특정 이벤트를 위한 테스트가 아닌

    예정된 계획 일부분으로 실행하는 경우가 많다.


저하 테스트 (Degradation)

시스템이 부분적으로 실패 시 어떤 일이 벌어지는가?

  • 부분 테스트라고도 불린다.

  • 저하 테스트는 복원 테스트 하나만 기억하면 된다.

    평상시 운영 환경과 동등한 수준의 부하를 시스템에 가하는 중

    특정 컴포넌트의 성능이 갑자기 확 다운되는 시점에 벌어지는 일들을 확인한다.

  • 저하 테스트에서의 키워드는 트랜잭션 지연 분포처리율이다.


Summary

  • 다양한 패턴의 테스트에 대해 알아봤다.

  • 추가로 한국에서는 실제 퍼포먼스를 측정하기 위해

    nGrinder를 많이 사용하는데

    굉장히 좋은 툴이니 이번 기회에 같이 알아놓는 걸 추천한다.


Reference


Index