본문 바로가기
TEST

성능테스트 (with Locust)

by YoonJong 2024. 2. 17.
728x90

기능의 동작이 가장 중요하지만

사용자가 많을 수록, 인기 있는 서비스일 수록 성능의 중요성은 비례해서 증가합니다.

 

현재 근무하고 있는 서비스기업에서는 특별하게 트래픽이 올라가는 시간대 또는 이벤트가 없고 전체적으로 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를 사용하면 차트뿐만 아니라, 통계 , 다운로드를 통해 어느 정도의 트래픽을 수용할 수 있고 성능 튜닝에 도움이 될 수 있는 지표를 확인할 수 있습니다.

728x90

댓글