Skip to content

Fix: EPUB 업로드 외부 I/O를 DB 트랜잭션 밖으로 분리 #143

Closed

Description

@ppp1969

⚙️ 발생 기능

EPUB 업로드 API와 백그라운드 정규화 job 큐 등록 흐름

❓ 발생 상황

Render Free 환경에서는 DB_MAX_POOL_SIZE=2로 운영하므로, 3~4명이 동시에 EPUB를 업로드할 때 DB 커넥션을 오래 점유하면 다른 요청이 커넥션을 얻지 못해 timeout이 날 수 있습니다.

현재 BookService.uploadBook()는 EPUB metadata 추출, S3 source upload, cover upload, normalization job 생성을 하나의 트랜잭션 범위에서 수행합니다. S3 업로드 같은 외부 I/O가 느려지면 DB 트랜잭션과 커넥션도 함께 오래 유지되며, 이는 DB row deadlock보다 connection pool starvation에 가까운 문제입니다.

📝 To-do

  • EPUB metadata 추출과 S3 업로드를 DB 트랜잭션 밖에서 수행한다.
  • DB 트랜잭션은 책 row 생성, 업로드 source 반영, job 생성 같은 짧은 상태 변경만 수행한다.
  • S3 source upload 실패 시 normalization job이 생성되지 않도록 보장한다.
  • cover upload 실패는 기존처럼 업로드 전체 실패로 전파하지 않고 cover 없이 계속 진행한다.
  • 테스트로 S3 업로드가 job 생성 트랜잭션 밖에서 수행됨을 검증한다.

💡 예상 응답

동시 EPUB 업로드 3~4건이 들어와도 DB 커넥션을 외부 I/O 시간만큼 오래 붙잡지 않아 커넥션 풀 고갈 가능성이 줄어듭니다.

📸 ScreenShot & Log

ETC

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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions