IT/NodeJS

Node.js 애플리케이션의 로드 테스트 실행하기

KeepGooing 2024. 11. 29. 11:35
반응형

Node.js 애플리케이션의 성능을 평가하고 최적화하기 위해서는 로드 테스트가 필수적입니다. 로드 테스트를 통해 애플리케이션이 높은 부하 상황에서 어떻게 동작하는지 확인할 수 있습니다. 이 글에서는 Artillery를 사용하여 Node.js 애플리케이션의 로드 테스트를 실행하는 방법을 단계별로 살펴보겠습니다.

1. 환경 설정

먼저 Artillery를 설치하고 기본적인 Node.js 애플리케이션을 준비합니다.


# Artillery 설치
npm install -g artillery

# 테스트용 Node.js 애플리케이션 준비
git clone https://github.com/example/node-app.git
cd node-app
npm install
npm start
        

2. 테스트 스크립트 작성

Artillery 테스트 스크립트를 YAML 형식으로 작성합니다.


config:
  target: "http://localhost:3000"
  phases:
    - duration: 60
      arrivalRate: 20
      name: Warm up phase
    - duration: 120
      arrivalRate: 50
      rampTo: 100
      name: Ramp up load
    - duration: 600
      arrivalRate: 100
      name: Sustained load

scenarios:
  - name: "API test"
    flow:
      - get:
          url: "/api/users"
      - post:
          url: "/api/data"
          json:
            name: "Test User"
            email: "test@example.com"
        

이 스크립트는 3단계의 로드 테스트를 정의하며, 두 가지 API 엔드포인트를 테스트합니다.

3. 테스트 실행

작성한 테스트 스크립트를 실행합니다.


artillery run load-test.yml
        

Artillery는 테스트를 실행하고 결과를 콘솔에 출력합니다.

4. 결과 분석

테스트 결과를 분석하여 애플리케이션의 성능을 평가합니다.


Summary report @ 15:12:46(+0900) 2024-11-16
  Scenarios launched:  5000
  Scenarios completed: 5000
  Requests completed:  10000
  Mean response/sec: 83.33
  Response time (msec):
    min: 12.3
    max: 654.2
    median: 87.5
    p95: 233.1
    p99: 433.2
  Scenario counts:
    API test: 5000 (100%)
  Codes:
    200: 10000
        

이 결과를 통해 응답 시간, 초당 요청 처리량, 오류율 등을 확인할 수 있습니다.

5. 최적화 및 재테스트

테스트 결과를 바탕으로 애플리케이션을 최적화하고, 다시 테스트를 실행하여 개선 효과를 확인합니다.


// 예: 캐싱 구현
const cache = new Map();

app.get('/api/users', (req, res) => {
    if (cache.has('users')) {
        return res.json(cache.get('users'));
    }
    // 데이터베이스에서 사용자 정보 조회
    const users = fetchUsersFromDB();
    cache.set('users', users);
    res.json(users);
});
        

최적화 후 다시 로드 테스트를 실행하여 성능 향상을 확인합니다.

결론

Artillery를 사용한 로드 테스트는 Node.js 애플리케이션의 성능을 평가하고 개선하는 데 매우 효과적입니다. 정기적인 로드 테스트를 통해 애플리케이션의 확장성과 안정성을 지속적으로 모니터링하고 개선할 수 있습니다. 또한, 다양한 시나리오와 부하 패턴을 시뮬레이션하여 실제 운영 환경에서 발생할 수 있는 문제를 사전에 식별하고 해결할 수 있습니다.

 

반응형