GraphQL 쿼리와 뮤테이션
GraphQL 쿼리와 뮤테이션 (Queries and Mutations)
REST에서는 데이터를 가져올 엔드포인트가 여러 개로 나뉘고, 응답에 필요 없는 필드가 섞여 오기 일쑤예요. GraphQL은 하나의 엔드포인트에 "이 객체에서 이 필드들만 줘"라고 요청하는 방식이라, 응답 형태가 쿼리와 똑같이 따라와요.
가장 기본은 특정 객체의 필드를 골라 요청하는 거예요. 쿼리는 항상 루트 오퍼레이션 타입(기본은 Query)에서 시작해서, 스칼라·이늄 값인 리프(leaf)까지 필드 선택 집합(selection set)을 내려가요.
query HeroNameAndFriends {
hero {
name
friends {
name
}
}
}
응답은 항상 최상위 data 키에 담겨요. 요청 중 문제가 생기면 errors 키에 원인이 실리고, data가 일부만 채워질 수 있어요. 쿼리와 응답의 모양이 같다는 점이 GraphQL을 직관적으로 만드는 큰 이유예요.
동적인 값을 쿼리 본문에 그대로 박지 말고, **변수(Variable)**로 빼는 게 좋아요. 변수를 쓰려면 세 가지를 해야 해요.
- 쿼리 안의 고정 값을
$변수명으로 바꾼다. - 변수 정의(
($episode: Episode))로$변수명의 타입을 선언한다. - JSON 같은 별도 변수 사전에
변수명: 값을 넘긴다.
query HeroNameAndFriends($episode: Episode = JEDI) {
hero(episode: $episode) {
name
friends {
name
}
}
}
정의에 기본값을 붙이면(Episode = JEDI) 변수를 안 넘겨도 기본값으로 실행돼요. 오퍼레이션 타입(query/mutation/subscription)은 쿼리 축약 문법이 아닐 때 명시해야 하고, 뮤테이션·서브스크립션은 항상 명시해야 해요.
더 알아보기
- 스키마에서 타입과 필드를 정의하는 법: Schemas and Types
- 재사용 가능한 선택 집합인 프래그먼트와
@include/@skip지시자도 이 페이지에서 이어서 확인해요.