현재 서버에서 제공하는 서비스가 목표하는 최대 사용자 수에 도달하기 위해 현재 성능을 파악하고, 개선하는 작업을 하기 위해 윈도우 환경에서 이 부분을 어떻게 설치했고, 사용했는지 공유하고자 올려봅니다.
Apache Jmeter?
서버가 제공하는 서비스에 대한 성능을 측정하고 사용자에게 보여주는 테스트 도구라고 할 수 있습니다.
나의 웹 서버는 얼마나 많은 요청을 견딜 수 있는가?를 측정 하는 것이라 생각하면 될 것 같습니다.
설치
http://jmeter.apache.org/download_jmeter.cgi
위 URL에 들어가면 설치 하는 파일을 제공하는데
저 같은 경우 표시한 부분의 파일을 다운 받았습니다.
그 후 알집을 풀면
위와 같은 화면을 보게 되는데
bin 폴더에 들어가 밑줄 친 'jmeter' Script를 실행시켜 줍니다.
그러면
이렇게 생긴 bash창이 뜨게 되면서 위와 같은 창이 동시에 열리게 됩니다.
이 때 Test Plan을 우클릭 후 Add - Threads (Users) - setUp Thread Group을 선택 해줍니다.
그러면 위와 같은 화면이 뜨게 되는데
Number of Threads (users)
스레드 개수, 가상 유저 수라고 생각하면 됩니다.
Ramp-Up Period (in seconds)
스레드 당 생성시간으로, 만약 Number of Threads = 100, Ramp-Up = 10이라면, 100명의 유저를 생성할 때 까지 10초가 걸린다는 의미이다. 즉, 1초 동안 10명의 유저가 요청을 하는 것이고, 만약 Ramp-Up = 0으로 설정하면, 동시 접속자 수는 100명이 됩니다.
Loop Count
하나의 스레드가 수행할 작업 수를 의미하며, 만약 Number of Threads = 100, Loop Count = 10이라면,
100명의 유저는 동일한 작업을 10번 수행하게 되며, 총 1000번(총 요청횟수)이 수행됩니다. (infinite 체크 시 무한 반복)
위 설정은 초당 1회씩 1초마다 1번 호출한다는 뜻인데 사용자의 입맛에 맞게 바꾸어 주면 됩니다.
그 후 setUp Thread Group 설정이 완료 되었다면
setUp Thread Group 우클릭 후 Add - Sampler - HTTP Request 부분을 선택 합니다.
Protocol[http] : 확인하려는 서버가 http면 http, https면 위 화면 같이 적어 줍니다.
Server Name or IP : 말 그대로 지정해놓은 서버 이름을 적거나 IP 주소 이름을 적어 줍니다.
Post Number : Post Number를 적어 줍니다. (없으면 적지 않아도 됩니다.)
HTTP Request : POST, GET 과 같은 옵션을 선택 후 Path에는 / 부분을 적어주는데
예를 들어 localhost:5000/add/index.js일 때 /add/index.js를 적어주면 됩니다.
그 아래 Parameter, Body Data, Files Upload는 상황에 맞게 써 주면 되는데
key : value형식으로 되어 있다면 Parameter, 따로 JSON 포맷팅이 있다면 Body Data부분에 JSON 포맷을 넣어주면 됩니다.
나는 정해진 JSON 포맷이 있기 때문에 Body Data에 데이터를 넣었고, POST로 설정했습니다.
이제 테스트 준비는 완료 되었고, 테스트 시 결과를 살펴보는 도구가 필요한데
TestPlan 우클릭 - Add - Listener - View Results Tree / Summary Report / Graph Results를 선택하여 줍니다.
이제 해당 버튼을 클릭하여 테스트를 해보죠.
그러면 View Results Tree 부분에 위와 같은 결과가 나타날 것입니다.
Samples - 서버에 요청한 횟수
Average - 평균 응답 시간 (ms)
Min - 최소 응답 시간 (ms)
Max - 최대 응답 시간 (ms)
Error - 에러율
Throughput - 초당 처리 가능한 요청 횟수
Throughput
Throughput에 대해 조금 더 설명을 넣어보자면 단위 시간 당 대상 서버(웹 서버, WAS, DB 등)에서 처리되는 요청의 수를 말하는데 JMeter에서는 시간 단위를 보통 TPS(Transaction Per Second)로 표현합니다.
TPS의 개념은 무조건 클라이언트에서 서버로의 요청(Request) 갯수로 이해하면 안됩니다.
한 번의 요청(Request)이라고 하더라도 단순 웹 사이트 호출 일수도 있고, 특정 데이터를 전송하여 서버 사이드에서 처리되도록 하는 경우도 있습니다.
결론적으로 한 번의 요청(Request)으로 몇번의 비즈니스 처리(Transaction)가 일어나는지 확인 하는 것이 중요합니다.
만약, POST방식으로 10개의 데이터를 서버로 전송하고 건당 비즈니스 로직으로 처리가 된다면
1번(Requst 수) * 10개(Data 수) = 10 TPS
라고 이해하는 것이 좋습니다.
'프로그래밍(Web) > 업무관련' 카테고리의 다른 글
[바미] Kafka 서버 설치 및 실행하기. (0) | 2021.06.24 |
---|---|
[바미] 개발 하면서 사용해 본 협업 툴들 (0) | 2021.06.04 |
[바미] Golang reflect 함수 사용하여 필수 값 체크 함수 만들기. (0) | 2021.05.08 |
[바미] Golang JSON에 입력된 UTC 시간 값 비교하기 (0) | 2021.05.04 |
[바미] Golang JSON nil값 Check 함수 만들다 생긴 일. (0) | 2021.05.04 |