마이크로서비스가 일정 규모를 넘어가면 클라이언트-서버 간의 데이터 계약이 큰 운영 비용이 된다. 모바일 앱이 "주문 상세 + 사용자 + 배송지 + 결제 수단"을 한 화면에 보여주려면 REST API 4-5개를 동시에 호출하고 클라이언트에서 합쳐야 한다. 화면이 바뀌면 백엔드 API도 바뀐다. 이 결합을 깨는 답이 GraphQL이고, AWS에서는 AppSync가 그 매니지드 서비스다.
한편 서비스 간 메시징은 SQS·SNS·Kinesis가 오랫동안 표준이었다. 셋은 비슷해 보이지만 본질이 다르다. SQS는 "1회 소비 큐", SNS는 "fan-out pub/sub", Kinesis는 "재처리 가능한 스트림". 시험에서는 이 셋을 구분하는 시나리오가 도메인을 가리지 않고 자주 출제된다. 오늘은 AppSync의 GraphQL 모델과 세 메시징 서비스의 내부 모델을 함께 본다.
REST API의 두 가지 만성 문제:
GraphQL(Facebook, 2015 공개)은 이를 클라이언트 쿼리 언어로 해결한다. 클라이언트가 필요한 필드와 그 관계를 선언하면, 서버가 정확히 그만큼만 반환한다.