GraphQL 쿼리와 뮤테이션

GraphQL 쿼리와 뮤테이션 (Queries and Mutations)

REST에서는 데이터를 가져올 엔드포인트가 여러 개로 나뉘고, 응답에 필요 없는 필드가 섞여 오기 일쑤예요. GraphQL은 하나의 엔드포인트에 "이 객체에서 이 필드들만 줘"라고 요청하는 방식이라, 응답 형태가 쿼리와 똑같이 따라와요.

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

가장 기본은 특정 객체의 필드를 골라 요청하는 거예요. 쿼리는 항상 루트 오퍼레이션 타입(기본은 Query)에서 시작해서, 스칼라·이늄 값인 리프(leaf)까지 필드 선택 집합(selection set)을 내려가요.

query HeroNameAndFriends {
  hero {
    name
    friends {
      name
    }
  }
}

응답은 항상 최상위 data 키에 담겨요. 요청 중 문제가 생기면 errors 키에 원인이 실리고, data가 일부만 채워질 수 있어요. 쿼리와 응답의 모양이 같다는 점이 GraphQL을 직관적으로 만드는 큰 이유예요.

동적인 값을 쿼리 본문에 그대로 박지 말고, **변수(Variable)**로 빼는 게 좋아요. 변수를 쓰려면 세 가지를 해야 해요.

  1. 쿼리 안의 고정 값을 $변수명으로 바꾼다.
  2. 변수 정의(($episode: Episode))로 $변수명의 타입을 선언한다.
  3. JSON 같은 별도 변수 사전에 변수명: 값을 넘긴다.
query HeroNameAndFriends($episode: Episode = JEDI) {
  hero(episode: $episode) {
    name
    friends {
      name
    }
  }
}

정의에 기본값을 붙이면(Episode = JEDI) 변수를 안 넘겨도 기본값으로 실행돼요. 오퍼레이션 타입(query/mutation/subscription)은 쿼리 축약 문법이 아닐 때 명시해야 하고, 뮤테이션·서브스크립션은 항상 명시해야 해요.

더 알아보기

  • 스키마에서 타입과 필드를 정의하는 법: Schemas and Types
  • 재사용 가능한 선택 집합인 프래그먼트와 @include/@skip 지시자도 이 페이지에서 이어서 확인해요.