최근에 리팩토링을 해야 할 일이 있어서 dataloader를 사용해서 성능 개선을 했다
일단 빠르게 하는게 중요하니 기존에 구현되어있는 코드를 보고 작성해서 반영을 했는데
아직 왜 이게 성능 개선이 되는지에 대해서는 알지 못하기때문에 알아보려고 한다.
Dataloader
- n+1 문제를 해결하기 위한 라이브러리 (n+1 문제에 대한 내용은 추후에 정리해서 올리겠습니다)
주로 Graphql에서 사용되지만 의존성은 없다고 한다. - batch와 cache를 활용해서 성능을 개선한다
batching
- 자바스크립트의 이벤트 루프 한 틱 동안 키 배열을 수집한다
- 모든 키로 DB를 한 번 때린다
- 값 배열을 해결하는 프로미스를 반환한다
batch 함수 작성할때 주의할점
- 값 배열은 키 배열과 길이가 같아야 한다
- 값 배열의 각 인덱스는 키 배열의 동일한 인덱스와 일치해야 한다.
Caching
- load()가 호출되면 결과가 캐시되고, 동일한 키로 두 번 호출 하면 bacth 함수를 다시 실행하지 않고 DataLoader의 키값 저장소에서 값을 조회한다.