GraphQL 검증

GraphQL 검증 (Validation)

쿼리가 문법적으로 맞더라도 스키마에 없는 필드를 요청하면 실행 자체가 의미가 없어요. GraphQL 요청이 서버에 도착하면 먼저 파싱되고, 그다음 스키마를 기준으로 **검증(validation)**을 거쳐요. 덕분에 런타임 검사에 의존하지 않고도 잘못된 쿼리를 미리 잡아내요.

출처: https://graphql.org/learn/validation/

검증을 보여주는 예시가 몇 가지 있어요.

  • 존재하지 않는 필드 요청: heroCharacter 타입을 리턴한다면, 그 선택 집합은 Character에 정의된 필드만 요청할 수 있어요. CharacterfavoriteSpaceship이 없다면 그 쿼리는 무효예요.
  • 리프 필드에 선택 집합을 다는 경우: 스칼라나 이늄은 그 아래에 뭐가 더 없으니, 리프 필드에 선택 집합을 추가하면 무효예요.
  • 추상 타입에서 공유 필드가 아닌 것을 요청: Character는 인터페이스예요. Droid에만 있는 primaryFunction을 그냥 요청하면 무효인데, Droid를 기준으로 하는 프래그먼트를 사용하면 primaryFunction은 Droid일 때만 조회하도록 할 수 있어요.
  • 순환 프래그먼트: 프래그먼트가 자기 자신을 (직간접적으로) 참조하면 무한 결과를 만들 수 있어서 무효예요.

검증 오류가 나면 서버는 errors 키에 사유를 담아 응답해요. 이 검증 오류는 실행이 시작되기 전에 발생하는 요청 오류라서, 응답에 부분 데이터가 섞이지 않아요. 그리고 스펙이 모든 구현에 요청 검증을 요구하기 때문에, 개발자가 이 검증 로직을 런타임에 따로 만들지 않아도 돼요. 검증을 통과해야 실행 단계로 넘어가요.

더 알아보기