Skip to content

[Refactor] External Api Isolation in 방 생성#350

Open
seongjunnoh wants to merge 14 commits intodevelopfrom
refactor/#294-external-api-isolation
Open

[Refactor] External Api Isolation in 방 생성#350
seongjunnoh wants to merge 14 commits intodevelopfrom
refactor/#294-external-api-isolation

Conversation

@seongjunnoh
Copy link
Collaborator

@seongjunnoh seongjunnoh commented Mar 3, 2026

#️⃣ 연관된 이슈

closes #294

📝 작업 내용

외부 API(Naver, Aladin) 지연이 내부 시스템 자원(DB 커넥션, 톰캣 쓰레드) 고갈로 이어지는 연쇄 장애(Cascading Failure)를 차단하고, 방 생성 도메인의 가용성을 확보하기 위해 아키텍처를 개선했습니다.

트랜잭션 경계 분리 및 타임아웃 적용

  • @Transactional을 제거하고 TransactionTemplate을 도입하여 외부 API 호출 구간을 DB 트랜잭션 밖으로 분리
  • RestTemplateWebClient에 명시적 Timeout(Connect 3s, Read 5s) 설정

도메인 특성을 반영한 장애 격리 (Fault Isolation)

  • 부가 정보인 Aladin API 장애 시 예외를 전파하지 않고 pageCount = null로 격리하여 방 생성 속행(Fail-soft)
  • Aladin API 실패 내역은 방 생성 지연을 막기 위해 Discord 비동기(subscribe()) 알림 전송

최종적 일관성(Eventual Consistency) 보장

  • 매일 03:00 실행되는 BookPageCountFillScheduler 도입으로 누락된 pageCount 복구 (외부 API 쓰로틀링 적용)
  • 알라딘 미등록 도서(ISBN_NOT_FOUND)는 pageCountUnfindable = true 플래그로 업데이트하여 무의미한 API 반복 호출(좀비 프로세스) 영구 차단

동시성 예외 제어

  • 동일 ISBN 동시 요청 시 발생하는 DataIntegrityViolationException 예외를 캐치하여 기존 데이터 재조회로 처리

📸 스크린샷

image

💬 리뷰 요구사항

  • TransactionTemplate 내부로 묶인 DB 쓰기 작업의 트랜잭션 경계가 적절히 최소화되었는지 검토 바랍니다.
  • pageCount = null 인 데이터를 백그라운드에서 업데이트하는 스케줄러가 적절히 구현되었는지 검토 바랍니다.
  • Discord 에러 알림이 동기(500 에러)와 비동기(알라딘 장애)로 목적에 맞게 분리되었는지, 쓰레드 블로킹 우려는 없는지 확인 바랍니다.

📌 PR 진행 시 이러한 점들을 참고해 주세요

* P1 : 꼭 반영해 주세요 (Request Changes) - 이슈가 발생하거나 취약점이 발견되는 케이스 등
* P2 : 반영을 적극적으로 고려해 주시면 좋을 것 같아요 (Comment)
* P3 : 이런 방법도 있을 것 같아요~ 등의 사소한 의견입니다 (Chore)

Summary by CodeRabbit

릴리스 노트

  • 새로운 기능

    • 매일 오전 3시에 자동으로 누락된 책의 페이지 수를 채우는 스케줄러 추가
    • API 오류 발생 시 실시간 알림 시스템 강화
  • 버그 수정

    • API 요청 타임아웃 설정 추가 (응답 제한시간 5초)
    • 찾을 수 없는 책에 대한 체계적인 처리 개선
    • 동시 다중 요청으로 인한 중복 생성 문제 해결
    • 일시적 API 오류 재시도 로직 개선

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[refactor] 외부 api 동작 관련 에러 핸들링 방식 수정

2 participants