Network/GraphQL

[GraphQL] 3. GraphQL의 query 한 번에 정리하기

반응형

준비사항

이번 글에서는 GraphiQL에서 제공하는 시각적 편집기를 사용해 query를 생성한 후 실행한다. 아래 사이트를 참조하길 바란다.

 

SWAPI GraphQL API

 

graphql.org

 

 

query : 읽기 전용으로 데이터를 가져오기 위한 메서드 

query는 읽기 전용으로 데이터를 가져오기 위한 메서드이다. query를 통해 가져오는 데이터는 객체 단위로 가져와지며, query는 이름, 변수, 필드 총 3가지 구성요소로 이루어진다. 

 

이 글에서는 이에 대해 간단히 살펴보기 위해 다음의 쿼리를 살펴본다. 아래 쿼리는 영화 정보(Film Info)를 추출하기 위한 query이다. 아래 query에서는 영화 정보(film)를 가져오는데 제목(title), 감독(director), 프로듀서들(producers)를 가져온다.

query FilmInfo($id : ID) {
  film(filmID: $id) {
    title
    director
    producers
  }
}

 

GraphQL의 Query Name

그림1. query name

 

 먼저 query의 이름(name) 부터 살펴보자. query의 이름은 가져온 데이터에 영향을 미치지 않으며, 이 query가 어떤 query인지 식별하기 위한 용도로만 사용된다. 프로그래밍에서 함수의 이름과 같은 역할을 한다. 쿼리 이름을 잘 작성하는 것은 유지 보수를 위해 매우 중요하다.

 

 

 

GraphQL의 Variable

 

그림2. variable and type

 

 다음은 변수(variable)이다. 변수는 $가 앞에 붙어 선언된 값이며, ':' 을 기준으로 왼쪽에 변수명이 오고 오른쪽에는 변수의 타입이 온다. 이곳에는 우리가 데이터를 가져오기 위해 넣어야 하는 변화하는 값을 넣는다. 예를 들어 ID를 식별자로 하여 영화의 정보를 가져오고 싶은 경우 id라는 변수를 $id로 선언한 후 뒤에 타입인 ID를 붙이면 된다.

 

 

GraphQL의 Field

 

그림3. GraphQL의 필드

 

마지막은 필드(Field)이다. 필드에는 우리가 가져오고자 하는 데이터의 스키마와 정보들이 들어간다. 스키마란 추출해야 할 객체를 뜻한다. 스키마는 여러 스키마와 정보의 집합이며, 정보는 Int, String, Float, Boolean 같은 Primitive Type 또는 이들의 Array가 될 수 있다. 즉, 우리가 java에서 말하는 DTO, POJO 혹은 Kotlin의 data class와 같은 역할을 하는 것이다. 우리는 필드를 정의함으로써 우리가 가져오고자 하는 데이터를 객체 단위로 가져올 수 있도록 한다.

 

 

그림4. GraphQL의 parameter

 

필드에는 인자(parameter)가 들어갈 수 있는데, 인자는 필드에서 특정한 필드값만을 가져오기 위한 식별자이다. 인자값은 직접 작성할 수도 있고, 위 그림3과 같이 우리가 위에서 선언한 변수를 대입시킬 수도 있다. 예를 들어 위에서 선언한 $id 값을 직접 대입시키려는 경우 그림4와 같이 식별자에 들어갈 값에 $id를 넣으면 된다. 그림4에서는 query에서 선언한 id 변수에 1을 대입시켰고, 이 값을 다시 인자에 넘기고 있다.

 

위와 같이 인자에 변수를 대입 시키는 것 말고도 아래와 같이 직접 값을 대입시킬 수도 있다.

 

그림5. GraphQL의 parameter에 값 대입

 

그림5와 같이 인자에 직접 값을 대입 시키면 대신 유연성이 준다는 단점이 있지만, 변하지 않는 값에 대해서는 값을 대입시키는 것이 좋다.

반응형

 

이 글의 저작권은 Kotlin World 에 있습니다. 글, 이미지 무단 재배포 및 변경을 금지합니다.