부하 테스트의 의미와 목적
부하테스트란 시스템의 부하를 임의적으로 증가시켜, 시스템을 테스트하는 것을 뜻합니다. 정상 및 최대 부하 조건에서 애플리케이션이 어떻게 작동하는지, 그리고 최대 부하 조건 이하에서 발생하는 경우의 중단점을 확인할 수 있습니다.
부하테스트를 통해 하드웨어, 서버, 데이터베이스 등 구성요소의 성능을 미리 결정할 수 있습니다. 또한 로드 밸런싱 문제, 대역폭 문제, 시스템 용량 문제를 포함한 애플리케이션의 문제를 노출시켜 문제점을 확인할 수 있으며, 미래에 예상되는 부하를 관리할 수 있게 합니다.
부하 테스트 도구 : Apache Jmeter
부하테스트 도구로는 Apache JMeter를 사용했습니다. Apache JMeter는 주로 웹 애플리케이션의 성능 테스트와 부하 테스트를 수행하기 위해 사용되는 오픈소스 소프트웨어입니다. JMeter는 Java로 작성되었으며 다양한 프로토콜을 지원합니다. 여기에는 HTTP, HTTPS, SOAP, REST, FTP, JDBC, LDAP, JMS 등을 포함하고 있습니다.
3-1. 스레드 그룹을 만듭니다.
스레드의 수(사용자수) : 이 스레드 그룹에 생성될 스레드의 수를 지정합니다. (사용자의 수를 의미합니다.)
Ramp-up 시간(단위: 초) : 한 스레드가 시작한 후 다음 스레드가 시작될 때까지의 대기 시간을 지정합니다.
루프 카운트 : 스레드 그룹에 속한 작업의 반복횟수를 지정합니다.
3-2. HttpRequest 추가
HttpRequest 요소는 HTTP 요청을 서버에 전송하여 그 결과를 받아옵니다.
스레드 그룹 - 추가 - 표본추출기 - HTTP요청 선택
서버 이름 또는 IP : 서버의 이름 또는 IP주소를 입력합니다.
포트번호 : 접속시 사용할 포트 번호를 입력합니다.
프로토콜 : 사용할 프로토콜을 입력합니다. (주로 HTTP or HTTPS)
HTTP 요청 - 경로 : 요청할 이름 및 경로를 입력합니다.
3-3. 테스트 결과를 출력해주는 모니터링 서버 연결
Jmeter 상단 메뉴의 초록색 플레이 모양의 실행 아이콘을 클릭하여 작동시킵니다.
Whatap모니터링 서비스를 통해 실행 결과를 확인할 수 있습니다.
JMeter는 부하 테스트 도구로, 다양한 시나리오에서 애플리케이션의 성능을 테스트할 수 있습니다. 그러나 JMeter 자체로는 서버 내부에서 발생하는 세부적인 성능 문제를 정확히 파악하기 어렵습니다. 하지만 와탭 애플리케이션 모니터링(APM)과 함께 사용하면 다음과 같은 추가적인 정보를 얻을 수 있습니다.
실시간 모니터링 제공
JMeter를 통해 부하를 가하는 동안 APM을 이용하면 실시간으로 시스템 성능을 모니터링할 수 있습니다. 이는 다음과 같은 장점을 제공합니다.
이 외에도 사용자 친화적인 WhaTap의 UI로 보다 쉽게 분석할 수 있습니다.
부하테스트 시나리오 예시:
첫 번째 시나리오
두 번째 시나리오
세 번째 시나리오
<1. 결과들의 트리 보기>
단점 : 결과 트리를 매 테스트마다 수동으로 저장해야 하고, 요청에 대한 자세한 정보를 얻기 어렵습니다.
<2. 종합 보고서>
스레드수 100
스레드수 200
스레드수 300
단점: 매 테스트마다 분석 결과를 따로따로 저장해야만 해서 스레드 수에 따른 결과 추이를 보기 어려웠습니다.
<3. 응답시간 그래프>
스레드 300일때의 5분간 응답시간 추이
테스트 실행 동안 시간이 지남에 따라 응답 시간이 어떻게 변화하는지를 보여줍니다.
단점: 응답시간 그래프를 출력할 수 있지만 확인하고 싶은 구간인 x축 설정이 불가했으며, 정확한 응답시간 분석도 불가했습니다.
<트레이스 분석>
APM은 서버 내부에 발생하는 정보를 알 수 있어, 어떤 트랜젝션이 발생했는지 뿐 아니라 서버 데이터도 확인할 수 있습니다.
<성능 추이 분석>
성능 추이 분석을 통해 시나리오에 따른 성능 변화, 자원 사용량 분석 등이 가능합니다. 이를 통해 서버에 필요한 자원을 결정할 수 있습니다.
<그외 히트맵 분석>
가로줄 패턴
과부화 패턴
폭주 패턴
트랜잭션의 특정 패턴을 분석하여 어느 곳에서 문제가 발생한 것인지 분석할 수 있습니다. 또한 부하 테스트와 관련된 주요 분석점은 다음과 같습니다.
Whatap을 통해 트랜잭션을 추적하여 애플리케이션의 각 계층에서 요청이 어떻게 처리되는지 분석합니다. 예를 들어, 웹 서버 -> 애플리케이션 서버 -> 데이터베이스 서버로 이어지는 요청 흐름을 추적합니다.
성능 병목 지점 식별 :트랜잭션 추적을 통해 시간이 많이 소요되는 구간을 식별합니다. 예를 들어, 특정 데이터베이스 쿼리가 느리게 실행되는지 여부를 파악합니다.
부하 증가에 따른 성능 변화: 부하가 증가할 때 시스템 성능이 어떻게 변화하는지 분석하여 시스템의 확장성을 평가합니다.
WhaTap의 자세한 분석 방법은 다음을 참고해주세요