백엔드 개발 · 심화
프로젝트에서 JPA를 사용하면서 겪었던 성능 이슈와 해결 경험을 공유해주세요.
힌트 · 실제 문제 상황, 원인 분석, 해결 과정을 구체적으로 설명해보세요.
N+1 문제fetch join인덱스쿼리 튜닝OSIV
모범답안
네, JPA를 사용하면서 성능 이슈를 겪었던 경험을 말씀드리겠습니다.
한 번은 사용자 정보를 조회하는 기능에서 N+1 문제가 발생했습니다. 사용자 엔티티와 연관된 프로필 정보를 함께 조회해야 했는데, JPA가 사용자 정보를 먼저 조회한 후, 각 사용자의 프로필 정보를 Lazy Loading 방식으로 추가적으로 조회하면서 쿼리가 너무 많이 발생했습니다.
이 문제를 해결하기 위해 Fetch Join을 사용했습니다. JPQL 쿼리에서 SELECT u FROM User u JOIN FETCH u.profile 과 같이 작성하여 사용자 정보를 조회할 때 프로필 정보까지 한 번에 가져오도록 했습니다.
또한, 조회 조건에 사용되는 컬럼에 인덱스를 추가하여 쿼리 성능을 개선했습니다. OSIV (Open Session In View) 설정도 확인하여 불필요한 DB 연결을 줄이도록 했습니다. 이러한 튜닝을 통해 응답 시간을 크게 단축할 수 있었습니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.