구현 점검

DataLoader 검증 위치

요청 스코프, 배치 함수, GraphQL context, resolver 호출, 로그 확인이 한 줄로 이어져야 N+1 해결이 확실해집니다.

1

Loader 서비스

Scope.REQUEST로 요청마다 새 인스턴스를 준비합니다.

2

Batch 함수

findByIds로 key 목록을 한 번에 조회합니다.

3

Context 주입

GraphQL 요청 context에 loader를 넣어 resolver가 공유합니다.

4

Field resolver

author에서 batchUsers.load(authorId)만 호출합니다.

5

로그 확인

여러 ID가 한 로그에 모이는지 확인합니다.

resolver

리졸버는 직접 DB를 부르지 않습니다

관계 필드에서는 컨텍스트에 있는 loader로 key만 넘겨 배치 계층에 결정을 맡깁니다.

@ResolveField(() => User) author(@Parent() post, @Context() ctx) return ctx.usersLoader.batchUsers.load(post.authorId)
근거

검증은 쿼리 수가 줄었는지로 판단합니다

GraphQL Playground에서 게시물과 작성자를 함께 조회한 뒤 서버 로그를 봅니다.

[DataLoader] Fetching users with IDs: 101, 102 posts: 3개, author resolver: 3회 사용자 조회: 1회 배치 호출

순서 보존

반환 배열은 요청 key 순서와 같아야 합니다.

중복 제거

같은 authorId는 요청 캐시로 재사용됩니다.

범위 제한

캐시는 요청이 끝나면 버려져 다음 사용자 요청과 섞이지 않습니다.