이 글은 자바 최적화 (Optimizing Java,가장 빠른 성능을 구현하는 검증된 10가지 기법) 책을 학습한 내용을 토대로 작성되었습니다.
Prologue
-
성능 테스트의 다양한 패턴들에 대해 알아본다.
그리고 테스트는 가능하다면 모든 면에서 운영 환경과 똑같이 설정해야 한다.
성능 테스트 유형
지연 테스트 (Latency Test)
종단 트랜잭션에 걸리는 시간은?
-
고객이 트랜잭션 또는 페이지 로딩을 얼마나 오래 기다려야 하는지를 측정하는 테스트이다.
-
지연 측정 시 반드시
처리율을 어느 정도 수준으로 유지했는지 함께 기술해야 한다.
처리율 테스트 (Throughput Test)
현재 시스템이 처리 가능한 동시 트랜잭션 개수는?
-
어떤 측면에서는 처리율은 지연과 동등한 개념이라고 볼 수 있다.
-
사실상 한계점(=변곡점)이 바로 최대 처리율이다.
한계점이 발생하는 지점과
그 시점의 부하 수준을 포착하는 것이다.
부하 테스트 (Load Test)
특정 부하를 시스템이 감당할 수 있는가?
-
부하 테스트는 처리율 테스트와 조금 다르다.
시스템이 이 정도 부하는 견딜 수 있을까? 라는 질문에 대해
Yes/No 답을 구하는 과정이다.
-
예를 들어 트래픽이 상당할 것으로 예상하는 이벤트에 대비하기 위해 부하 테스트를 수행한다.
스트레스 테스트 (Stress Test)
이 시스템의 한계점은 어디까지인가?
처리율 테스트와 비슷한 개념이라는 생각이 든다.
-
시스템 여력이 어느 정도인지 알아보는 수단이다.
-
보통 일정 수준의 트랜잭션을 시스템에 계속 걸어놓는다.
= 일정 수준의 트랜잭션 = 즉 특정 처리율 = 트랜잭션의 최대치
-
시간이 갈수록 동시 트랜잭션이 증가하고 시스템 성능은 저하될 것이다.
그리고 측정값이 나빠지기 시작하기 직전의 값이 바로 최대 처리율이다.
내구성 테스트 (Endurance Test)
시스템을 장시간 실행 시 성능 이상 증상이 나타나는가?
-
메모리 누수, 캐시 오염, 메모리 단편화 등
한참 시간이 지나야 문제를 일으키는 요소들이 있는데
이런 종류의 문제는 내구 테스트로 감지한다.
-
방법으로는 평균 사용률로 시스템에 일정 부하를 계속 주며 모니터링하다가
갑자기 리소스가 고갈되거나 시스템이 깨지는 지점을 찾는다.
-
내구 테스트는 빠른 응답을 요구하는 시스템에서 많이 이뤄진다.
용량 계획 테스트 (Capacity Planning Test)
리소스를 추가한 만큼 시스템 확장이 되는가?
-
스트레스 테스트와 비슷한 면이 있다.
하지만 분명히 구분되는 차이점이 있다.
-
스트레스 테스트 : 현재 시스템이 어느 정도 부하를 버틸 수 있는가?
용량 계획 테스트 : 업그레이드한 시스템이 어느 정도 부하를 버틸 수 있는가?
-
따라서 특정 이벤트를 위한 테스트가 아닌
예정된 계획 일부분으로 실행하는 경우가 많다.
저하 테스트 (Degradation)
시스템이 부분적으로 실패 시 어떤 일이 벌어지는가?
-
부분 테스트라고도 불린다.
-
저하 테스트는 복원 테스트 하나만 기억하면 된다.
평상시 운영 환경과 동등한 수준의 부하를 시스템에 가하는 중
특정 컴포넌트의 성능이 갑자기 확 다운되는 시점에 벌어지는 일들을 확인한다.
-
저하 테스트에서의 키워드는 트랜잭션 지연 분포와 처리율이다.
Summary
-
다양한 패턴의 테스트에 대해 알아봤다.
-
추가로 한국에서는 실제 퍼포먼스를 측정하기 위해
nGrinder를 많이 사용하는데
굉장히 좋은 툴이니 이번 기회에 같이 알아놓는 걸 추천한다.