Skip to content

[QA] QA-12 검증 실행 시점·배치 5모드 · 트랜잭션 경계 · 멱등성 #264

Description

@yslee4601

우선순위 P2 · 출시 전 전수 QA 12/13 · 상위 이슈 #252

배경

인터페이스정의서 6장이 같은 1,200% 검증을 언제 도느냐를 5가지 모드로 나눴다.
"계산 엔진은 하나, 부르는 시점만 5가지"가 설계 원칙인데, 엔진이 정말 하나인지 확인된 적이 없다.
다섯 개의 답이 서로 다르면 이 제품의 신뢰가 무너진다.

검사 대상 — 5가지 실행 모드

모드 언제 결과가 남는 곳
① 즉시 재계산 데이터 변경 직후, 도메인 이벤트 리스너 cap_check(check_kind='REALTIME')
② 확정 전 차단 검증 POST /transactions/{id}/confirm (IF-API-25) cap_check(check_kind='PRE_CONFIRM') · exception_case
③ 수동 재검증 CONT-W02 [한도 재검증] (IF-API-19B) cap_check(check_kind='MANUAL')V28__add_manual_cap_check_kind
④ 월 통합검증 VRUN-W02 실행 (IF-API-48) validation_run 10단계
⑤ 일배치 변경 계약 스캔 batch_watermark

볼 것

  1. 엔진 단일성 — 5개 모드가 정말로 같은 계산 코드를 부르는가. 같은 입력에 같은 답을 주는가
  2. 10단계 진행률 — 운영정책서 제43조 current_step 모델대로 도는가. 실패 시 어디서 멈추고 무엇이 남는가
  3. 트랜잭션 경계
    • 4-3 규칙 3: 확정 검증과 예외 생성은 같은 트랜잭션 — 한도 초과로 막혔는데 예외가 안 만들어지면 그 건이 영영 묻힌다
    • 4-3 규칙 5: POST /contracts 는 같은 트랜잭션에서 예상 스케줄까지 만든다
    • 배치 Step 경계와 롤백 범위 (06_배치_Step_협업계약.md)
  4. 멱등성
    • FUN-040 스케줄 생성 멱등성
    • Idempotency-Key (IF-API-51)
    • ⑩ 확정 후 재실행 시 중복 0건 (시연 10컷 마지막)
    • 데모 시드 재실행
  5. 동시성 — 같은 검증 실행에 두 요청이 동시에 오면(FGC-VRUN-005), 대사 실행 중복(uq_reconciliation_run), V7__run_progress_and_snapshot_locks 의 잠금이 실제로 동작하는가
  6. 확정 후 잠금V30__validation_run_finalization · V31__lock_reconciliation_results_after_validation_finalization전 화면·전 API에서 지켜지는가
  7. 배치가 앱 기동 시 저절로 안 도는가spring.batch.job.enabled: false
  8. 시간대 — SIR-008 Asia/Seoul. 월 경계(말일 23:59 / 1일 00:00) 처리

통과 기준

  • 5개 모드가 같은 입력에 같은 판정을 냄을 테스트로 확인
  • 확정 검증 ↔ 예외 생성 트랜잭션 원자성이 실패 주입 테스트로 확인되었다
  • 재실행 중복 0건이 실측되었다
  • 동시 요청 시나리오가 테스트로 있다
  • 확정 후 잠금이 전 경로에서 확인되었다
  • 월 경계 시각 처리가 확인되었다

공통 규칙 (모든 QA 이슈에 적용)

  • 근거 없는 수정 금지00_인덱스/근거대장.md를 먼저 읽고, 모든 수정 제안에 근거 ID(REG-xx / SRC-xx)를 붙인다. 못 붙이면 "근거 없음 — 확인 필요"로 남긴다.
  • 발견을 3분류한다 — ① 문서가 틀림 ② 구현이 틀림 ③ 아직 구현 안 됨(문서 유효). ③을 ①로 오인해 지우면 설계 의도가 사라진다.
  • 이 이슈에서 직접 고치는 것은 "명백한 오기·1줄짜리"까지. 판단이 필요한 것은 후속 이슈로 분리하고 여기에 링크한다.
  • PR 하나가 커지지 않게 — 검사 결과를 먼저 이 이슈에 표로 남기고, 수정은 그다음에 올린다.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    🩺TEST성능 검증 이슈

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions