GraphQL이 마이크로서비스에 완벽한 이유
3183 단어 microservicestypescriptgraphql
백엔드를 GraphQL로 마이그레이션하기 전에, 특히 여러 서비스의 데이터를 사용하는 보기를 만들어야 할 때 클라이언트 측 네트워킹 코드에 부과되는 추가적인 복잡성이 있었습니다.
예를 들어 우리 애플리케이션에는 다음과 같은 "약속 목록"보기가 있습니다.
모놀리식 아키텍처에서 이 페이지의 네트워킹 코드는 사소할 수 있습니다. 제공자, 환자 및 진료소 세부 정보 없이 약속을 보는 것은 매우 드문 일이므로 약속 쿼리에서 해당 테이블을 조인하고 매번 반환하는 것이 좋습니다.
예를 들어:
[MONOLITH]: /companies/id/appointments
{ result: [Appointment] } <--- joined with provider/patient info
그러나 Appointment Service는 공급자 및 환자 데이터에 액세스할 수 없기 때문에 마이크로 서비스 아키텍처에서는 이 JOIN이 불가능했습니다.
우리의 클라이언트 애플리케이션은 이제 필요한 모든 데이터를 반환하는 하나의 리소스를 쿼리하는 대신 4개의 서로 다른 엔드포인트를 통해 3개의 서로 다른 서비스를 쿼리해야 했습니다. 또한 클라이언트 애플리케이션은 초기 예약 쿼리를 로드할 때까지 필요한 공급자, 환자 및 클리닉의 ID에 액세스할 수 없었습니다!
따라서 클라이언트 측 네트워킹 로직은 다음과 같이 생겼습니다.
- [APPOINTMENT SERVICE] - GET /companies/id/appointments
.. wait for data ...
{ result: [Appointment] }
THEN:
- [PATIENT SERVICE] - GET /patients/id x 5
- [COMPANY SERVICE] - GET /clinics/id x 5
- [COMPANY SERVICE] - GET /providers/id x 2
이상적이지 않습니다! 요청은 빨랐지만 나머지 관련 세부 정보를 가져오기 전에 초기 약속 요청이 완료될 때까지 기다려야 했기 때문에 모놀리식 버전보다 거의 두 배나 느렸습니다.
구조를 위한 GraphQL
우리는 한동안 이러한 제한 사항을 해결하기 위해 노력했지만 결국 무언가를 제공해야 한다는 것을 깨달았습니다. 백엔드 팀이 그토록 좋아했던 마이크로서비스 인프라는 프런트엔드 및 모바일 팀의 개발자 경험을 극도로 실망스럽게 만들었습니다. 우리는 해결책이 필요했고 신속하게 해결책이 필요했습니다.
운 좋게도 GraphQL 생태계에는 우리 문제에 대한 완벽한 솔루션인 Apollo Federation이라는 완전히 새로운 혁신이 있었습니다.
Apollo Federation은 각 마이크로 서비스가 자체 "하위 그래프"를 관리하는 동시에 클라이언트 애플리케이션에서 해당 복잡성을 추상화하도록 허용했습니다. 우리의 모든 하위 그래프는 GraphQL 게이트웨이에서 함께 연결되어 단일 끝점을 통해 쉽게 액세스할 수 있는 하나의 원활한 연합 그래프를 생성했습니다.
회사 약속 목록에 대한 새로운 요청은 다음과 같습니다.
- [GRAPHQL GATEWAY] - POST /graphql
query {
companyAppointments { <--- [APPOINTMENT]
startTime
patient { <--- [PATIENT]
firstName
lastName
}
provider { <--- [COMPANY]
firstName
lastName
}
clinic { <--- [COMPANY]
clinicName
lastName
}
}
고객은 쿼리 중인 데이터를 해결하는 백엔드 서비스를 알 필요가 없었고 이 보기를 완료하기 위해 한 번만 요청하면 되었습니다. 이 새로운 쿼리는 또한 다음과 같은 이유로 훨씬 더 효율적이었습니다.
GraphQL Federation 덕분에 우리는 케이크를 먹고 먹을 수 있었습니다! 백엔드 팀은 마이크로서비스가 제공하는 모든 이점으로 개발을 계속할 수 있었고 프런트엔드 및 모바일 팀은 GraphQL의 유연성으로 더욱 효율적이 되었습니다.
우리는 Federated GraphQL로의 마이그레이션 결과에 매우 만족했으며 마이크로서비스는 REST와 함께 좋을 수 있지만 GraphQL과 함께 더 좋습니다!
Reference
이 문제에 관하여(GraphQL이 마이크로서비스에 완벽한 이유), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/sjarman91/why-graphql-is-perfect-for-microservices-2lfh텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)