[오늘가챠] 비동기(@Async)의 늪: 외부 통신 중 마주친 JPA Detached Entity 해결기
·
◈ Yermi Project/오늘가챠🃏
업로드된 이미지를 Cloudinary(미디어 서버)에 전송하고, AI(Gemini API)로 분석하는 작업은 네트워크 상황에 따라 2~5초가량 소요됩니다. 유저를 멍하니 5초 동안 멈춰둔 채 기다리게 할 수 없어, 응답성을 높이고자 로직을 Spring @Async를 활용해 비동기로 분리하려다 영속성 컨텍스트 지옥에 빠진 트러블슈팅 경험입니다.1. 섣부른 비동기 처리의 시도요청이 오면 "업로드 대기열에 등록되었습니다"라는 성공 응답을 클라이언트에 0.1초 만에 내려주고, 무거운 작업은 백그라운드 스레드에 던져버리도록 설계했습니다.// ❌ 처음 시도한 코드 (에러 발생)@Async // 새로운 백그라운드 스레드풀에서 실행public void processUploadAsync(User user, byte[] ..
[오늘가챠] 서버리스 DB의 한계 극복: Supabase 커넥션 풀 고갈 해결
·
◈ Yermi Project/오늘가챠🃏
백엔드 배포 직후, 앱에 트래픽이 몰리자 에러가 쏟아졌습니다. 서버리스 환경에서 맞닥뜨린 DB 커넥션 풀(Connection Pool) 고갈 에러의 원인과, HikariCP를 튜닝하여 이를 극복한 과정입니다.1. 런타임 에러 발생: Connection is not available기능 구현을 마치고 테스트를 진행하자 백엔드에서 예외가 발생하며 서버가 뻗어버렸습니다.java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available, request timed out after 30000ms.이 에러는 Spring Boot 서버가 DB와 통신하기 위해 커넥션 풀(Connection Pool)에서 커넥션을 빌리려 했으나 남..
[Project] Riddle-Game : 세 번째 회의록 (23.05.09) [기술스택 및 활용도구 확정]
·
◈ Yermi Project/Riddle-Game🧩
[Project] Riddle-Game : 두 번째 회의록 (22.11.12) [오븐(oven)으로 프로토 타입 제작] [Project] Riddle-Game : 첫 번째 회의록 (22.10.24) [프로젝트 설계, 브레인 스토밍, 분량 정하기] [Project] 나의 두 번째 프로젝트, Riddle-Game! [추억의 미궁게임 만들어보기] - 나의 두 번째 프로젝트, Riddle-Ga yermi.tistory.com - Riddle-Game : 세 번째 회의록 (23.05.09) 1. 기술스택 및 활용도구 정리 개발환경 : Spring Boot 2.7.11, Tomcat 9 언어 : JAVA 11 DB : Oracle 11 Tool : IntelliJ IDEA 배포 : AWS EC2(Windows) 활..