GraphQL은 많은 툴들이 지원한다. GraphiQL
, Apollo CLI
는 많이 들어봤는데, TypeGraphQL
과 GraphQL 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
'GraphQL' 카테고리의 다른 글
[GraphQL] 5. GraphQL 실행 환경 구성하기(with Apollo) (1) | 2019.12.09 |
---|---|
[GraphQL] 4. GraphQL 스키마 정의 (0) | 2019.12.09 |
[GraphQL] 2. GraphQL 쿼리어1 (0) | 2019.12.09 |
[GraphQL] 1. 기초 개념 및 배경지식 (0) | 2019.12.09 |