Skip to content

Fix / 문의번호 첫 날짜 경합 수정 및 락 대조 실험 - #140

Merged
eraser502 merged 1 commit into
developfrom
codex/inquiry-concurrency
Oct 14, 2026
Merged

eraser502 merged 1 commit into
developfrom
codex/inquiry-concurrency

Conversation

@eraser502

@eraser502 eraser502 commented Oct 14, 2026 •

Copy link
Copy Markdown
Contributor

Overview

첫 문의가 동시에 들어오면 날짜 순번 행 INSERT가 충돌해 정상 요청이 실패합니다. 날짜 행을 INSERT ... ON CONFLICT DO NOTHING으로 초기화한 뒤 기존 비관적 락으로 증가시키도록 변경했습니다. 문의 저장과 순번 변경은 같은 트랜잭션에 남겨 저장 실패 시 함께 롤백합니다.

기존 행에 대한 락의 효과도 PostgreSQL 잠금 대기 관측과 락 제거 대조군으로 검증했습니다. Clock은 테스트에서만 날짜를 제어하며 운영은 기존 서버 기본 시간대 정책을 유지합니다.

Related Issue

PR Checklist

  • 신규·기존 날짜 2/10/100 동시 요청의 성공·저장·고유 번호·최종 순번 검증
  • pg_blocking_pids로 기존 행의 두 번째 트랜잭션 대기와 해제 검증
  • 날짜 경계·번호 상한·마지막 번호 경쟁·저장 실패 롤백 검증
  • ./gradlew clean build --no-daemon: 기본 테스트 13개, 실패·오류·스킵 0
  • 원본·락 제거·수정본의 조건별 1,000건 × 24개 셀, 총 72,000건 실험
  • 요청별 지연·성공 여부·저장 매핑·Hikari 대기·DB 잠금·CPU 원시 결과 보존
  • PR 테스트 워크플로 추가, 배포 빌드의 테스트 생략 제거

Additional Information

실험 코드 총 요청 성공 실패
원본 24,000 23,889 111
원본에서 조회 락만 제거 24,000 7,509 16,491
수정본 24,000 24,000 0

원본의 실패는 첫 행 생성 경합에서 발생했습니다. 모든 실험에서 DB 제약으로 저장된 번호 중복은 없었으나, 락 제거군은 정상 요청이 다수 실패했습니다. 회귀 테스트는 원본 12개 중 3개, 락 제거군 8개가 의도대로 실패하고 수정본은 모두 통과했습니다.

동시 작업 1/8/32/100, 날짜 행 없음/기존 40, 각 3회, 연결 풀 16 조건입니다. 실제 서비스/DB의 closed-loop 로컬 측정이며 HTTP·인증 구간이나 운영 최대 처리량 측정이 아닙니다. 수정본도 높은 동시성에서 잠금·풀 대기가 남고 일부 조건에서 추가 INSERT 비용이 보입니다. 속도 개선율을 주장하지 않습니다. 상세 반복값과 측정 한계는 보고서에 있습니다.

  • 설명: docs/inquiry-concurrency.md
  • 측정 보고서: docs/inquiry-experiment-results.md
  • CSV·원시 결과·코드 해시: docs/evidence/inquiry-20261014/
  • 재현: python3 scripts/inquiry-experiment.py --output /absolute/new-directory

스키마 변경 없음. 실험용 코드·락 제거 변형은 운영 빌드에 반영되지 않습니다. 실험은 기본 CI에서 제외하고 회귀 테스트만 자동 실행합니다. 병합·배포는 수행하지 않았습니다. 별도 자동 리뷰는 모델 용량 오류로 실행되지 않아 작성자가 변경·증거를 직접 점검했으며 사람의 PR 리뷰가 필요합니다.

GitHub CI 확인

Test workflow 성공(1분 27초). CodeRabbit 체크는 리뷰 생략 상태이므로 코드 리뷰 통과로 해석하지 않습니다.

@coderabbitai

coderabbitai Bot commented Oct 14, 2026

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 661d5103-9e0c-40ee-8eec-2e4e0d9c76f2
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@eraser502
eraser502 merged commit f80f035 into develop Oct 14, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bug / 문의번호 첫 날짜 경합 수정 및 비관적 락 검증

1 participant