본문 바로가기
Today/Study

24/01/02

by shulk 2024. 1. 2.

 

문제

특정 보드 ID에 관한 연결된 컬럼들이랑 그 각 컬럼들에 연결된 카드들 가져올때 N+1 문제 발생

먼저 코드를 보면 중간 테이블을 이용해서 특정 ID 보드를 가져오고 그 보드에서 연결된 컬럼들을(columnList) 가져온다.

그후 columnList에 들은 각 컬럼들에서 또 연결된 카드들을(columns.getCards() )가져오는데 N+1문제가 생긴다.

결국 이렇게 쿼리문이 5개 나간다.(해당 보드에 연결된 컬럼이 총5개)

 

 

 

원인

컬럼에 카드랑 연결관계인 cards필드를 지연로딩으로 설정해서 각 컬럼의 cards에 접근할때 쿼리문을 따로따로 날려서 컬럼 총 갯수만큼 쿼리문이 나간다. 

 

해결

Fetch Join을 이용해서 총 컬럼의 정보를 가져올때 동시에 각 컬럼에 들은 카드정보도 가져온다.

특정 보드에 연결된 컬럼들의 id만 빼와서 리스트로 만들고 JPQL로  컬럼들의 리스트 받은다음 페치 조인을 이용해서 

쿼리문 한번에 모든 정보를 가져오게 한다.

 

 

 

 

'Today > Study' 카테고리의 다른 글

24/01/08  (0) 2024.01.08
24/01/14  (0) 2024.01.04
23/12/26  (0) 2023.12.26
23/12/18  (0) 2023.12.18
23/12/15  (0) 2023.12.15