작성일 — 댓글 남기기

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

1. 쿼리(Query) 작성하기

쿼리란 무엇인가?

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

기본 쿼리 예제

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

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

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

중첩 쿼리(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는 변수로 사용됩니다. 실제 요청을 보낼 때는 이 변수를 지정해서 데이터를 요청할 수 있어요. 예를 들어, userId에 2를 넣으면, 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라는 데이터를 가져오는데, 그 중에서도 name과 age만 요청하고 있습니다. 그러면 서버는 요청한 데이터만 정확하게 반환하게 됩니다.

2) 뮤테이션 (Mutation)

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

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

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

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보다 데이터 전송이 최적화되고, 여러 요청을 하나로 통합할 수 있다는 장점이 있습니다.