1) 부하테스트란?
우리가 만든 웹 서비스가 목표 응답시간 기준으로 얼마만큼의 동시 접속자 수를 견딜수 있는가를 테스트하기 위한 목적
동시접속자 수를 TPS로 환산하여 자원적인 관점으로 사용자 대비 용량 산정
즉, 사용자의 추이에 따라 적절한 자원을 배분하는 것, 더 나아가 병목구간을 찾아 제거하는 것
출시 전 대부분의 어플리케이션이 성능 저하를 일으키는 병목구간을 가지고 있다.
출시 전에 얼마나 이 부분을 많이 해결하느냐가 매우 중요
즉 부하를 발생시키는 것도 중요하지만, 병목구간이 무엇인지 찾아내는 것이 필요
APM (Application Performance Monitoring)과 인프라 모니터링(Infrastructure Monitoring)의 지표들을 읽어내고,
병목 구간의 문제가 코드의 잘못인지, 자원의 부족인지, 세팅값의 잘못인지 찾아내어 개발자 레벨로 설명을 해주는 능력이 필요
2) 부하테스트의 종류
(1) 부하 테스트 (Load Test)
특정한 부하를 제한된 시간을 두어서 웹 어플리케이션에 이상이 없는지 파악하는 테스트
(2) 지속성 테스트 (Endurance Test)
Load Test와 유사하나 오랜 기간 부하를 줘서 하는 테스트
(3) 스트레스 테스트 (Stress Test)
부하의 임계점을 찾기 위해 점진적으로 부하를 올리면서 진행하는 테스트
(4) 최고 부하 테스트 (Peak Test)
일순간 감당할 수 없을 만큼 부하를 주고, 웹 어플리케이션이 죽지 않고 제대로 동작하고 회복하는지 보는 테스트
수강신청이나 이벤트 등 대규모 상황을 대비하기 위해 진행
3) 부하테스트 프로그램의 종류
JMeter, Load Runner, nGrinder, Gatling
4) APM의 종류
부하를 발생시킨 후, 웹 어플리케이션의 주요 병목지점을 찾아내는 것이 중요
웹 어플리케이션의 병목을 찾아주는 MRI같은 장치가 APM
APM의 가장 대표적인 솔루션은 제니퍼소프트
네이버에서 개발한 pinpoint나 jaeger와 같은 도구도 있음
우리는 JMeter를 이용하여 테스트를 한다
실습환경
openjdk 11.0.2 (https://jdk.java.net/archive/) #환경변수에 추가해준다
apache-jmeter-5.5 (https://dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.5.zip)
시스템변수에 변수명은 JAVA_HOME > 자바 홈디렉토리(bin빼고)
시스템변수네 패스에 자바홈의 bin을 저장 > %JAVA_HOME%\bin
사진에는 \ << 빠짐
설정되면 cmd에서 java -version을 실행해서 자바버전이 나오면 정상설치된것이다.
그후 다운받은 apache-jmeter-5.5\bin\jmeter.bat 를 실행하여 정상적으로 실행되면 성공
jmeter 사용법
Test Plan 우클릭 -> Add -> Thread(Users) -> Thread Group
Name : Thread Group의 이름 입력
Action to be taken after a sampler error : 테스트 수행 중 에러가 발생될 때의 상황 설정
Thread Properties
Number of Threads : 이 Thread Group에 생성될 Thread의 개수를 지정
Ramp-up Period : 한 Thread가 시작한 후 다음 Thread가 시작될 때까지의 대기 시간을 지정
Loop Count : 각 Thread가 Thread Group에 속한 작업의 반복 횟수를 지정
Scheduler : Thread Group의 시작 및 종료 스케줄을 설정할 것인지 체크
Thread Group 우클릭 -> Add -> Sampler -> Http Request
Name : 요청의 이름 입력
Server Name or IP : 서버에 접속할 수 있는 주소를 입력, 도메인 주소 or IP주소
Port Number : 서버에 접속할 때 사용할 서버의 포트번호 입력
Protocol : 사용할 프로토콜 입력
Method : 메소드 입력
Content encoding : 인코딩 방식 입력
Path : 접속할 URL 입력
Parameters : 서버에 전송할 데이터 입력
Thread Group 우클릭 -> Add -> Listener -> View Results in Table
Thread Group 우클릭 -> Add -> Listener -> View Results Tree
Thread Group 우클릭 -> Add -> Listener -> View Results Tree
대용량 클러스터를 위하여 옆사람컴퓨터를 클러스터로 만들어서 접속한다.
다만들어지면 젠킨스에 테스트시스템 구축하여 실행한다
6) 젠킨스 + jmeter
1) 젠킨스에 플러그인 추가
대시보드 -> Jenkins 관리 -> 플러그인 관리 -> 설치 가능 -> performance 앞에 체크박스 체크
-> Download now and install after restart -> 설치가 끝나고 실행중인 작업이 없으면 Jenkins 재시작
2) 테스트용 파이프라인 추가
새로운 Item -> 이름 loadtest -> Freestyle -> OK -> Build Steps에서 Add build step 클릭 후 Execute shell클릭 다음 내용 입력
/usr/local/jmeter-5.5/bin/jmeter -n -t /var/lib/jenkins/workspace/loadtest/test.jmx -j jmeter.save.saveservice.output_format=xml -l /var/lib/jenkins/workspace/loadtest/report.log
-> 빌드 후 조치 에서 빌드 후 조치 추가 -> Publish Performance test result report -> Source data files (autodetects format): 에 /var/lib/jenkins/workspace/loadtest/report.log
-> 저장
참고자료
728x90
반응형