스킬 graphql
📦

graphql

안전

최선의 실무로 안전한 GraphQL API 구축하기

GraphQL 의 유연성은 적절한 제어 장치 없이는 성능 및 보안 문제로 이어질 수 있습니다. 이 스킬은 DataLoader 사용, 쿼리 깊이 제한, 권한 부여에 대한 검증된 패턴을 제공하여 프로덕션 준비가 된 GraphQL API 를 구축할 수 있게 합니다.

지원: Claude Codex Code(CC)
🥉 74 브론즈
1

스킬 ZIP 다운로드

2

Claude에서 업로드

설정 → 기능 → 스킬 → 스킬 업로드로 이동

3

토글을 켜고 사용 시작

테스트해 보기

"graphql" 사용 중입니다. 이커머스 제품 카탈로그용 스키마 설계

예상 결과:

  • Product, Category, Review 타입을 갖춘 GraphQL 스키마
  • discountPrice 와 같은 선택적 필드에 대한 적절한 nullability
  • 제품 리뷰에 대한 페이지네이션을 위한 connections
  • input 타입을 사용한 CRUD 연산을 위한 뮤테이션

"graphql" 사용 중입니다. 사용자 post 리졸버에서 N+1 쿼리 수정

예상 결과:

  • 사용자 ID 조회를 배치하는 DataLoader 구현
  • 중복 쿼리 방지를 위해 사용자 ID 로 키된 캐시
  • Apollo Server context 와 통합
  • N 개의 쿼리에서 1 개의 배치된 쿼리로 성능 개선

보안 감사

안전
v1 • 2/25/2026

This skill is a documentation file containing GraphQL best practices and patterns. Static analysis flagged false positives: line 69 references related skills (not shell execution), and lines 3, 22, 34, 63, 72 contain markdown content (not cryptographic code). No executable code or security risks detected.

1
스캔된 파일
73
분석된 줄 수
0
발견 사항
1
총 감사 수
보안 문제를 찾지 못했습니다
감사자: claude

품질 점수

38
아키텍처
100
유지보수성
87
콘텐츠
50
커뮤니티
100
보안
91
사양 준수

만들 수 있는 것

새로운 API 를 구축하는 백엔드 개발자

초기부터 적절한 성능 최적화 및 보안 제어 장치를 갖춘 프로덕션 준비 GraphQL API 를 설계하고 구현합니다.

GraphQL 을 통합하는 프론트엔드 팀

React 애플리케이션을 위해 정규화된 캐싱 및 효율적인 데이터 페칭 패턴으로 Apollo Client 를 설정합니다.

기존 API 를 감사하는 테크 리드

누락된 DataLoader, 제한 없는 쿼리 깊이, 권한 부여 간극과 같은 일반적인 GraphQL 안티패턴을 식별하고 수정합니다.

이 프롬프트를 사용해 보세요

기본 GraphQL 스키마 설계
User, Post, Comment 타입을 갖춘 블로그용 GraphQL 스키마를 생성하세요. 적절한 nullability, 관계, 그리고 쿼리와 뮤테이션으로서의 일반적인 CRUD 연산을 포함하세요.
N+1 방지를 위한 DataLoader 구현
post 에 대한 author 를 페치하는 GraphQL 리졸버가 있습니다. 각 post 리졸버가 별도의 데이터베이스 쿼리를 실행합니다. 이러한 쿼리를 배치하고 캐싱하도록 DataLoader 를 구현하는 방법을 보여주세요.
쿼리 깊이 제한 추가
깊게 중첩된 GraphQL 쿼리로 인한 DoS 공격을 방지하기 위해 Apollo Server 에 쿼리 깊이 제한 및 복잡도 분석을 설정하세요. 구성 및 오류 처리를 포함하세요.
필드 레벨 권한 부여 구현
GraphQL 리졸버에서 필드 레벨 권한 부여를 구현하는 방법을 보여주세요. 일부 필드는 인증된 사용자 또는 특정 역할을 가진 사용자만 볼 수 있어야 합니다.

모범 사례

  • 항상 DataLoader 를 사용하여 데이터베이스 쿼리를 배치하고 N+1 문제 방지
  • DoS 공격으로부터 보호하기 위해 쿼리 깊이와 복잡도 제한
  • 스키마 디렉티브뿐만 아니라 리졸버에서도 권한 부여 구현

피하기

  • DataLoader 없이 리졸버에서 직접 데이터베이스 호출 수행
  • GraphQL 엔드포인트에서 제한 없는 쿼리 깊이 허용
  • 권한 부여 로직을 스키마 디렉티브에만 의존

자주 묻는 질문

GraphQL 에 DataLoader 가 필요한 이유는 무엇인가요?
DataLoader 가 없으면 각 필드 리졸버가 독립적인 데이터베이스 쿼리를 실행합니다. 10 개의 post 와 해당 author 를 페치하는 단일 쿼리는 11 개의 쿼리를 트리거합니다 (post 용 1 개, author 용 10 개). DataLoader 는 이를 2 개의 쿼리로 배치하여 성능을 극적으로 향상시킵니다.
프로덕션에서 introspection 을 활성화해야 하나요?
일반적으로 아니오입니다. Introspection 은 전체 스키마 구조를 클라이언트에 노출시킵니다. 개발 도구에 유용하지만 공격자가 API 를 이해하는 데 도움이 될 수 있습니다. 클라이언트 도구 지원이 특별히 필요하지 않은 한 프로덕션에서 비활성화하세요.
스키마와 리졸버 권한 부여의 차이점은 무엇인가요?
스키마 디렉티브는 타입/필드 레벨에서 누가 무엇에 접근할 수 있는지 선언합니다. 리졸버 권한 부여는 실제 로직을 구현합니다. 항상 리졸버에서 권한 부여를 구현하세요; 디렉티브만 사용하면 우회되거나 잘못 구성될 수 있습니다.
GraphQL 에서 오류와 null 데이터를 어떻게 처리하나요?
스키마에서 적절한 nullability 를 사용하세요. 필드가 합리적으로 비어 있을 수 있다면 nullable 로 만드세요. 값이 있어야 한다면 non-null 로 만드세요. non-null 필드가 실패하면 GraphQL 은 전체 부모 객체를 null 로 만들고, 이는 쿼리를 중단시킬 수 있습니다.
어떤 쿼리 깊이 제한을 사용해야 하나요?
대부분의 API 에 대해 깊이 제한 5-10 으로 시작하세요. 합법적인 쿼리를 모니터링하고 적절히 조정하세요. 또한 깊이 제한을 우회하는 얕지만 비용이 큰 쿼리를 감지하기 위해 쿼리 복잡도 분석을 구현하세요.
GraphQL subscription 을 정리해야 하나요?
예입니다. Subscription 은 열린 연결을 유지합니다. 클라이언트가 연결을 끊을 때 서버 측 subscription 핸들러가 적절히 정리되어 메모리 누수를 방지해야 합니다. 적절한 라이프사이클 훅을 사용하여 subscription 리졸버에서 정리를 구현하세요.

개발자 세부 정보

파일 구조

📄 SKILL.md