Skip to content

[Test] 기본 임베딩 모델 단일성·동시성·트랜잭션 검증 - #14

Merged
Gimini-3 merged 4 commits into
developfrom
test/12
Jul 15, 2026
Merged

[Test] 기본 임베딩 모델 단일성·동시성·트랜잭션 검증#14
Gimini-3 merged 4 commits into
developfrom
test/12

Conversation

@Gimini-3

@Gimini-3 Gimini-3 commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

작업 내용

  • 실제 OpenSQL-PG에서 V27 Partial Unique Index의 UNIQUE 여부와 Predicate를 검증했습니다.
  • Boolean 네 조합 중 is_active=true AND is_searchable=true만 최대 한 건으로 제한되는지 확인했습니다.
  • 애플리케이션 사전 조회만 사용한 경쟁 조건과 DB 제약 적용 결과를 비교했습니다.
  • 독립 트랜잭션 동시 저장을 20회 반복해 성공/Unique 위반/최종 불변식을 검증했습니다.
  • 정상 모델 교체, 잘못된 교체 순서, 예외 발생 시 Rollback을 검증했습니다.
  • 100,000건 합성 데이터로 Partial Index 적용 전후 실행 계획과 반복 측정값을 별도 Benchmark로 수집했습니다.
  • 실제 검증 결과와 재현 방법을 .dev/learnings/embedding-model-concurrency-verification.md에 기록했습니다.

운영 Java 코드, V27 Migration, Seed, API 설정은 변경하지 않았습니다.

동시성 검증 결과

사전 조회만 사용:
attempts=2, success=2, finalDefaultCount=2

Partial Unique Index 적용:
repetitions=20, attempts=40
success=20, uniqueViolation=20
unexpectedFailure=0, invariantViolation=0

중복 요청의 실패는 시스템 장애가 아니라 SQLSTATE 23505
uk_embedding_models_one_active_searchable 인덱스가 잘못된 상태를 차단한 결과입니다.

Benchmark 결과

dataSize=100000, warmUp=5, measuredRuns=20
before median=1.084917 ms
after median=0.276500 ms
observed median change=74.514% 감소
partial index size=16384 bytes

로컬 단일 OpenSQL 컨테이너와 합성 데이터에서 얻은 관찰값이므로 운영 성능으로 일반화하지 않습니다.
이 작업의 핵심 효과는 조회 속도가 아니라 동시성 상황의 데이터 불변식 보장입니다.

테스트

./gradlew cleanTest test
./gradlew benchmarkTest --rerun-tasks
  • 기본 테스트: 26개 성공
  • 통합 테스트: 9개 성공
  • Benchmark: 1개 성공
  • 실패/오류/스킵: 0
  • 테스트 전용 스키마 정리 확인
  • OpenSQL-PG: tmaxopensql/postgres:14.6

Closes #12

Summary by CodeRabbit

  • 문서

    • 임베딩 모델의 기본 모델 단일성 보장 방식과 동시성 검증 절차를 문서화했습니다.
    • 모델 교체 시나리오, 롤백 동작, 인덱스 정의 및 성능 측정 결과를 정리했습니다.
  • 테스트

    • 동시에 여러 기본 모델이 등록되는 상황에서 중복을 차단하는 검증을 추가했습니다.
    • 모델 상태 전환과 실패 시 롤백 동작을 검증합니다.
    • 부분 유니크 인덱스 적용 전후의 조회 계획과 성능을 비교하는 벤치마크를 추가했습니다.
  • 개선

    • 일반 테스트와 벤치마크 테스트를 পৃথ로 실행할 수 있도록 테스트 실행 구성을 정리했습니다.

@coderabbitai

coderabbitai Bot commented Jul 14, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 8872561c-1334-427a-a512-372b51914fae

📥 Commits

Reviewing files that changed from the base of the PR and between 1bf956c and e1bc4f1.

📒 Files selected for processing (4)
  • .dev/learnings/embedding-model-concurrency-verification.md
  • build.gradle
  • src/test/java/com/opensource/docgrid/domain/embedding/benchmark/EmbeddingModelIndexBenchmark.java
  • src/test/java/com/opensource/docgrid/domain/embedding/integration/EmbeddingModelConstraintIntegrationTest.java

📝 Walkthrough

Walkthrough

기본 임베딩 모델의 true+true 단일성을 PostgreSQL 부분 유니크 인덱스와 통합 테스트로 검증하고, 동시 삽입·모델 전환·롤백 및 인덱스 전후 실행 계획을 측정·문서화했다. 벤치마크 전용 Gradle 태스크도 추가했다.

Changes

임베딩 모델 제약 검증

Layer / File(s) Summary
부분 유니크 인덱스 계약 및 기본 동작
src/test/java/com/opensource/docgrid/domain/embedding/integration/EmbeddingModelConstraintIntegrationTest.java
테스트 스키마와 인덱스 정의를 확인하고, true+true 모델의 중복 삽입 차단 및 다른 Boolean 조합의 저장을 검증한다.
동시 삽입 및 모델 전환 검증
src/test/java/com/opensource/docgrid/domain/embedding/integration/EmbeddingModelConstraintIntegrationTest.java
독립 트랜잭션 경쟁에서 성공 1건과 SQLSTATE 23505 유니크 위반 1건을 확인하고, 정상 교체·잘못된 순서·롤백 시나리오를 검증한다.
부분 인덱스 실행 계획 벤치마크
build.gradle, src/test/java/com/opensource/docgrid/domain/embedding/benchmark/EmbeddingModelIndexBenchmark.java
벤치마크 태스크를 분리하고, 부분 인덱스 전후의 조회 시간·실행 계획·버퍼·관계 크기를 측정한다.
검증 결과 및 재현 절차 기록
.dev/learnings/embedding-model-concurrency-verification.md
인덱스 정의, 동시성 및 전환 결과, 벤치마크 해석, 테스트 실행과 재현 절차를 기록한다.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Test
  participant Transaction
  participant PostgreSQL
  Test->>Transaction: 두 독립 트랜잭션에서 기본 모델 삽입
  Transaction->>PostgreSQL: true+true INSERT
  PostgreSQL-->>Transaction: 1건 성공, 1건 유니크 위반
  Transaction-->>Test: 삽입 결과 반환
  Test->>PostgreSQL: 최종 기본 모델 COUNT
  PostgreSQL-->>Test: 1건 반환
Loading

Possibly related PRs

  • DocGrid/backend#11: embedding_models의 부분 유니크 인덱스와 기본 모델 등록·조회 기능을 같은 코드 영역에서 다룬다.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch test/12

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.

@Gimini-3
Gimini-3 marked this pull request as ready for review July 15, 2026 05:24
@Gimini-3 Gimini-3 changed the title 기본 임베딩 모델 단일성·동시성·트랜잭션 검증 [Test] 기본 임베딩 모델 단일성·동시성·트랜잭션 검증 Jul 15, 2026
@Gimini-3
Gimini-3 merged commit 78a2ed2 into develop Jul 15, 2026
1 check was pending
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.

[Test] 기본 임베딩 모델 단일성 및 동시성 검증

1 participant