요청과 비용 이해하기
예제는 가상 스키마이며 실제 API에 customer, orders, total이 있어야 합니다. 요청 하나가 여러 서버 읽기를 발생시킬 수 있습니다. REST도 맞춤 응답을 제공할 수 있습니다. 단일 HTTP 엔드포인트는 흔하지만 모든 아키텍처의 필수 조건은 아닙니다.
query RecentOrders($id: ID!) {
customer(id: $id) {
name
orders(first: 5) {
nodes { id total }
}
}
}대표 작업 비교하기
- 같은 화면, 권한과 현실적 데이터량에서 바이트, 지연, 오류와 서버 작업을 측정합니다.
- 페이지 나누기, N+1을 줄이는 일괄 읽기, 캐시와 계정 간 격리를 확인합니다.
- 스키마 변경, 구형 클라이언트 호환성과 운영 부담을 평가합니다. REST 유지가 더 간단할 수 있습니다.
권한과 부하 제한 적용하기
요청을 인증하고 업무 로직에서 객체와 필드의 권한을 검사합니다. 목록 크기, 깊이, 별칭, 일괄 작업과 예상 비용을 제한합니다. 요청 빈도만으로 부하를 설명할 수 없습니다. 인트로스펙션을 숨겨도 제어를 대체할 수 없으며 거부와 부분 응답도 시험합니다.
1차 자료
GraphQL 스키마 및 쿼리 비용을 관리합니다.
GraphQL을 사용하면 클라이언트가 필드를 선택할 수 있지만, 이러한 유연성을 위해서는 객체 및 필드 권한 부여가 필요합니다. 크기 또는 깊이 제한만으로는 쿼리로 인해 발생하는 작업량을 측정하는 것을 대체할 수 없습니다.
- 다른 계정이 소유한 민감한 필드 및 객체를 테스트합니다.
- 서비스의 비용, 깊이 및 요청량을 제한하고 관찰합니다.
- 스키마 변경 사항을 버전 관리하고 이전 클라이언트를 테스트합니다.
1차 자료: OWASP — GraphQL Cheat Sheet. 관련 방법: 실무 가이드 읽기.
ETag, HTTP 캐시 및 동시 변경
이 언어판의 상세 참고 설명은 영어로 제공됩니다.
REST and GraphQL: separate representation and authorisation
An HTTP ETag applies to a selected representation. It is neither permission for every returned object nor a universal consistency contract for GraphQL entities.
- Define which response variants have their own validators.
- Test object and field access independently from HTTP conditions.
- Do not automatically apply the PUT scenario to a GraphQL mutation; specify its concurrency contract.
Explore ETag comparisons and the simulator →
References reviewed · RFC 9110 · §13 · RFC 9111 · RFC 6585 · §3
