https://s3-us-west-2.amazonaws.com/secure.notion-static.com/69fcf399-7c8c-4a03-b074-47e84e7ecee3/Untitled.png

바쁘신 분들을 위한 3줄 요약!

GraphQL Subscription 이란 ❓

저희의 핵심 기능인 실시간 위치공유, 채팅, 오더 알림을 구현하기 위해 GraphQL Subscription을 사용했습니다. Subscription 은 GraphQL의 한 기능으로 특정한 이벤트가 발생했을 때에 서버에서 클라이언트로 데이터를 보낼 수 있게 해줍니다.

GraphQL Subscription을 사용한 이유❗

저희 프로젝트에는 오더 알림이라는 기능이 있습니다. 사용자가 드라이버를 호출하기 위해 탐색버튼을 클릭하면 드라이버는 새로운 오더 알림을 받게 됩니다. 즉 사용자의 드라이버 호출이라는 특정 이벤트에 의해서 드라이버는 서버에서 새로운 오더에 대한 데이터를 받게 되는 겁니다.

하지만 모든 드라이버가 알람을 받지 않습니다. 오더를 호출한 사용자를 기준으로 10km 안에 있는 드라이버만 알람을 받게 됩니다. 이를 위해 저희는 Subscription withFilter 을 통해 특정 드라이버에게만 새로운 오더 알람을 띄워 주도록 구현했습니다.

그럼 어떻게 GraphQL Subscription 을 구현할까 ❓

GraphQL Subscription은 WebSocket을 기반으로 구현되어 있습니다. 클라이언트에서 서버로 요청을 보낸 후 응답을 받고 연결을 종료하는 HTTP 요청과 달리 GraphQL Subscription 에서는 서버가 구독중인 클라이언트와 지속적인 연결을 유지합니다.

저희 서비스로 예를 들면 클라이언트에 해당하는 드라이버는 아래 코드와 같이 오더생성 이라는 관심있는 이벤트를 명시한(SUB_NEW_ORDER) 구독쿼리를 서버에 전송하여 서버와 지속적인 연결을 형성합니다. 드라이버에 해당하는 클라이언트가 오더생성 이라는 관심있는 이벤트를 구독(Subscribe)하게 되는것이죠!