기능의 동작이 가장 중요하지만
사용자가 많을 수록, 인기 있는 서비스일 수록 성능의 중요성은 비례해서 증가합니다.
현재 근무하고 있는 서비스기업에서는 특별하게 트래픽이 올라가는 시간대 또는 이벤트가 없고 전체적으로 24시간 평범하다고 판단할 수 있어 성능테스트에 대한 중요성은 간과하고 있었습니다.
강의를 찾아보면 항상 트래픽에 대한 중요성과 단위테스트, 성능테스트에 대한 과정은 포함되어 있었던 것 같습니다.
아직 많이 부족하고 성능을 튜닝하는 방법에 대해서도 많이 학습해야 하지만, 베이스는 현재 어느 정도의 트래픽을 수용할 수 있는지에 대해 파악하는 것이라고 생각합니다.
현업에서도 사용해서 성능향상에 도움되도록 더 자세히 공부해봐야겠습니다.
--
간단하게 Locust 를 docker 로 작동시켜 성능 테스트하는 방법에 대해 알아보겠습니다.
docker-compose.yml
version: '3.7'
services:
master:
image: locustio/locust
ports:
- "8089:8089"
volumes:
- ./:/mnt/locust
command: -f /mnt/locust/locustfile-hello.py --master -H http://host.docker.internal:8080
worker:
image: locustio/locust
volumes:
- ./:/mnt/locust
command: -f /mnt/locust/locustfile-hello.py --worker --master-host master
터미널로 실행시킬 docker-compose.yml 입니다.
파이썬으로 스크립트를 작성해서 커맨드로 실행시키며, 스크립트 파일이름은 locustfile-hello.py 입니다.
--
locustfile-hello.py
from locust import task, FastHttpUser
class HelloWorld(FastHttpUser):
connection_timeout = 10.0
network_timeout = 10.0
@task
def hello(self):
response = self.client.get("/hello")
커넥션 타임아웃과 네트워크 타임아웃은 10 초로 설정해두었고, 테스트할 API 은 /hello 입니다.
HelloController.java ( 테스트 컨트롤러 )
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() throws InterruptedException {
// 초당 2건 처리 * N(서버에서 동시에 처리할 수 있는 수 = 톰캣 스레드풀의 MAX 스레드(디폴트 200) = 2 * 200 = 400
Thread.sleep(500);
return "hello!";
}
}
스레드 풀의 MAX 의 디폴트 값(아무설정 안했을 시) 는 200 입니다.
Thread.sleep(500) 을 추가해줄 경우 1초에 2개씩 요청을 하게 되므로, 총 약400개를 처리할 수 있습니다.
--
도커를 띄우려면 아래와 같이 실행하면 됩니다.
docker-compose.yml up -d --sacle worker=3
--sacle worker=3 은 추가적인 옵션입니다.
위와 같이 3을 설정하면 총 3개의 worker 가 생성됩니다.
위와 같이 컨테이너가 생성되면, http://localhost:8089 를 입력해서 테스트를 진행할 수 있습니다.
화면처럼 docker-compose.yml 커맨드를 입력할때 설정했던 worker 의 개수는 3개입니다.
Number of Users = 총 사용자의 수
Ramp Up = 1초당 생성되는 수
1000 과 100 으로 설정하면 초당 100명씩 증가하며, 최대 1000명이 1초에 요청하게 됩니다 .
위와 같이 CHARTS 화면에서 총 유저수가 1000명 일때 , 실패하는 개수 , PRS 등을 확인 할 수 있습니다.
1개의 works 가 약 초당 400개를 처리할 수 있는데 3개가 있으므로 1200개를 처리할 수 있습니다.
1초당 1000개의 요청이 들어오므로, 실패없이 모두 처리할 수 있는 것을 확인할 수 있습니다.
Locust를 사용하면 차트뿐만 아니라, 통계 , 다운로드를 통해 어느 정도의 트래픽을 수용할 수 있고 성능 튜닝에 도움이 될 수 있는 지표를 확인할 수 있습니다.
'TEST' 카테고리의 다른 글
동시성 이슈 해결 방법 (synchronized , redis Lock, MySQL Lock) (0) | 2024.02.18 |
---|---|
spring boot 빌드 시, 특정 테스트 제외하기 (0) | 2023.01.19 |
@RequestPart MultipartFile , Json 컨트롤러 통합 테스트 (0) | 2023.01.07 |
Page 테스트 코드 작성하기 (0) | 2022.12.26 |
댓글