what?
- per request batch, cache query
- 하나의 요청 범위 내에서 쿼리를 모아서 데이터 베이스로 전송하거나, 쿼리의 결과를 caching 해서 돌려주는 역할을 하는 것.
why need?
N + 1 problem?
what?
- 예를 들어, 두개의 테이블(A,B) 이 1:N 관계일때, A 의 결과를 조회하면 B 테이블에 대한 조회가 N 번 발생해서 총 N + 1 번의 조회가 되는 경우.
why is this a problem?
- db connection 은 비싸다 -> db 마다 소수의 커넥션을 유지하고 있다. (connection pool)
- 여러 요청이 발생하는 경우 connection 을 돌려 줄때까지 대기해야 하므로 성능상의 문제가 발생한다.
how solve?
- 실제로 요청되는 쿼리의 갯수를 줄이는 것이 핵심이다.
- batch 의 아이디어를 활용한다. -> 모을 수 있는 쿼리는 모아서 하나의 쿼리로 전송한다.
how work?
- resolver 와 data fetching 사이에 dataloader layer 를 추가한다.
- dataloader layer 에서는 쿼리를 모아주는 역할을 한다.