GraphQL

정성훈·2023년 5월 5일

GraphQL이란?

GraphQL은 서버와 클라이언트 간의 데이터 통신을 위한 새로운 방법으로, 필요한 데이터만 선택적으로 요청할 수 있습니다. 스키마를 사용하여 데이터의 형식을 정의하며, RESTful API에 비해 더 나은 성능을 제공합니다.

GraphQL을 사용하는 이유는?

1. 유연한 데이터 요청

GraphQL은 클라이언트에서 필요한 데이터만 선택적으로 요청할 수 있기 때문에, 필요하지 않은 데이터를 불러오는 문제가 발생하지 않습니다. 이를 통해 불필요한 데이터를 전송하지 않고, 더 빠르고 효율적인 통신이 가능합니다.

2. 간결하고 직관적인 코드 작성

GraphQL은 스키마를 사용하여 데이터의 형식을 정의하므로, 개발자는 클라이언트와 서버 간의 데이터 형식을 일치시킬 필요가 없습니다. 이를 통해 더 간결하고 직관적인 코드를 작성할 수 있습니다.

3. 여러 프로그래밍 언어 및 프레임워크에서 사용 가능

GraphQL은 다양한 프로그래밍 언어와 프레임워크에서 사용 가능합니다. 또한, 프론트엔드와 백엔드 간의 API를 통합할 때 유용하게 사용됩니다.

4. GraphQL Subscriptions을 사용한 실시간 데이터 처리

GraphQL Subscriptions을 사용하면, 클라이언트에서 실시간으로 데이터를 받아올 수 있습니다. 이를 통해 실시간으로 변화하는 데이터를 쉽게 처리할 수 있습니다.

5. RESTful API보다 더 나은 성능

GraphQL은 필요한 데이터만 선택적으로 요청하기 때문에, RESTful API보다 더 나은 성능을 제공합니다. 또한, 한 번의 요청으로 여러 데이터를 받아올 수 있기 때문에, RESTful API에 비해 더 적은 요청을 보내므로 네트워크 오버헤드를 줄일 수 있습니다.

GraphQL 문법

클라이언트

1. 쿼리(Query): 데이터를 읽는 데 사용됩니다. 필드와 인수를 지정하여 데이터를 요청합니다.

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

2. 뮤테이션(Mutation): 데이터를 생성, 업데이트 또는 삭제하는 데 사용됩니다.

mutation {
  createUser(name: "John", email: "john@example.com") {
    id
    name
    email
  }
}

3. 변수(Variable): 쿼리에서 사용할 인수의 값을 동적으로 설정할 수 있습니다.

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

4. 프래그먼트(Fragment): 여러 필드를 그룹화하여 재사용 가능한 코드 조각을 만듭니다.

fragment UserInfo on User {
  name
  email
}

query {
  user(id: "1") {
    ...UserInfo
  }
}

서버

1. 타입(Type): 데이터 모델을 정의합니다.

type User {
  id: ID!
  name: String!
  email: String!
}

2. 쿼리(Query): 데이터를 가져오는 데 사용됩니다.

type Query {
  user(id: ID!): User
}

3. 뮤테이션(Mutation): 데이터를 변경하는 데 사용됩니다.

type Mutation {
  addUser(name: String!, email: String!): User!
}

4. 필드(Fields): 타입에서 정의된 데이터 모델의 필드를 가져오거나 설정합니다.

type User {
  id: ID!
  name: String!
  email: String!
  posts: [Post!]!
}

type Post {
  id: ID!
  title: String!
  content: String!
  author: User!
}

type Query {
  user(id: ID!): User
  post(id: ID!): Post
}
profile
Frontend 개발자 입니다.

0개의 댓글