Skip to content

[FEAT] elasticsearch에 경매 상태 변화 반영#95

Merged
imprity merged 10 commits into
devfrom
feat/elasticsearch-state
May 22, 2026
Merged

[FEAT] elasticsearch에 경매 상태 변화 반영#95
imprity merged 10 commits into
devfrom
feat/elasticsearch-state

Conversation

@imprity

@imprity imprity commented May 20, 2026

Copy link
Copy Markdown
Contributor

📝 작업 내용

  • 경매가 취소될 경우 elasticsearch에 변경된 경매상태를 반영합니다.
  • DB의 경매 상태를 매일 자정마다 elasticsearch에 반영해주는 scheduler를 작성했습니다.
  • scheduler의 작업 내역을 기록하는 auction_document_reindex_jobs테이블을 추가했습니다.
  • scheduler를 위한 테스트를 작성했습니다.

✅ 체크리스트 (Checklist)

  • 브랜치 이름 규칙을 준수했나요? (예: feat/login)
  • 코딩 컨벤션을 준수했나요?
  • 기능에 대한 테스트 코드를 작성/수행했나요?
  • 불필요한 주석이나 로그(console.log)를 제거했나요?

💬 기타 사항

경매 취소는 상태는 이 서버가 직접 변경하기 때문에 저희 서버가 이를 반영하도록 했습니다.

Scheduler는 뭔가 과한 solution처럼 보일 수도 있지만 저희 architecture 구조상 elasticsearch와 database가 점점 달리지는 것은 어쩔 수 없는 현상이라 생각하여 추가했습니다.

또한 client가 READY혹은 ACTIVE한 경매만 보고 싶어 할 경우 Elasticsearch를 통해 검색 결과를 제공하는 것이 아닌 DB를 통해 검색 결과를 제공하도록 수정하였습니다.

왜냐하면 이 두 상태의 경매는 성능을 포기해서라도 정확한 검색 결과를 제공하는 것이 중요하다고 생각했기 때문입니다.

또 READY, 혹은 ACTIVE한 경매는 시간이 지나면 자연스럽게 DONE, NO_BID, 혹은 CANCELLED된 경매로 상태가 바뀌기 때문에 경매 검색 조회 결과 수가 자연스럽게 조절되어서 성능 면에서 크게 문제가 없을거라 생각했습니다.

이 PR이 merge 된다면 README에 있는 ERD를 수정하는 PR도 추후에 올리겠습니다.

Summary by CodeRabbit

  • New Features

    • 검색 인덱스 자동 초기화 및 앨리아스 기반 인덱스 관리
    • 정기 재인덱싱 작업과 작업 상태 추적 기능
    • 경매 취소 이벤트를 검색 인덱스에 반영하는 비동기 처리
  • Improvements

    • 커서 기반 페이지네이션으로 경매 목록 조회 성능 개선
    • 검색 실패 시 DB로의 안전한 폴백 확장
  • Configuration

    • Elasticsearch 및 재인덱싱 스케줄러 설정 추가
  • Tests

    • 재인덱싱 통합 테스트 추가

Review Change Stack

imprity added 4 commits May 17, 2026 22:39
elasticsearch의 경매 정보가 DB의 경매 정보와 틀어지는 것을 막고자 이를
막아주는 scheduler를 구현했습니다.
AuthIntegrationTest뿐만 아니라 많은 테스트가 임시 유저 이메일로
test@test.com 쓰기 때문에 test@test.com를 가진 유저가 DB에 이미 존재할 경우
테스트가 실패하는 문제가 있었습니다.

이 commit은 이를 해결합니다.
@coderabbitai

coderabbitai Bot commented May 20, 2026

Copy link
Copy Markdown

Walkthrough

별칭 기반 Elasticsearch 인덱스 초기화와 주기적 재인덱싱(잡 기록·진행 추적), 커서 기반 배치 색인, 경매 취소 시 비동기 검색 문서 갱신, 검색 분기(DB/Elasticsearch) 조정, 관련 설정·테스트가 추가됩니다.

변경 사항

Elasticsearch 재인덱싱 및 별칭 관리

Layer / File(s) Summary
인덱스 별칭 및 초기화 기초
src/main/java/com/example/auction/domain/auction/search/util/AuctionDocumentUtil.java, src/main/java/com/example/auction/domain/auction/search/document/AuctionDocument.java, src/main/java/com/example/auction/common/initializer/ElasticsearchIndexInitializer.java
별칭 상수(ALIAS_NAME)와 타임스탬프 기반 신규 인덱스명 생성 유틸이 추가되었습니다. AuctionDocument는 별칭을 indexName으로 사용하도록 변경되고 자동 인덱스 생성이 비활성화됐으며, 취소 상태를 반영하는 setCancelled(...)가 추가되었습니다. 애플리케이션 시작 시 별칭/초기 인덱스를 검사·생성하는 Initializer가 추가되었습니다.
재인덱싱 작업 데이터 모델
src/main/java/com/example/auction/domain/auction/search/enums/AuctionDocumentReindexJobStatus.java, src/main/java/com/example/auction/domain/auction/search/entity/AuctionDocumentReindexJob.java, src/main/java/com/example/auction/domain/auction/search/repository/AuctionDocumentReindexJobRepository.java, src/main/resources/db/migration/V8__create_document_reindex_job.sql
재인덱싱 잡 상태 enum과 JPA 엔터티·리포지토리, DB 마이그레이션 스크립트가 추가되어 재인덱싱 작업의 상태·커서·새 인덱스명을 영속화합니다.
커서 기반 경매 페이징 조회
src/main/java/com/example/auction/domain/auction/repository/CustomAuctionRepository.java, src/main/java/com/example/auction/domain/auction/repository/CustomAuctionRepositoryImpl.java
findByCursor(Long auctionCursor, int size) 메서드를 추가해 재인덱싱 시 커서 기반으로 경매를 오름차순 페이징 조회할 수 있게 했습니다.
재인덱싱 서비스 및 헬퍼
src/main/java/com/example/auction/domain/auction/search/service/AuctionDocumentReindexServiceHelper.java, src/main/java/com/example/auction/domain/auction/search/service/AuctionDocumentReindexService.java
헬퍼는 오래된 작업 삭제, 잡 저장(flush), 커서 기반 경매 조회 및 alias 포인팅(이전 인덱스에서 제거 후 새 인덱스에 추가)을 제공합니다. 서비스는 스케줄된 재인덱싱(타임아웃 60분 제한, 배치 벌크 인덱싱, 잡 상태 갱신, 앨리어스 전환 및 구 인덱스 삭제)을 구현합니다.
취소된 경매의 비동기 문서 갱신
src/main/java/com/example/auction/domain/auction/search/dto/AuctionCancelledDocument.java, src/main/java/com/example/auction/domain/auction/search/service/AuctionElasticsearchService.java, src/main/java/com/example/auction/domain/auction/service/AuctionService.java, src/main/java/com/example/auction/domain/auction/search/exception/AuctionSearchErrorEnum.java
취소 DTO가 추가되고, AuctionService.cancelAuction는 취소 이벤트로 AuctionCancelledDocument를 발행합니다. AuctionElasticsearchService는 비동기 이벤트 핸들러로 문서를 조회·갱신하며, 문서 미존재 시 에러를 던지고 저장 실패는 최대 3회 재시도(지수 백오프)를 적용합니다. 에러 enum도 추가됐습니다.
검색 진입 분기(Elasticsearch vs DB) 조정
src/main/java/com/example/auction/domain/auction/search/service/AuctionSearchService.java
검색 조건 헬퍼(conditionOnlyContainsReadyOrActive)와 분기 로직을 확장해 특정 상태와 키워드 조건에서는 Elasticsearch를 호출하지 않고 DB 조회로 폴백하도록 변경했습니다.
설정 및 테스트
src/main/resources/application*.yml, src/main/resources/db/migration/V8__create_document_reindex_job.sql, src/test/java/.../AuctionDocumentReindexServiceHelperTest.java, src/test/java/.../AuctionServiceCancelTest.java, src/test/java/.../AuthIntegrationTest.java
스케줄러 크론과 개발/테스트용 Elasticsearch 인덱스 생성 설정이 추가되었습니다. 재인덱싱 통합 테스트(통째 DB 초기화 후 재인덱싱 검증)와 취소 관련 단위 테스트(Flyway 도입, Mockito stubbing 보완)가 추가/수정되었습니다.

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

  • GigaMak2/auction#32: AuctionService.cancelAuction 수정과 취소 이벤트 처리 관련 변경이 겹칩니다.
  • GigaMak2/auction#78: 기존 Elasticsearch 문서/리포지토리/서비스 도입과 관련되어, 본 PR은 별칭 기반 관리·재인덱싱을 확장합니다.
  • GigaMak2/auction#86: AuctionSearchService의 DB/Elasticsearch 분기 로직을 수정한 PR로 코드 레벨 연관이 있습니다.

제안 레이블

enhancement, Test

제안 리뷰어

  • hhjo96
  • minky5004
  • soomin0209
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed PR 제목이 main 변경 내용인 'elasticsearch에 경매 상태 변화 반영'을 명확하고 간결하게 설명하고 있습니다.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description check ✅ Passed PR 설명이 template의 모든 필수 섹션을 포함하고 있으며, 작업 내용, 체크리스트, 기타 사항이 충실하게 작성되어 있습니다.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ 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 feat/elasticsearch-state

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 and usage tips.

@imprity imprity assigned imprity and unassigned imprity May 20, 2026
@imprity imprity added the enhancement New feature or request label May 20, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@src/main/java/com/example/auction/common/initializer/ElasticsearchIndexInitializer.java`:
- Around line 36-74: The run method (ElasticsearchIndexInitializer.run) is
TOCTOU-vulnerable because it checks alias/index existence via aliasOps.exists()
then creates a physical index and binds the alias in separate steps; fix by
making the alias switch/create atomic or serialized: either acquire a
distributed lock (e.g., Redis/DB lock) around the critical section (wrap run's
existence check, index creation, and alias binding) or, preferably, perform an
atomic alias swap using Elasticsearch's updateAliases API in a single
AliasActions request (create the new indexName from
AuctionDocumentUtil.getNewIndexName, create the index if needed, then call
targetOps.alias(...) with a single AliasActions that adds the alias to indexName
and removes it from any other indices so the alias change is atomic); ensure
code references aliasOps, targetOps, and AuctionDocumentUtil.getNewIndexName are
updated accordingly.

In
`@src/main/java/com/example/auction/domain/auction/search/service/AuctionDocumentReindexService.java`:
- Around line 33-114: The reindexAuctionDocuments method can exit on exceptions
(during index creation, elasticsearch.bulkIndex, alias switch, or delete)
leaving the job IN_PROGRESS and still logging success; wrap the main reindex
flow in a try/catch (inside
AuctionDocumentReindexService.reindexAuctionDocuments), on any exception set
newStatus = AuctionDocumentReindexJobStatus.FAILED, call
job.updateJobStatus(newStatus) and helper.saveJob(job) before rethrowing or
returning, and only emit the final success log when newStatus == DONE (i.e.,
after helper.pointAliasAtNewIndex and old index deletion complete successfully);
ensure all paths (timeout -> FAILED and exception paths) persist the job status
via helper.saveJob and include references to operations like
elasticsearch.indexOps(...).create, elasticsearch.bulkIndex(...),
helper.pointAliasAtNewIndex and elasticsearch.indexOps(...).delete.
- Around line 108-109: pointAliasAtNewIndex(AuctionDocumentUtil.ALIAS_NAME,
newIndexName) can return an empty list; guard the deletion by checking
oldInexes.isEmpty() and skip calling
elasticsearch.indexOps(IndexCoordinates.of(...)).delete() when empty to avoid
IllegalArgumentException. Locate where oldInexes is assigned and replace the
unconditional delete call
(elasticsearch.indexOps(IndexCoordinates.of(oldInexes.toArray(new
String[0]))).delete()) with a simple if (!oldInexes.isEmpty()) { ... } around
that delete.

In
`@src/main/java/com/example/auction/domain/auction/search/service/AuctionElasticsearchService.java`:
- Around line 84-88: The current handling in AuctionElasticsearchService where
maybeDoc.isEmpty() leads to an immediate break must be changed so "not found" is
treated as a transient, retriable case instead of aborting; remove the break and
instead route the event (using the event.auctionId() and maybeDoc check) into
the existing retry/requeue flow (or enqueue a retry with backoff) and only
log/fail permanently after the final retry attempt. Ensure the code path around
maybeDoc.isEmpty() uses the service's retry mechanism (or a retry count on the
event) so deletes/cancels aren’t lost due to temporary index propagation delays.

In `@src/main/resources/db/migration/V8__create_document_reindex_job.sql`:
- Line 4: The migration column new_index_name currently allows NULL but the
entity property newIndexName is annotated nullable = false; update the
V8__create_document_reindex_job.sql DDL so the column is defined as NOT NULL
(e.g., new_index_name varchar(256) NOT NULL) to match the entity constraint and
preserve data integrity; ensure the trailing comma/statement punctuation stays
correct in the CREATE TABLE or ALTER TABLE statement so the migration applies
cleanly.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 76fca3ce-e77e-409b-9fee-7cac93131546

📥 Commits

Reviewing files that changed from the base of the PR and between 5b12ff7 and c91acfa.

📒 Files selected for processing (20)
  • src/main/java/com/example/auction/common/initializer/ElasticsearchIndexInitializer.java
  • src/main/java/com/example/auction/domain/auction/repository/CustomAuctionRepository.java
  • src/main/java/com/example/auction/domain/auction/repository/CustomAuctionRepositoryImpl.java
  • src/main/java/com/example/auction/domain/auction/search/document/AuctionDocument.java
  • src/main/java/com/example/auction/domain/auction/search/dto/AuctionCancelledDocument.java
  • src/main/java/com/example/auction/domain/auction/search/entity/AuctionDocumentReindexJob.java
  • src/main/java/com/example/auction/domain/auction/search/enums/AuctionDocumentReindexJobStatus.java
  • src/main/java/com/example/auction/domain/auction/search/repository/AuctionDocumentReindexJobRepository.java
  • src/main/java/com/example/auction/domain/auction/search/service/AuctionDocumentReindexService.java
  • src/main/java/com/example/auction/domain/auction/search/service/AuctionDocumentReindexServiceHelper.java
  • src/main/java/com/example/auction/domain/auction/search/service/AuctionElasticsearchService.java
  • src/main/java/com/example/auction/domain/auction/search/util/AuctionDocumentUtil.java
  • src/main/java/com/example/auction/domain/auction/service/AuctionService.java
  • src/main/resources/application-dev.yml
  • src/main/resources/application-test.yaml
  • src/main/resources/application.yml
  • src/main/resources/db/migration/V8__create_document_reindex_job.sql
  • src/test/java/com/example/auction/domain/auction/search/service/AuctionDocumentReindexServiceHelperTest.java
  • src/test/java/com/example/auction/domain/auction/service/AuctionServiceCancelTest.java
  • src/test/java/com/example/auction/domain/auth/AuthIntegrationTest.java

Comment thread src/main/resources/db/migration/V8__create_document_reindex_job.sql Outdated
imprity added 5 commits May 20, 2026 13:51
검색 조건에서 READY나 ACTIVE만 경매만 조회를 원할 경우 DB를 이용해
검색하도록 변경하였습니다.

READY, ACTIVE한 경매는 중요한 경매이기 때문에 상태가 틀려서는 안됩니다.
그렇기 때문에 DB와 차이가 날 수 있는 elasticsearch가 아닌 DB에서 직접
경매 검색 결과를 가져오도록 수정하였습니다.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/main/java/com/example/auction/common/initializer/ElasticsearchIndexInitializer.java (1)

61-71: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

인덱스 생성과 alias 연결 결과를 확인하세요.

IndexOperations#create(settings, mapping)IndexOperations#alias(AliasActions)는 모두 작업 성공 여부를 boolean으로 반환합니다. 현재 코드는 반환값을 무시하고 성공 로그를 남기고 있어, Elasticsearch가 false를 반환한 경우에도 초기화가 성공한 것처럼 진행될 수 있습니다. false일 때 예외를 발생시켜야 이후 재인덱싱이나 검색 시점에 더 늦게 깨지지 않습니다.

수정 예시
-        targetOps.create(
+        boolean created = targetOps.create(
                 docOps.createSettings(AuctionDocument.class),
                 docOps.createMapping(AuctionDocument.class));
+        if (!created) {
+            throw new IllegalStateException("auction index 생성에 실패했습니다: " + indexName);
+        }
         log.info("[ElasticsearchIndexInitializer] 인덱스 생성 - indexName={}", indexName);
 
         // auction-auction alias를 생성
-        targetOps.alias(new AliasActions(new AliasAction.Add(
+        boolean aliased = targetOps.alias(new AliasActions(new AliasAction.Add(
                 AliasActionParameters.builder()
                         .withIndices(indexName)
                         .withAliases(alias)
-                        .build())));
+                        .build())));
+        if (!aliased) {
+            throw new IllegalStateException("auction alias 연결에 실패했습니다: " + alias + " -> " + indexName);
+        }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@src/main/java/com/example/auction/common/initializer/ElasticsearchIndexInitializer.java`
around lines 61 - 71, The index creation and alias application return booleans
but the code ignores them; update the block around
targetOps.create(docOps.createSettings(AuctionDocument.class),
docOps.createMapping(AuctionDocument.class)) and targetOps.alias(...) to capture
their boolean results, log failures with context (indexName, alias) and throw an
exception (or rethrow) when either returns false so initialization fails fast
instead of continuing on silent failure; reference targetOps, docOps,
AuctionDocument, indexName, alias, IndexOperations#create and
IndexOperations#alias when making the checks and error handling.
♻️ Duplicate comments (1)
src/main/java/com/example/auction/domain/auction/search/service/AuctionDocumentReindexService.java (1)

102-103: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

빈 old index 목록은 삭제 호출을 건너뛰세요.

첫 실행이거나 alias가 아직 없던 경로라면 pointAliasAtNewIndex()가 빈 목록을 돌려줄 수 있습니다. 지금처럼 무조건 삭제를 호출하면 삭제 대상이 없을 때도 실패 경로를 탈 수 있으니, oldIndexes.isEmpty() 가드가 필요합니다.

수정 예시
             List<String> oldIndexes = helper.pointAliasAtNewIndex(AuctionDocumentUtil.ALIAS_NAME, newIndexName);
-            elasticsearch.indexOps(IndexCoordinates.of(oldIndexes.toArray(new String[0]))).delete();
+            if (!oldIndexes.isEmpty()) {
+                elasticsearch.indexOps(IndexCoordinates.of(oldIndexes.toArray(new String[0]))).delete();
+            }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@src/main/java/com/example/auction/domain/auction/search/service/AuctionDocumentReindexService.java`
around lines 102 - 103, The code calls elasticsearch.indexOps(...).delete()
unconditionally after helper.pointAliasAtNewIndex(...), which can return an
empty list; add a guard using oldIndexes.isEmpty() in
AuctionDocumentReindexService (around the block that calls
helper.pointAliasAtNewIndex(AuctionDocumentUtil.ALIAS_NAME, newIndexName)) so
you only call elasticsearch.indexOps(IndexCoordinates.of(...)).delete() when
oldIndexes is not empty to avoid erroneous delete calls on first run or when no
alias exists.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@src/main/java/com/example/auction/domain/auction/search/service/AuctionDocumentReindexService.java`:
- Around line 39-48: The cleanup call helper.deleteOldReindexJobs(monthAgo) runs
before helper.saveJob(...) and outside the try, so if cleanup throws the current
run is never recorded; move the cleanup so job creation happens first and ensure
deleteOldReindexJobs is executed inside the same try/catch that surrounds the
reindex flow (or at minimum after AuctionDocumentReindexJob job =
helper.saveJob(...) and before the operation that can fail) so any exception
will follow the same failure handling path (use the existing try block around
the reindex flow that sets FAILED state via the same save/mark logic).

---

Outside diff comments:
In
`@src/main/java/com/example/auction/common/initializer/ElasticsearchIndexInitializer.java`:
- Around line 61-71: The index creation and alias application return booleans
but the code ignores them; update the block around
targetOps.create(docOps.createSettings(AuctionDocument.class),
docOps.createMapping(AuctionDocument.class)) and targetOps.alias(...) to capture
their boolean results, log failures with context (indexName, alias) and throw an
exception (or rethrow) when either returns false so initialization fails fast
instead of continuing on silent failure; reference targetOps, docOps,
AuctionDocument, indexName, alias, IndexOperations#create and
IndexOperations#alias when making the checks and error handling.

---

Duplicate comments:
In
`@src/main/java/com/example/auction/domain/auction/search/service/AuctionDocumentReindexService.java`:
- Around line 102-103: The code calls elasticsearch.indexOps(...).delete()
unconditionally after helper.pointAliasAtNewIndex(...), which can return an
empty list; add a guard using oldIndexes.isEmpty() in
AuctionDocumentReindexService (around the block that calls
helper.pointAliasAtNewIndex(AuctionDocumentUtil.ALIAS_NAME, newIndexName)) so
you only call elasticsearch.indexOps(IndexCoordinates.of(...)).delete() when
oldIndexes is not empty to avoid erroneous delete calls on first run or when no
alias exists.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: ca388a46-7c41-4824-ae21-b4a75f4bc032

📥 Commits

Reviewing files that changed from the base of the PR and between c91acfa and 9ca6b4d.

📒 Files selected for processing (6)
  • src/main/java/com/example/auction/common/initializer/ElasticsearchIndexInitializer.java
  • src/main/java/com/example/auction/domain/auction/search/exception/AuctionSearchErrorEnum.java
  • src/main/java/com/example/auction/domain/auction/search/service/AuctionDocumentReindexService.java
  • src/main/java/com/example/auction/domain/auction/search/service/AuctionElasticsearchService.java
  • src/main/java/com/example/auction/domain/auction/search/service/AuctionSearchService.java
  • src/main/resources/db/migration/V8__create_document_reindex_job.sql
✅ Files skipped from review due to trivial changes (1)
  • src/main/java/com/example/auction/domain/auction/search/exception/AuctionSearchErrorEnum.java

- AuctionDocumentReindexJob 정리 예외가 job에 기록되도록 수정
- 옛 인덱스가 없을 경우 삭제 호출을 하지 않기
@imprity imprity added the Test 테스트 관련 label May 20, 2026

@soomin0209 soomin0209 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

@imprity imprity merged commit 4d98cf1 into dev May 22, 2026
2 checks passed
@imprity imprity deleted the feat/elasticsearch-state branch May 22, 2026 11:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request Test 테스트 관련

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants