QueryDSL 2

[트러블 슈팅] SOS 상세 조회 API의 Row Explosion 문제 해결

모든 연관 데이터를 단일 LEFT JOIN 쿼리로 조회하던 구조에서 OneToMany 관계인 SosImage를 별도 쿼리로 분리하여 Row Explosion 문제를 해결하고 조회 안정성을 확보했습니다.그 과정에서 알게 된 내용을 정리해 보겠습니다문제 상황SOS 상세 조회 API를 구현하면서 아래 모든 데이터를 단일 QueryDSL 쿼리에서 LEFT JOIN으로 한 번에 조회하도록 설계했습니다.Member 정보 (badge)ProfileImageBusiness 정보 (name, address)BusinessCodeSos 정보SosImage 리스트문제는 SosImage가 OneToMany 관계라는 점이었습니다. 이미지가 5개라면 결과 Row도 5개가 생성됩니다. 데이터는 하나인데 이미지 수만큼 행이 복제되는..

[트러블 슈팅]공고 상세 조회 API의 불필요한 DB 쿼리 줄이기

문제 상황공고 상세 조회 API에서 공고 상세 정보(Announce), 사용자의 즐겨찾기 여부(MemberFavorite), 제출 서류 목록(Document) 세 가지 데이터를 함께 반환해야 했습니다.초기 구현에서는 이 세 가지를 모두 개별 쿼리로 분리하여 조회했습니다. sqlSELECT * FROM announce WHERE announce_id = ?SELECT EXISTS ( SELECT 1 FROM member_favorite WHERE member_id = ? AND announce_id = ?)SELECT * FROM document WHERE announce_id = ?API 요청 한 건당 DB와 3번의 Round Trip이 발생하는 구조였습니다. 참고)사실 exist를 쓰는 것..