k6로 재고 부하테스트하기

도람·2026년 5월 5일

직접 확인해보자

목록 보기
3/4
post-thumbnail

현재 부트캠프에서 뽀시래기라는 프로젝트를 진행하고 있다.

도메인은 https://pposiraegi.cloud/login 이며, 타임딜 서비스 특성상 특정 시간대에 트래픽이 순간적으로 폭증하는 상황이 발생한다. 이 트래픽을 실제로 버틸 수 있는지 검증하기 위해 부하 테스트 도구인 k6를 사용해보기로 했다.

k6란? JavaScript로 테스트 스크립트를 작성해 HTTP 요청을 대량으로 보내고, 응답 시간·성공률 등을 측정할 수 있는 오픈소스 부하 테스트 도구다.


k6 설치

공식 설치 문서: https://grafana.com/docs/k6/latest/set-up/install-k6/

Windows 환경이므로 PowerShell에서 아래 명령어를 실행한다.

winget install k6 --source winget


k6 테스트 파일 작성

test.js 파일을 생성하고 아래 스크립트를 작성했다.

import http from 'k6/http';
import { sleep, check } from 'k6';

export const options = {
  vus: 300,       // 동시 접속 가상 유저 300명
  duration: '30s', // 30초 동안 테스트 실행
};

// 테스트 시작 전 1회 실행 - 로그인해서 토큰을 가져옴
export function setup() {
  const res = http.post(
    'https://pposiraegi.cloud/api/v1/auth/login',
    JSON.stringify({ email: 'test@test.com', password: '123456' }),
    { headers: { 'Content-Type': 'application/json' } }
  );
  console.log('로그인 응답:', res.status, res.body);
  const token = res.json('data.accessToken');
  console.log('토큰:', token);
  return { token };
}

// 가상 유저 300명이 30초 동안 반복 실행하는 시나리오
export default function (data) {
  const body = `{"orderItems":[{"skuId":839470480585919574,"quantity":1}]}`;

  const res = http.post(
    'https://pposiraegi.cloud/api/v1/orders',
    body,
    {
      headers: {
        'Content-Type': 'application/json',
        'Authorization': `Bearer ${data.token}`,
      }
    }
  );
  console.log('주문 응답:', res.status, res.body);
  check(res, {
    'status is 200': (r) => r.status === 200,
  });
  sleep(1);
}

작성 후 아래 명령어로 실행한다.

k6 run test.js

실행 결과

결과를 해석하면 다음과 같다.

항목결과
checks_succeeded100% (1856개 요청 전부 성공)
평균 응답 시간 (avg)4.15초
90% 응답 시간 (p90)5.73초 이내
95% 응답 시간 (p95)6.09초 이내
최대 응답 시간 (max)9.7초

요청 자체는 전부 성공했지만 응답 속도가 너무 느리다. 평균 4초, 최대 약 10초는 타임딜 서비스에서는 치명적인 수치다. DB 커넥션 풀을 관리하는 HikariCP 튜닝이 필요할 것 같다.

profile
정도를 걷는 엔지니어

0개의 댓글