1. 부하 테스트 계획의 기본 사항
부하 테스트를 시작하기 전에 부하 테스트 계획을 세워야 한다. 부하 테스트 계획에는 다음과 같은 내용을 결정해야 한다:
- 일정
- 부하 테스트 목적
- 전체 조건 정리
- 목표값
- 사용할 부하 테스트 도구
- 부하 테스트 환경
- 부하 테스트 시나리오
1.1 일정 결정
부하 테스트는 일정을 여유롭게 잡아야 한다. 일반적인 개발 프로젝트에서 부하 테스트에 투입되는 인력과 기간을 잠정하는 어렵다.
- 예상하기 어려운 가장 큰 이유는 PDCA 사이클에서 Action 항목의 '시스템 개선' 때문
- 시스템 개선이라고 해도 시스템 설정을 변경하는 간단한 개선에서 코드까지 바꿔야 하는 경우도 있음
- 또한, 문제 작업의 원인을 찾을 수 있는 경우도 있지만, 그대나 인력과 시간이 필요하다는 관점에서 신중하기가 어렵 다
1.2 테스트할 수 없는 시스템이나 복잡한 시스템에서의 전략
테스트를 해볼 수 없는 시스템이나 복잡한 시스템일수록 신중을 기울여 어려울 것이다. 그러나 부하 테스트는 중요한 작업 중 하나이므로 정확한 값을 확인하는 것이 가장 중요하다.
2. 부하 테스트 목적 설정
확장성을 가진 시스템을 만들려면 기본적으로 부하 테스트 목적은 3장에서 설명한 것과 같이 다음과 같은 내용이 필요하다:
- 여러 시래플 토대로 각 시스템의 응답 성능을 예측한다
- 부하가 많이 발생하면 성능 개선을 한다
- 원하는 성능을 만드는 데 필요한 하드웨어를 미리 설정한다
- 시스템 확장성을 가늠하여 확인한다
- 시스템 확장성에 대한 특성을 파악한다
3. 전체 조건 정리
테스트하기 위한 전체 조건을 정리한다. 어떤 점이 예 상한다고 어떤 값이 확정된 값인지 등을 명확하게 해야 한다.
3.1 테스트 대상 시스템 범위
- 품질을 보증하는 범위를 명확하게 정의한다
- 데이터 양
- 부하 테스트 때 스크립트에 저장될 데이터 건수와 크기를 결정한다
- 서비스 이용자 수, 예상 사용자 행동, 사용 기간 등을 종합해 계산한다
- 외부 시스템 Latency, 사용량 시스템 제약
- 사용량 외부 시스템이라면 그 시스템의 Throughput과 Latency를 파악한다
- 최대 가능 동시 접속 수와 시간당 호출 제한 등의 제약이 있을 수 있다
- 외부 시스템과 동일이 어려운 경우 어떻게 처리할 것인지 검토한다
3.2 지속적인 성능 유지 기간
- 'X 시간 이상 지속해서 성능을 유지할 것' 등과 같은 기간을 결정한다
- 최종적으로 목표값에 대해 기간 성능을 유지할 필요가 있다
4. 부하를 주는 방법
4.1 네트워크 관련
- 어떤 네트워크에 부하를 줄 것인지
- HTTPS를 사용할지
4.2 다양한 페이지 유형별 고려사항
접속 빈도가 높은 페이지
- 사이트의 최상위 페이지 등 많은 사용자가 반드시 액세스하는 페이지는 정적으로 전송하는 값으로 제한하고 반드시 테스트에 포함해야 한다. 특히 액세스 빈도가 높은 값을 등은 시나리오 안에 해당 페이지에 액세스하는 빈도를 올려두는 등 실제 사용자의 액세스 수에 근근해야 한다.
서버 리소스 소비량이 높은 것으로 예상되는 페이지
예를 들어 액세스 빈도가 낮아도 서버 CPU 리소스와 네트워 크 대역, 디스크 I/O 등을 많이 이용할 것으로 예상되는 페이지를 들 수 있다.
CPU 리소스를 소비하기 쉬운 페이지(요청) 예
- 사용자가 입력한 비밀번호 암호화나 인증을 하는 페이지
- 이미지, 동영상 변환을 하는 페이지
- 파일 압축과 풀기를 하는 페이지
네트워크 대역폭을 소비하기 쉬운 페이지(요청) 예
- 용량 콘텐츠 크기가 큰 페이지
- 이미지, 동영상 업로드와 다운로드를 하는 페이지
디스크 I/O를 소비하기 쉬운 페이지(요청) 예
- 로그가 많은 페이지
- 동적 파일 내에 검색 등을 하는 페이지
DB를 접근하는 페이지
공유 리소스인 DB를 접근하는 페이지이다. DB 접근은 접근과 다른 부하 상태가 되기 쉽다:
- 마스터 데이터 형태의 참고 페이지
- 모든 인원이 최신 사용자 계정부을 참고하는 페이지
DB를 갱신하는 페이지
공유 리소스인 DB를 갱신하는 페이지이다. DB 갱신은 참고와 다른 부하 상태가 되기 쉽다:
- 상품 재고 관리 처리
- 경매 입찰 처리
- 로그인 세션 발행 페이지
외부 시스템과 통신하는 페이지
DB 접속 이외에도 외부 시스템과 통신이 많이 발생한다:
- 공유 개시 서버를 사용하는 페이지
- 로그를 외부 시스템에 전송하는 페이지
- SNS/Simple Notification Service)/SQS(Simple Queue Service) 등의 시스템 이용
- 그 외의 외부 API 등의이 발생하는 페이지