작성일 댓글 남기기

GraphQL의 쿼리(Query)와 뮤테이션(Mutation)

1. 쿼리(Query) 작성하기

쿼리란 무엇인가?

GraphQL에서 쿼리는 서버로부터 데이터를 요청하는 작업을 의미합니다. 예를 들어, REST API에서 데이터를 가져오는 GET 요청과 비슷한 개념이에요. GraphQL 쿼리의 가장 큰 장점은 필요한 데이터만 정확하게 요청할 수 있다는 것입니다.

기본 쿼리 예제

사용자 정보를 요청하는 쿼리를 예시로 들어볼게요. 이 예시는 사용자의 nameemail 정보를 가져오는 쿼리입니다.

query {
user(id: 1) {
name
email
}
}

이 쿼리는 서버에 id가 1인 사용자의 nameemail을 요청하는 것입니다. 서버는 요청한 정보만 정확하게 반환합니다.

중첩 쿼리(Nested Query)

GraphQL에서는 데이터를 중첩해서 요청할 수도 있습니다. 예를 들어, 사용자의 정보와 그 사용자가 쓴 게시물의 정보를 한 번에 요청할 수 있어요.

query {
user(id: 1) {
name
posts {
title
content
}
}
}

이 쿼리는 id가 1인 사용자의 이름(name)과 그 사용자가 쓴 게시물들의 제목(title)과 내용(content)을 한 번에 요청하는 예시입니다.

매개변수(Parameter) 사용하기

GraphQL 쿼리에서는 매개변수를 사용해 요청을 동적으로 만들 수 있습니다. 예를 들어, 특정 사용자를 요청할 때마다 다른 id를 사용할 수 있어요.

query getUser($userId: ID!) {
user(id: $userId) {
name
email
}
}

여기서 $userId는 변수로 사용됩니다. 실제 요청을 보낼 때는 이 변수를 지정해서 데이터를 요청할 수 있어요. 예를 들어, userId2를 넣으면, id가 2인 사용자의 정보를 받아올 수 있습니다.

2. 뮤테이션(Mutation) 작성하기

뮤테이션이란?

뮤테이션은 데이터를 서버에 추가하거나 수정, 삭제할 때 사용하는 작업입니다. REST API의 POST, PUT, DELETE와 같은 기능을 수행한다고 보시면 됩니다.

기본 뮤테이션 예제

새로운 사용자를 추가하는 뮤테이션 예제를 살펴볼게요.

mutation {
addUser(name: "Alice", email: "[email protected]") {
id
name
email
}
}

이 뮤테이션은 새로운 사용자를 추가하고, 추가된 사용자의 id, name, email을 반환합니다. REST API의 POST 요청과 비슷한 기능을 합니다.

데이터 수정하기

이번에는 사용자의 정보를 수정하는 뮤테이션 예제입니다.

mutation {
updateUser(id: 1, name: "Bob", email: "[email protected]") {
id
name
email
}
}

이 예시는 id가 1인 사용자의 이름과 이메일을 변경하는 작업입니다. 서버는 수정된 사용자 정보를 반환합니다.

데이터 삭제하기

마지막으로 데이터를 삭제하는 뮤테이션을 보겠습니다.

mutation {
deleteUser(id: 1) {
id
}
}

이 뮤테이션은 id가 1인 사용자를 삭제하고, 삭제된 사용자의 id를 반환합니다.

3. 쿼리와 뮤테이션의 차이점 정리

  • 쿼리(Query): 서버에서 데이터를 가져오는 작업입니다. 클라이언트가 필요한 데이터를 정확하게 요청할 수 있습니다.
  • 뮤테이션(Mutation): 서버에서 데이터를 변경하는 작업입니다. 데이터를 추가, 수정, 삭제하는 요청을 보낼 때 사용됩니다.
작성일 댓글 남기기

GraphQL이란?

1. GraphQL이란 무엇인가?

GraphQL은 서버에서 클라이언트에게 데이터를 제공하는 방법 중 하나입니다. REST API를 들어보셨다면, 그와 비슷한 역할을 한다고 보시면 됩니다. 하지만 REST API와 달리 GraphQL은 클라이언트가 원하는 데이터만 정확하게 요청하고 받을 수 있는 쿼리 언어입니다.

왜 GraphQL을 사용하나요?

기존의 REST API는 데이터를 받아올 때 필요한 것보다 더 많은 정보를 가져오거나, 여러 번 요청해야 할 때가 많았습니다. 이 때문에 데이터 전송 효율이 떨어질 수 있죠. GraphQL은 이런 문제를 해결해 필요한 데이터만 효율적으로 받을 수 있도록 해줍니다.

2. GraphQL의 기본 개념

GraphQL의 중요한 개념들을 하나씩 살펴볼게요.

1) 쿼리 (Query)

쿼리는 클라이언트가 서버에서 데이터를 요청할 때 사용하는 언어입니다. 쿼리를 통해 원하는 데이터를 정확하게 요청할 수 있죠. 예를 들어, 사용자 정보 중 이름과 나이만 요청하고 싶을 때 이렇게 쓸 수 있어요:

query {
user(id: 1) {
name
age
}
}

위의 쿼리에서는 user라는 데이터를 가져오는데, 그 중에서도 nameage만 요청하고 있습니다. 그러면 서버는 요청한 데이터만 정확하게 반환하게 됩니다.

2) 뮤테이션 (Mutation)

뮤테이션은 데이터를 변경할 때 사용됩니다. 데이터를 추가하거나 수정하거나 삭제하는 등의 작업을 할 때 뮤테이션을 사용합니다.

mutation {
addUser(name: "John", age: 30) {
id
name
}
}

이 예제에서는 addUser라는 뮤테이션을 통해 새로운 사용자를 추가하고, 그 사용자의 idname을 반환받고 있습니다.

3) 스키마 (Schema)

GraphQL의 핵심은 스키마라는 개념입니다. 스키마는 어떤 데이터를 요청할 수 있고, 그 데이터가 어떤 형식인지를 서버가 정의해 둔 설계도 같은 것입니다. 스키마를 통해 클라이언트는 어떤 요청을 할 수 있는지 미리 알 수 있죠.

예를 들어, 스키마에서 user라는 타입이 있고 그 안에 name, age, email 등의 필드가 있다고 정의되어 있으면, 클라이언트는 user 타입에서 해당 필드들만 요청할 수 있습니다.

3. GraphQL과 REST API의 차이점

  • 엔드포인트: REST API에서는 여러 엔드포인트(URL)를 통해 데이터를 요청합니다. 하지만 GraphQL은 하나의 엔드포인트만 사용해 데이터를 요청합니다.
  • 데이터 요청 방식: REST API는 정해진 데이터를 항상 반환하지만, GraphQL은 클라이언트가 원하는 데이터만 정확하게 요청할 수 있습니다. 이로 인해 불필요한 데이터 전송을 줄일 수 있습니다.

4. 간단한 예제

우리가 사용자 정보와 그 사용자가 작성한 게시물 정보를 가져오고 싶다고 해볼게요. REST API에서는 두 번의 요청을 해야 할 수도 있지만, GraphQL에서는 한 번의 요청으로 가능합니다.

query {
user(id: 1) {
name
posts {
title
}
}
}

이렇게 요청하면 서버는 사용자 이름과 그 사용자가 작성한 게시물의 제목들을 반환해 줍니다.


결론

GraphQL은 클라이언트가 필요한 데이터만 요청할 수 있는 효율적인 API입니다. REST API보다 데이터 전송이 최적화되고, 여러 요청을 하나로 통합할 수 있다는 장점이 있습니다.