You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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 시간만큼 오래 붙잡지 않아 커넥션 풀 고갈 가능성이 줄어듭니다.
Activity