Batch Loading

DataLoader 배치 조회

GraphQL의 자유로운 필드 선택은 N+1 쿼리를 만들 수 있으므로 batch 함수와 request-scoped loader로 조회 폭발을 줄입니다.

문제

N+1 Queries

목록 1번 조회 뒤 각 항목의 연관 데이터를 따로 조회하면 데이터 수만큼 DB 호출이 늘어납니다.

수집

Load Keys

필드 리졸버는 즉시 DB를 호출하지 않고 필요한 id를 DataLoader에 load 요청으로 전달합니다.

배치

Batch Function

모인 id 배열을 한 번의 repository 조회로 가져오고 원래 key 순서에 맞춰 결과 배열을 반환합니다.

요청 캐시

Per Request Cache

같은 요청 안의 중복 key는 캐시되지만 사용자별 권한이 섞이지 않도록 요청 단위로 loader를 만듭니다.