https://kotlinworld.com/331?category=997256
우리가 HTTP 요청을 할 때, GET, POST, DELETE, PATCH 등의 메서드가 제공되는 것처럼 GraphQL 또한, query, mutation, subscription 이라 불리는 세 가지 요청 방식을 제공한다.

query는 읽기 전용으로 데이터를 가져오기 위한 메서드이다. query 를 사용하는 경우는 데이터가 변화될 필요없이 단순한 조회가 필요할 때다. 예를 들어 view 를 그리기 위한 정보 혹은 유저 정보를 가져오기 위하 경우에 사용한다.

mutation 은 데이터를 변경한 후, 가져오기 위한 메서드이다. 요청으로 데이터를 변화시켜야 하는 경우에 사용한다. 예를들어 회원가입을 통해 유저가 등록되어야 하거나, 주문이 접수되어 유저의 주문 정보가 업데이트 되었을 경우 사용된다.

마지막으로 subscription 은 실시간으로 변경된 데이터를 가져오기 위한 요청 방식이다. GraphQL 의 subscription 은 웹소켓을 통해 소켓 통신을 열어두고 데이터 업데이트 시 알리는 방식으로 이루어진다. 만약 내부의 구현이 궁금하다면 아래 정보를 참고하기를 바란다.
subscription 은 리액티브 프로그래밍의 데이터 발행자와 매우 비슷한 역할을 하며, 데이터가 자주 업데이트 되어야 하는 View (예를 들면 Chatting 을 위한 View) 라면 매번 상태가 업데이트 될 때마다 HTTP 요청을 보내는 것은 자원의 낭비가 심하므로 소켓통신으로 처리하는 것이 좋다. 이런 경우 사용되는 것이 바로 subscription 이다.