Skip to content

test(S15P11A705-239): 부하 프로파일 실행과 병목 관측을 추가한다 - #160

Merged
minyongP merged 15 commits into
devfrom
test/S15P11A705-239-load-profiles
Aug 3, 2026
Merged

test(S15P11A705-239): 부하 프로파일 실행과 병목 관측을 추가한다#160
minyongP merged 15 commits into
devfrom
test/S15P11A705-239-load-profiles

Conversation

@minyongP

@minyongP minyongP commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

요약

1단계 종단 검증 하네스(#142) 위에 부하 프로파일을 얹어 프로파일 4종 × 읽기·쓰기 + 혼합 2판(총 10회)을 실측했다. 첫 병목은 HikariCP 풀(10 — 150VU에서 대기 154), 둘째는 피드(20VU에서 p50 746ms). 10조합 전부 부하 전후 불변식 위반 수가 기준선(4,696)에서 불변 — 150VU 쓰기에서도 core 정합이 깨지지 않았다. 산출물은 관측 보고서(BI-37)이며 합격선 없음, 개선거리는 티켓 후보로만 남겼다.

Jira (필수)

  • 키: S15P11A705-239

변경 사항

  • loadtest/k6/lib/profiles.js — 프로파일 4종 stages(smoke 즉시 점프 — 0→1 램프는 요청 0건이 되는 함정 실측)
  • loadtest/k6/load-read.js — 읽기 4부류 VU 고정, 지도 VU 절반은 heavy 회원(관측 1 판정용)
  • loadtest/k6/load-write.js — 처리량(회원/VU) + 경합(VU 10 고정, BD-11 판정용). 삭제는 Collection 먼저 — 역순은 force 연쇄 탓에 가짜 404가 오류율을 1/7 부풀린다
  • loadtest/k6/load-mixed.js — 가중 혼합 여정(출시 전 추정 가중치 명시), average·stress 전용
  • loadtest/tools/{setup,teardown}-load-members.sql — 회원 풀 일괄 생성(소셜 계정 포함)·집합 삭제(골든 가드)
  • loadtest/tools/poll-metrics.sh — actuator prometheus 5초 폴링(hikari·스레드·힙; tomcat_threads_* 미노출은 티켓 후보)
  • loadtest/tools/run-load.sh — 조합 단위 오케스트레이션 + 불변식 전후 게이트 + trap 정리. --summary-trend-stats로 p99 확보(기본 export엔 없음)
  • loadtest/tools/collate-load.py — 10회 산출물 → 보고서 표
  • docs/backend/implements/BI-37 — 결과 표·병목 판정·1단계 관측 2건 해소·개선 티켓 후보 5건·한계
  • docs/backend/worklog/2026-08-02-S15P11A705-239-load-profiles.md · loadtest/README.md 부하 절

테스트 / 검증

  • ./gradlew clean check --no-daemon — BUILD SUCCESSFUL (리베이스 후 재실행. Java 소스 무변경)
  • DB 변경 시 PostgreSQL 통합 테스트 (해당 없음)
  • migration 변경 시 빈 DB migration 테스트 (해당 없음)
  • API 계약 변경 시 관련 문서 갱신 — 계약 변경 없음. 하네스 문서는 README·BI-37

RED/GREEN 증거 (조각별 상세는 BI-37):

  • RED: 조각마다 파일 부재/스텁 실패를 먼저 관측. 게이트 검증은 실측 — smoke 0요청(램프 함정)·mixed 골든 토큰 누락(k6 exit 107)·가짜 404(오류율 14.29%)를 각각 재현한 뒤 수정으로 해소
  • GREEN: bash loadtest/tools/run-load.sh all10/10 완주, 총 요청 1,031,993건, 실패 32건(0.003%, read-stress 1초 창의 타임아웃), 전 조합 불변식 4,696 전후 불변, 회원 풀 전량 정리(3007 복원)
  • Regression: 기능 하네스(run.sh)와 무간섭 — 1단계 파일 무수정. 리베이스 후 clean check 통과

리뷰 포인트

  1. run-load.sh의 판정 계약 — k6 오류·불변식 변동은 실패, 불변식 위반 "수" 자체는 리포트만(시드 기준선 4,696). BI-33과 같은 구분
  2. 경합 시나리오의 VU 10 고정(프로파일 간 비교 가능성) — 처리량 VU와 분리한 설계가 타당한지

미결 / 후속

  • 개선 티켓 후보 5건(BI-37 말미): HikariCP 풀 산정 · 피드 지연 분석 · tomcat 메트릭 노출 · ai 고아 정리(이정헌 합의) · read-stress 순간 정지 재현
  • 자연어 검색 부하는 범위 밖(OpenAI 실 호출) — 별도 티켓
  • k6 백그라운드+리다이렉트는 1분 이상 실행에서 stdout 잘림(Windows) — README 미기재, 운영 메모

🤖 Generated with Claude Code

minyongP added 15 commits August 3, 2026 09:33
Collection을 먼저 지우고 Record를 force로 지우면 두 삭제 엔드포인트를 다 치면서
상태 코드가 깨끗하다. 반대 순서는 force 연쇄가 Collection을 먼저 지워 뒤이은
Collection 삭제가 매번 404 — write 오류율이 1/7(14.29%)로 부풀었다. 순서 교정 후 0%.
@minyongP minyongP added the test 테스트 추가·수정 label Aug 3, 2026
@minyongP minyongP self-assigned this Aug 3, 2026
@minyongP
minyongP merged commit 6b78eda into dev Aug 3, 2026
2 checks passed
@minyongP
minyongP deleted the test/S15P11A705-239-load-profiles branch August 3, 2026 00:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

test 테스트 추가·수정

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant