[오늘가챠] 비동기(@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[] ..
[SpringBoot] 순수JDBC vs JDBC Template vs JPA [스프링 DB 접근 기술 비교]
·
▣ Framework/Spring Boot🍀
- 순수JDBC vs JDBC Template vs JPA 과거에 사용했던 순수JDBC부터 JDBC Template, JPA, Spring Data JPA까지 DB 활용 코드가 어떻게 변하는지 회원 데이터 저장 및 회원 데이터 조회 코드로 비교해보려고 한다. 1. 순수JDBC 순수JDBC는 Connection 코드부터 PreparedStatement, ResultSet 모두 일일이 호출해줘야 한다. (A부터 Z까지 다 만들어줘야 함) package hello.hellospring.repository; import hello.hellospring.domain.Member; import org.springframework.jdbc.datasource.DataSourceUtils; import javax.sq..