성능 테스트는 시스템의 ‘고가용성’을 위해 문제점을 미리 파악하고 이를 방지하기 위해 수행된다. 시스템 성능에 문제를 줄 수 있는 요소는 컴퓨팅 리소스 사용 급증으로 인한 성능 저하, 급증한 DB I/O로 인한 blocking, DBMS에 급증한 request로 인한 DB lock 등이 있다.
또한, 성능 테스트의 대표적인 유형으로 ‘부하테스트(load test)’와 ‘스트레스 테스트(stress test)’가 있다.
1. 부하테스트(load test)
부하테스트는 시스템이 정상적인 작업 부하를 처리할 수 있는지 확인하는 것이 주된 목적으로 ‘임계 값 한계에 도달할 때까지’ 시스템의 부하를 지속적으로 증가시켜 시스템의 성능을 관찰하는 성능테스트이다.
시스템이 특정 부하 수준에서 어떻게 동작하는지를 평가하는 프로세스로 이를 통해 성능, 안정성, 응답 시간등을 평가하게 된다.
내가 시도할 부하테스트는 다음과 같은 8단계를 거칠 것이다.
1. 목표 설정
_ 최대 동시 사용자 수, 특정 작업의 응답 시간을 평가
2. 시나리오 및 트랜잭션 정의
_ 실제 사용자의 행동을 모방
3. 부하 모델 생성
_ 특정 시간 동안 시스템에 가해질 부하 모델링, 동시 사용자 수, 트랜잭션 수, 데이터 양 등으로 정의
4. 테스트 환경 설정
_ 테스트 진행 환경 구성, 테스트 서버, DB, 네트워크 구성, 로깅등을 포함하는 환경
5. 부하 적용
_ 부하 모델을 기반으로 시스템에 부하 적용, 동시에 여러 사용자의 요청을 시뮬레이션하고 특정 작업ㅇ르 연속적으로 실행하기
6. 성능 측정 및 모니터링
_부하를 가하면서 시스템의 성능을 측정하고 모니터링, 응답시간, 처리량, 에러율, 리소스 사용량 등과 같은 지표 수집
7. 결과 분석
_ 수집 결과를 분석하여 시스템의 성능 병목 지점이나 향상할 수 있는 부분을 식별, 문제를 발견하면 조치 방안 도출
8. 트러블 슈팅 문서화
_ 테스트의 결과와 성능 지표, 발견된 문제 및 권고 사항을 종합하여 문서화
2. 스트레스 테스트(stress test)
시스템 자원에 감당가능한 수준 이상의 과잉 작업을 통해 과부하를 주어 시스템을 무너뜨리는 시도를 한다. 이를 통해 시스템이 과부하 상태에서 어떤 동작을 보이는지를 확인한다. 사실 무너뜨리는 목적이 중요한 것이 아니라 시스템이 어떻게 정상적으로 복구되는지 모니터링 하는 것을 목적으로 한다. 스트레스 테스트는 시스템 과부하의 원인에 따라 다시 두 가지로 나뉜다.
2.1. 흡수 테스트
사용자의 수를 천천히 증가시켜 시스템의 지속 가능한 시간을 테스트한다.
2.2. 스파이크 테스트
사용자의 수를 한 번에 증가시켜 시스템의 상태를 테스트한다.
내가 시도할 스트레스 테스트는 다음과 같은 8단계를 거칠 것이다.
1. 목표 설정
_ 시스템의 부하에 어떻게 대응하는지, 어디에서 실패하는지 등을 확인
2. 스트레스 시나리오 정의
_ 흡수 테스트 or 스파이크 테스트 or something..
3. 부하 증가
_ 미리 정의한 시나리오를 기반으로 시스템에 부하를 가하며 성능을 측정
4. 성능 측정 및 모니터링
_ 응답 시간, 처리량, 에러율, 자원 사용량 등과 같은 성능 지표를 수집하면서 어떻게 시스템이 반응하는지를 기록
5. 한계 도달 및 오류 확인
_ 시스템이 어떤 한계에 도달하거나 오류가 발생하는 시점을 확인
6. 성능 분석
_ 수집된 데이터를 분석하여 성능 병목 지점이나 한계점을 식별
7. 시스템 회복 테스트
_ 한계에 도달한 후에 시스템이 어떻게 회복되는지를 테스트, 부하를 감소시키거나 시스템 리소스를 조정하여 어떻게 시스템이 정상 상태로 돌아가는지를 확인하는 것을 포함
8. 트러블 슈팅 문서화
_ 테스트의 결과와 성능 지표, 발견된 문제 및 권고 사항을 종합하여 문서화
'개발일기' 카테고리의 다른 글
[개발일기] HTTP method GET 조회 vs POST 조회 (0) | 2024.08.23 |
---|---|
성능 판단을 위한 대표적인 지표 (0) | 2023.12.14 |
[Spring, Java] 외부 API 호출 (1) | 2023.11.15 |
ssafy 신한 해커톤 지원 (0) | 2023.10.12 |
댓글