Skip to content
haequizPublic

About

골든벨 퀴즈 서비스 부하테스트

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

haequiz k6 부하 테스트

골든벨 퀴즈 실서버(https://goldenbellquiz.site)에 참여자 여러 명이 동시에 들어와 문제를 푸는 상황을 k6로 재현합니다. 모든 명령은 Windows PowerShell 기준입니다.

무엇을 하나

  • 참여자 1명 = 웹소켓 1개입니다. 200명이면 웹소켓 200개, 500명이면 500개가 열립니다. 운영자의 진행 화면과 관객 화면 연결은 따로 생깁니다.
  • 태블릿과 같은 방식으로 붙습니다. SockJS websocket 경로(/ws/{서버}/{세션}/websocket)로 연결하고, STOMP를 쓰며, 10초마다 하트비트를 보냅니다.
  • 방 만들기와 진행은 운영자가 브라우저에서 직접 합니다. 스크립트는 PIN만 받고, 비밀번호는 필요 없습니다.
  • 참여자 한 명의 동작은 이렇습니다.
    1. 정해진 시간(기본 30초)에 걸쳐 나눠서 입장합니다.
    2. 문제를 받으면 1~6초 뒤에 보기 하나를 골라 한 번 답합니다.
    3. 앞 화면에서 영상이 나오는 동안에는 기다렸다가, 영상이 끝나면(문제 영상은 절반이 지나면) 답합니다.
    4. 결과 발표 15초 뒤에 나갑니다. 운영자가 방 종료를 누르면 그 즉시 나갑니다.
  • 참여자 이름은 1~6학년_1~20반_부하1, 부하2, … 처럼 번호가 붙습니다.

1. 준비 (처음 한 번)

  1. Windows Terminal을 열고 PowerShell 탭을 씁니다. 옛 PowerShell 창에서는 한글이 깨질 수 있습니다.
  2. k6를 설치합니다.
    winget install k6 --source winget
    winget이 안 되면 https://dl.k6.io/msi/k6-latest-amd64.msi 를 받아 설치합니다.
  3. PowerShell 창을 새로 열고 설치가 됐는지 확인합니다.
    k6 version
  4. 이 저장소를 받습니다. Git이 없으면 먼저 winget install Git.Git을 실행합니다.
    cd $HOME\Desktop
    git clone https://github.com/haequiz/k6.git
    cd k6
    이미 받아 두었다면 cd $HOME\Desktop\k6 로 들어간 뒤 git pull 만 하면 됩니다.

2. 방 만들기 (운영자, 브라우저) — 테스트할 때마다

  1. https://goldenbellquiz.site/login 에서 운영자로 로그인합니다.
  2. 진행 화면(/host)에서 테스트할 퀴즈를 고르고 방 만들기를 누른 뒤 PIN 6자리를 확인합니다.
  3. 관객 화면 열기를 누릅니다. 실제 행사처럼 0.4초마다 제출 현황을 받는 연결이 생기고, 문제 영상의 "절반 지남" 신호도 이 화면이 보냅니다.
  4. 테스트마다 새 방을 만드세요. 같은 방에서 다시 돌리면 같은 이름이 "이미 접속 중"으로 막힙니다.

3. 실행

PowerShell에서 k6 폴더로 들어간 뒤 아래 중 하나를 실행합니다. 실행하면 PIN을 물어봅니다.

3-1. 시험 실행 — 20명 (처음 한 번 권장)

$PIN = Read-Host "방 PIN"
k6 run -e PIN=$PIN -e PLAYERS=20 -e JOIN_SEC=10 quiz-load.js
  • 20명이 10초 안에 들어옵니다. 진행 화면의 참여자 수가 20이 되면 4장대로 진행합니다.
  • 끝났을 때 hq_fail이 0이면 200명·500명 테스트로 넘어갑니다.

3-2. 200명 테스트 — 실제 행사 규모

$PIN = Read-Host "방 PIN"
k6 run -e PIN=$PIN -e PLAYERS=200 -e JOIN_SEC=30 quiz-load.js
  • 웹소켓 200개가 열리고, 200명이 30초에 걸쳐 들어옵니다.
  • 진행 화면 참여자 수가 200이 되면 4장대로 진행합니다.
  • 정상이면 다음처럼 나옵니다.
    • hq_joined = 200
    • hq_questions_received = 200 × 문항 수
    • hq_answered = 200 × 문항 수
    • hq_fail = 0

3-3. 500명 테스트 — 서버 정원 끝까지

$PIN = Read-Host "방 PIN"
k6 run -e PIN=$PIN -e PLAYERS=500 -e JOIN_SEC=60 quiz-load.js
  • 웹소켓 500개가 열리고, 500명이 60초에 걸쳐 들어옵니다.
  • 한 방 정원이 딱 500명입니다(서버 설정 APP_MAX_PLAYERS). 그래서 다음 두 가지를 지켜야 합니다.
    • 다른 사람(휴대폰 등)이 그 방에 먼저 들어가 있으면 k6 참여자 일부가 "정원이 가득 찼습니다"로 거절되고 hq_fail이 올라갑니다. 빈 방에서 돌리세요.
    • 500명보다 많이 시험하려면 서버의 APP_MAX_PLAYERS를 먼저 늘려야 합니다.
  • 진행 화면 참여자 수가 500이 되면(약 1분) 4장대로 진행합니다. 문제마다 마감 전에 10초 이상 기다려 주세요.
  • 정상이면 다음처럼 나옵니다.
    • hq_joined = 500
    • hq_questions_received = 500 × 문항 수
    • hq_answered = 500 × 문항 수
    • hq_fail = 0
  • 실행하는 PC는 테스트가 끝날 때까지 절전 모드로 들어가지 않게 하고, 다른 무거운 프로그램은 닫아 두세요.

옵션 (-e 이름=값)

옵션 기본값 뜻
PIN (필수) 방 PIN 6자리
PLAYERS 200 참여자 수 = 웹소켓 수 (최대 500)
JOIN_SEC 30 이 시간(초)에 걸쳐 나눠서 입장
THINK_MIN_SEC / THINK_MAX_SEC 1 / 6 문제를 받고 답하기까지 걸리는 시간(초)
HOLD_MIN 60 최대 접속 유지 시간(분). 방이 끝나면 그 전에 끝납니다
NAME_PREFIX 부하 이름 앞부분. 같은 방에서 다시 돌려야 할 때 부하B처럼 바꿉니다
API https://api.goldenbellquiz.site 백엔드 주소
ORIGIN https://goldenbellquiz.site 웹소켓 Origin 헤더 (서버 허용 목록과 같아야 합니다)

중간에 멈추려면 PowerShell에서 Ctrl + C를 누릅니다. 그때까지의 결과가 나옵니다.


4. 진행 (테스트 중 운영자가 할 일)

  1. 진행 화면의 참여자 수가 목표 인원(20 · 200 · 500)이 될 때까지 기다립니다.
  2. 퀴즈 시작을 누릅니다.
  3. 문제마다 아래를 반복합니다. 참여자는 문제를 받고 1~6초 안에 답합니다.
    1. 최소 7~10초를 기다립니다. 500명이면 10초 이상 기다립니다.
    2. 답안 마감을 누릅니다.
    3. 다음 문제를 누릅니다.
  4. 마지막 문제 다음에는 결과 발표를 누릅니다. 15초 뒤 참여자가 모두 나가고 테스트가 끝납니다. 방 종료를 누르면 바로 끝납니다.

영상이 있는 문제는 관객 화면이 열려 있어야 절반 지점에서 답을 받기 시작합니다. 관객 화면 없이 테스트할 때는 진행 화면에서 영상 건너뛰기를 누르세요.

5. 결과 보기

테스트가 끝나면 PowerShell에 요약이 나오고, 같은 폴더에 result-<PIN>.json이 저장됩니다.

항목 뜻 기준
ws_sessions 열린 웹소켓 수 (참여자 수와 같으면 전원 연결)
hq_connect_ms 웹소켓 연결 → STOMP 연결 완료
hq_joined · hq_join_ms 입장 성공 인원 · 입장 응답 시간 p95 < 1초
hq_answered · hq_answer_ms 답 제출 수 · 답 응답 시간 p95 < 0.5초
hq_questions_received · hq_results_received · hq_ended_received 문제 · 결과 · 최종 결과를 받은 횟수
hq_fail 실패 수 (응답 실패 · STOMP 오류 · 연결 오류) 0
hq_late_answers 진행자가 먼저 마감해서 늦게 도착한 답. 실패로 치지 않습니다. 마감을 6초보다 일찍 누르면 생깁니다
hq_video_order 영상 시작 신호보다 문제가 먼저 도착해 잠긴 문제에 답한 횟수 (서버 메시지 순서 문제, hq_fail에도 포함) 0
문항별 도착 (맨 아래) 문제마다 받은 인원과 첫 도착부터 마지막 도착까지 걸린 시간. 서버가 전원에게 보내는 데 걸린 시간입니다

기준을 넘은 항목은 ✗로 표시되고, k6가 오류 코드(99)로 끝납니다.

주의

  • 실서버 대상입니다. 행사 중에는 돌리지 마세요.
  • 테스트한 방과 참여자 기록은 운영 DB에 남습니다. 테스트용으로 만든 퀴즈는 출제 화면에서 삭제할 수 있습니다.
  • 이 테스트는 PC 한 대에서 서버 처리 능력을 봅니다. 학교 와이파이에서 태블릿이 잘 붙는지는 현장에서 태블릿으로 따로 확인해야 합니다.

About

골든벨 퀴즈 서비스 부하테스트

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages