본문 바로가기
graphql

Dataloader

by AsCE_hyunseung 2021. 11. 21.

최근에 리팩토링을 해야 할 일이 있어서 dataloader를 사용해서 성능 개선을 했다
일단 빠르게 하는게 중요하니 기존에 구현되어있는 코드를 보고 작성해서 반영을 했는데
아직 왜 이게 성능 개선이 되는지에 대해서는 알지 못하기때문에 알아보려고 한다.

 

Dataloader

  • n+1 문제를 해결하기 위한 라이브러리 (n+1 문제에 대한 내용은 추후에 정리해서 올리겠습니다)
    주로 Graphql에서 사용되지만 의존성은 없다고 한다.
  • batchcache를 활용해서 성능을 개선한다

batching

  1. 자바스크립트의 이벤트 루프 한 틱 동안 키 배열을 수집한다
  2. 모든 키로 DB를 한 번 때린다
  3. 값 배열을 해결하는 프로미스를 반환한다

batch 함수 작성할때 주의할점

  • 값 배열은 키 배열과 길이가 같아야 한다
  • 값 배열의 각 인덱스는 키 배열의 동일한 인덱스와 일치해야 한다.

Caching

  • load()가 호출되면 결과가 캐시되고, 동일한 키로 두 번 호출 하면 bacth 함수를 다시 실행하지 않고 DataLoader의 키값 저장소에서 값을 조회한다.

'graphql' 카테고리의 다른 글

Graphql  (0) 2021.12.14