GraphQL 스키마와 쿼리 비용
GraphQL은 필요한 필드를 선언하는 장점만큼 깊은 관계 조회, resolver 반복, 캐시 복잡도를 함께 관리해야 한다.
| 비용 원인 | 나타나는 문제 | 통제 방법 | 확인 질문 |
|---|---|---|---|
| Depth | 깊은 관계를 한 번에 탐색 | depth limit, persisted query | 중첩 한도를 정했는가 |
| N+1 | 목록의 각 항목마다 관계 조회 | DataLoader, batch query | 요청당 DB 호출 수를 보나 |
| Complexity | 필드마다 비용이 다름 | complexity score | 비싼 필드를 제한하는가 |
| Auth | 필드별 권한 조건이 숨어 있음 | resolver-level policy | 소유권과 역할을 모두 보나 |
| Cache | 쿼리 모양이 다양해 캐시가 어려움 | normalized cache, invalidation | mutation 뒤 갱신 경로가 있는가 |
GraphQL을 도입할 때는 schema 모양만큼 쿼리 비용을 숫자로 제한하는 운영 기준이 필요하다.