Skip to content

[chore]: Phase 1 주문 흐름 동시성 및 k6 부하 테스트 추가 #32

@ohhalim

Description

@ohhalim

Branch Keyword

phase1-concurrency-load-test

작업 배경

Phase 1 MVP는 주문 생성, 매칭, 체결, 지갑 정산, 원장 기록의 기능 정합성 테스트를 중심으로 검증했다.

하지만 아직 실제 동시 요청 상황과 로컬 부하 상황은 별도 테스트로 검증하지 않았다. market별 lock, pessimistic lock, 오더북 조회 동시 접근, 잔고 음수 방지 정책이 동시성 상황에서도 깨지지 않는지 확인해야 한다.

Outbox/Kafka/WebSocket 확장 전에 Phase 1 거래 코어의 신뢰도를 먼저 검증한다.

작업 내용

JUnit 동시성 테스트

  • 같은 사용자가 동시에 BUY 주문 여러 건을 요청해도 지갑 잔고가 음수가 되지 않는지 검증
  • 같은 maker 주문을 여러 taker가 동시에 체결하려 해도 체결 수량이 주문 수량을 초과하지 않는지 검증
  • 주문 생성/체결 중 오더북 조회가 반복되어도 ConcurrentModificationException이 발생하지 않는지 검증
  • 주문 취소와 체결 요청이 동시에 들어왔을 때 최종 주문 상태와 지갑/원장 상태가 일관적인지 검증
  • 테스트에는 ExecutorService, CountDownLatch 등을 사용해 가능한 한 같은 시점에 요청을 시작하도록 구성

k6 로컬 부하 테스트

  • k6/ 디렉터리에 주문 흐름 부하 테스트 스크립트 추가
  • 로그인 또는 테스트 사용자 준비
  • dev-only deposit API로 테스트 잔고 준비
  • 주문 생성, 오더북 조회, 최근 체결 조회, 지갑 조회를 포함한 시나리오 구성
  • 5xx 비율, p95 응답 시간, 요청 실패율을 threshold로 기록
  • README 또는 테스트 문서에 실행 방법과 해석 기준 추가

완료 기준

  • 동시성 테스트가 반복 실행되어도 지갑 잔고 음수, 주문 수량 초과 체결, 원장 불일치가 발생하지 않는다.
  • 오더북 조회와 주문 처리가 동시에 수행되어도 예외 없이 동작한다.
  • k6 스크립트가 로컬 환경에서 실행 가능하다.
  • 테스트 결과로 확인할 주요 지표와 실행 명령이 문서화되어 있다.
  • Kafka/WebSocket/OutboxPublisher 구현은 이 이슈 범위에 포함하지 않는다.

Metadata

Metadata

Assignees

Labels

choreMaintenance task

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions