GraphQL 기초와 1+N 문제

GraphQL 기초

간단한 GraphQL syntax

query 쿼리명 {
  필드명 {
     …
  }
}


fragment 이름 on 필드 {
   …
}

1+N 문제

GraphQL은 사실 문서 처음에 1+N 문제를 언급해줘야한다고 생각함. 1+N 문제가 뭔지 생각해보자.

query 사업자조회 {
    id,
    name,
    사업장 {
        id,
        name
    }
}

같은 쿼리를 날린다고 하자. 그럼 보통의 Graphql resolver에서는 어떻게 동작하냐고 하면,

select * from 사업자

의 결과로 N개의 사업자를 얻었을 때, N개의 사업자의 사업장 정보를 얻기 위해서

select * from 사업장 where 사업장.ID = 앞쿼리의결과.사업장ID

같은 쿼리가 N번 날아간다. 이상하다.

만약에 이걸 rest api로 구현했으면 endpoint에서 DB 조회를

select *
from 사업자
join 사업장 ON 사업장.ID = 사업자.사업장ID

의 결과로 쿼리 1회로 끝날텐데 말이다.

이건 데이터가 많아지면 심각한 문제인데, 이를 해결하기 위해 batching을 이용하여 javascript로 구현한 Dataloader가 있고, clojure 생태계에서는 superlifter가 있는데 이들이 1+N문제를 어떻게 해결하고 있는지 살펴보자.

Dataloader

Superlifter

Reference

Discuss this post here.

Published: 2022-01-20

Tagged: GraphQL

Archive