Skip to content

Nestjs GraphQL N+1 문제 #1896

Open
Open
@cho-to

Description

Describe the problem and solution

Nestjs Admin GraphQL에서 ResolveField를 활용했을 때, N+1 문제가 발생합니다.

만약 총 5개의 문제를 getProblems에서 가져온다고 할 때, 이때 각각의 tag들을 불러온다면 전체 problem을 조회하는 쿼리 한 번, 각각의 problem에서 tag를 조회하는 쿼리 5번을 요청하게 됩니다.

→ 실제 서버에서도 해봤더니 똑같이 N+1회로 보내집니다.

SELECT * FROM problem;
SELECT * FROM tag WHERE problemId in(1)
SELECT * FROM tag WHERE problemId in(2)
SELECT * FROM tag WHERE problemId in(3)
SELECT * FROM tag WHERE problemId in(4)
SELECT * FROM tag WHERE problemId in(5)

→ 사실 admin 서버가 많이 사용되지는 않을거지만, 미리 최적화하는 것도 괜찮지 않을까요..!

→ 최적화하는건 dataloader 라이브러리를 사용해서 불러온 problemId를 배치에 저장하고, 한꺼번에 tag를 쿼리하는 식으로 한다구 합니다.

Notion task

TAS-

Validations

Metadata

Assignees

Type

No type

Projects

  • Status

    Pending ✋

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions