Skip to content

[#109] website 동시 삽입 예외처리#110

Merged
1117mg merged 1 commit intodevfrom
fix/109-website-race-condition
Mar 10, 2026
Merged

[#109] website 동시 삽입 예외처리#110
1117mg merged 1 commit intodevfrom
fix/109-website-race-condition

Conversation

@1117mg
Copy link
Copy Markdown
Member

@1117mg 1117mg commented Mar 9, 2026

작업 내용

  • 트랜잭션 커밋 시점이 아닌 try-catch 블록 내에서 예외가 감지되도록 수정했습니다.
  • 동시 요청으로 인한 duplicate key 오류 발생을 방지합니다.

관련 이슈

@1117mg 1117mg requested review from earlgrey02 and mjk25 March 9, 2026 09:33
@1117mg 1117mg self-assigned this Mar 9, 2026
@1117mg 1117mg added the fix 버그 수정 label Mar 9, 2026
@1117mg 1117mg linked an issue Mar 9, 2026 that may be closed by this pull request
@github-actions
Copy link
Copy Markdown

github-actions bot commented Mar 9, 2026

🤖 Gemini Code Review

✅ 변경 사항 요약

  • Website 엔티티 저장 시 saveAndFlush를 사용하여 즉시 DB 제약 조건을 확인하도록 변경.
  • 중복 키 위반(DataIntegrityViolationException) 발생 시 기존 데이터를 재조회하는 로직의 안정성 강화.

🚨 치명적인 이슈 (Critical Issues)

  • 🛑 com.retoday.core.domain.history.service.WebsiteService
    • Problem: JPA의 saveAndFlush 실행 중 DataIntegrityViolationException이 발생하면, 현재 트랜잭션은 즉시 rollback-only 상태로 마킹됩니다. 이 경우 catch 블록에서 데이터를 성공적으로 조회하더라도, 해당 서비스나 상위 호출부의 트랜잭션이 커밋될 때 UnexpectedRollbackException이 발생하여 결국 전체 로직이 실패하게 됩니다.
    • Fix:
      1. 저장 로직을 별도의 트랜잭션(@Transactional(propagation = Propagation.REQUIRES_NEW))으로 분리하여 실패 시 해당 트랜잭션만 롤백되도록 격리하십시오.
      2. 또는 DB 레벨의 UPSERT (Insert on conflict) 구문을 사용하여 예외 발생 자체를 방지하십시오.

✏️ 파일별 상세 리뷰

WebsiteService.kt

  • 📍 Issue: DataIntegrityViolationException 발생 시 findByDomainnull을 반환할 가능성이 낮더라도 IllegalStateException을 던지는 것은 적절한 방어 로직이나, 근본적으로 트랜잭션 오염 문제는 해결되지 않습니다.
  • Improvement: saveAndFlush를 통한 예외 처리 패턴은 JPA 트랜잭션 전파 특성상 안전하지 않으므로, 호출 빈도가 높다면 DB Unique 제약 조건에 의존하기보다 분산 락을 사용하거나 REQUIRES_NEW 전파 옵션을 고려하십시오.

@1117mg 1117mg force-pushed the fix/109-website-race-condition branch from fd0d2a1 to dd1e534 Compare March 10, 2026 01:40
@1117mg 1117mg merged commit ca5452a into dev Mar 10, 2026
@1117mg 1117mg deleted the fix/109-website-race-condition branch March 10, 2026 08:20
1117mg added a commit that referenced this pull request Mar 12, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

fix 버그 수정

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Website race condition 이슈 해결

1 participant