성장, 그리고 노력

부족하더라도 어제보다 더 잘해지자. 노력은 절대 배신하지 않는다.

GraphQL

[GraphQL] 3. GraphQL 쿼리어2

제이콥(JACOB) 2019. 12. 9. 00:35

image

 

GraphQL은 많은 툴들이 지원한다. GraphiQL, Apollo CLI는 많이 들어봤는데, TypeGraphQLGraphQL Code Generator도 시간이 나면 찾아봐야겠다.

이번 글은 "2. GraphQL 쿼리어1"에 의존하고 있다. 생각보다 코드를 넣으니, 양이 많아져 분리했다.

mutation (뮤테이션)

뮤테이션은 REST에서 PUT 요청을 통해 데이터를 수정하는 요청과 비슷한 요청이다. 물론 REST에서 GET 요청으로 데이터 수정 요청을 못하는건 아니다. 이와 동일하게 뮤테이션이 아니더라도 가능은 하지만, 데이터 변경을 발생시키는 작업은 명시적으로 뮤테이션을 통해 전송되어야 하는 것이다. 또한 뮤테이션 또한 기본적인 쿼리와 마찬가지로 중첩 필드를 요청할 수도 있다. 예를 먼저보자.

mutation CreateReviewForEpisode($ep: Episode!, $review: ReviewInput!) {
  createReview(episode: $ep, review: $review) {
    stars
    commentary
  }
}
# Request Data
{
  "ep": "JEDI",
  "review": {
    "stars": 5,
    "commentary": "This is a great movie!"
  }
}
# Response Data
{
  "data": {
    "createReview": {
      "stars": 5,
      "commentary": "This is a great movie!"
    }
  }
}

여기서 약간만 정리를 해보자면, 쿼리(query)는 GraphQL에서 일어나는 모든 읽기와 관련된 부분이고, 뮤테이션(mutation)은 모든 쓰기와 관련된 부분이라고 보면 된다. 뮤테이션은 벡엔드 데이터에 영향을 미치기 때문에 위험하다. 예를들어,

mutation goToTurnOver {
  deleteAllData
}

deleteAllData이라는 모든 데이터를 지워버리는 위력을 지닌 필드를 사용했다고 해보면... 생각만 해도 끔직할 것이다. 다시 어떻게든 복구를 한다고 하더라도 서비스에 대한 신뢰도는 하락하고 이걸 사용한 사람은 이직(Turn Over)해야 한다. 말이 좋아 이직이지 그냥 해고 + 소송감이다! 그래서 이런 부분은 GraphAPI를 만들때 정해야 한다. 그때 다시 한번 언급하겠다.

 

subscription (서브스크립션)

서브스크립션은 GraphQL에서 다루는 query, mutation 다음으로 다루는 세번째 작업 타입이다. 이 작업이 뭔지 궁금하겠지만, 우리는 이미 수차례 사용해봤을 확률이 높다. 바로 "FaceBook"에서 "좋아요"를 누르면 실시간으로(웹 새로고침 없이) "좋아요 수"가 업데이트 되는 기능에 실제로 사용된 부분이 subscription이다. 서브스크립션은 말그대로 구독이므로(일반적으로 사용하는 옵저버패턴의 느낌이다.) 구독 해놓으면 계속 관찰하고 있다가 데이터 변경이 일어나면 상태가 푸쉬된다. 그리고 한번 구독하면 계속 데이터를 수신한다. 그리고 구독을 해지해야지 데이터를 더 이상 받지 않는다.

 

참고자료

  • https://graphql-kr.github.io/
  • https://graphql.org/
  • https://landscape.graphql.org/
  • Learing GraphQL by Eve Porello and Alex Banks(O'Reilly). Copyright 2018 Moon Highway, LLC, 978-1-492-03071
반응형