GraphQL에는 Subscription이라는 기능이 존재합니다.
이 기능은 클라이언트에 실시간으로 업데이트된 데이터를 주는 방법으로 쓰입니다.
또한 이 기능을 이용하여 클라이언트가 서버를 통해 특정 이벤트나 데이터의 변화를 알아내고 이에 따른 업데이트된 데이터를 받을 수도 있습니다.
Subscription은 서버에서 정의되며 query나 mutation과 유사한 구조를 가집니다.
Subscription은 "subscription" 필드를 최상위에 포함합니다. 이 필드 이후 구독할 이벤트나 데이터에 대한 정의를 합니다.
클라이언트는 subscription 쿼리를 서버로 보냄으로써 구독이 가능합니다.
클라이언트가 subscription 쿼리를 보낸 후 서버에서 해당 쿼리를 받았을 때 쿼리는 클라이언트와의 커넥션을 엽니다.
이 커넥션은 이후 이벤트나 데이터 변화가 생겼을 때 서버에서 업데이트 된 데이터를 보내기 위해 사용됩니다.
Event Based Subscription이란 특정 이벤트가 서버에 발생하였을 때 클라이언트에 데이터를 실시간으로 주는 방식을 말합니다.
이때 이벤트는 유저의 행동이나 센서의 데이터나 다른 시스템 같은 외부 요인들에 의해 발생할 수 있습니다.
또는 데이터베이스 업데이트와 같은 내부 요인에 의해서도 발생할 수 있습니다.
live query는 클라이언트에 실시간으로 데이터를 주는 또 다른 방식입니다.
이 방식은 서버에 쿼리한 데이터가 변화했을 때 실시간으로 서버가 해당 쿼리에 대해 바뀐 데이터를 전달해 줍니다.
GraphQL에는 defer과 stream이라는 지시어가 있습니다.
이 지시어들은 필드와 필드와 관련된 데이터들을 다루는 것을 제어하는데 사용됩니다.
이 지시어들은 개발자가 어떻게 데이터가 가져오는지 그리고 어떻게 네트워크를 통해 보내지는지 제어하게 만들어줍니다. 그리고 GraphQL API의 성능을 최적화를 가능하게 합니다.
defer 지시어는 클라이언트가 실제로 해당 데이터를 필요로 하기 전까지 해당 필드의 데이터를 가져오는 오는 것을 지연시키는 역할을 합니다.
stream 지시어는 대규모 데이터를 처리할 때 유용한 기능으로, 클라이언트가 서버로부터 일부 필드를 스트리밍 방식으로 점진적으로 받아올 수 있게 해줍니다. 즉, 모든 데이터를 한 번에 가져오는 대신, 데이터를 준비되는 대로 조금씩 받을 수 있게 하여 사용자 경험을 개선하고 성능을 최적화합니다.