March 20, 2021 ( last updated : March 20, 2021 )
Graphql
gql
그래프큐엘
김혜원
https://github.com/sneakstarberry/
김혜원이 배워가고 싶다고 해서 시작된 포스트
Mutation
에 대한 개념을 익혀보겠습니다. 뮤테이션에 대해 공식 문서에서 쓰인 내용을 보겠습니다.
기술적으로는 어떠한 쿼리든 데이터를 수정할 수도 있습니다.
하지만 변경을 발생시키는 작업이 명시적으로 뮤테이션를 통해 전송되어야 한다는 규칙을 정하는 것이 좋습니다.
한마디로 기술적으로는 쿼리를 통해서도 데이터를 변경할 수 있습니다.
하지만 데이터를 변경하는 동작을 명시적으로 하기 위해서 mutation
을 이용하는 것입니다.
그렇기 때문에 쿼리와 뮤테이션은 이름만 다르지 크게 다르지 않습니다.
이제 부터 뮤테이션을 써보겠습니다.
mutation CreateReviewForEpisode($ep: Episode!, $review: ReviewInput!) {
createReview(episode: $ep, review: $review) {
stars
commentary
}
}
{
"ep": "JEDI",
"review": {
"stars": 5,
"commentary": "This is a great movie!"
}
}
쿼리에 변수를 더해줬을 때와 크게 다를 바가 없습니다. 위의 뮤테이션을 통해서 나올 결과 값 또한 예상이 쉽게 갑니다.
{
"data": {
"createReview": {
"stars": 5,
"commentary": "This is a great movie!"
}
}
}
하지만 쿼리와 뮤테이션은 중요한 차이점이 있습니다. 바로 한 요청에 다중 쿼리를 사용할 때 쿼리는 병렬적으로 실행 됩니다. 반면에 뮤테이션은 순서대로 실행이 됩니다. 다음 뮤테이션보다 이전 뮤테이션이 먼저 실행될 것을 보장 받는 다는 것이죠.
하지만 이러한 사항은 조금만 생각해보면 당연한 얘기겠죠?
뮤테이션이 순서대로 실행될 것을 보장받는다면 한 요청으로 이전 뮤테이션의 결과 값을 다음 뮤테이션의 변수 값으로 입력을 할 수 있을까요?
안탁깝게도 그렇게는 안된다고 합니다. 이와 같은 사항이 필요한 경우는 gql을 만든 페이스북에서도 희귀한 사례라고 하네요. 그래서 해당 기능을 추가하지 않기로 한듯 합니다. 이에대한 내용은 아래 링크에서 얘기하고 있으니 참고하시면 될 것 같습니다.
Chain operations (mutations/queries) values
Originally published March 20, 2021
Latest update March 20, 2021
Related posts :