왜 당신의 조직에 연방도 인터페이스가 필요합니까
백엔드 엔지니어가 코드와 무관한 상황에서 응용 프로그램의 작은 부분을 처리할 수 있다는 장점이 있다.단일 서비스도 한 번에 하나씩 배치하여 유지보수와 업그레이드를 더욱 쉽게 관리할 수 있다.
마이크로 서비스를 실현하는 가장 큰 도전은 모든 서비스의 범위를 정확하게 정의하는 것이다. (많은 마이크로 서비스의 실현에서 당신은 최종적으로 하나의 '마이크로 전체'를 얻게 될 것이다.) 그리고 개발자가 여러 개의 마이크로 서비스의 데이터를 동시에 필요로 할 때 이러한 고립된 서비스를 통합시키는 것이다.
연방도 인터페이스는 서비스를 확장하고 관리하기 쉬운 방식으로 연결하는 옵션이다.연방도 인터페이스는 API 게이트웨이와 유사하며 개발자가 단일GraphQL 인터페이스를 사용하여 여러 개의 API를 동시에 조회할 수 있도록 돕기 위한 것이다.
본고에서 귀하는 federated data architectures와 결합 서비스에서 데이터를 조회하는 방식을 이해하게 될 것입니다.나는 the Apollo Federation implementation를 중점적으로 소개할 것이다. 이것은 여러 실례에 저장된 데이터를 읽고 수정하는 것을 지원한다.이러한 방법이 왜 팀에서 마이크로 서비스에서 온 데이터를 조회하고 사용할 수 있는지, 그리고 GraphQL 서버를 조회하는 것처럼 여러 GraphQL 서버를 조회할 수 있는지 이해할 수 있습니다.
연방도 인터페이스의 장점
"UI developers love the simplicity of working with one conceptual API for a large domain. Back-end developers love the decoupling and resilience offered by the API layer...As we've grown the number of developers and increased our domain complexity, developing the API aggregation layer has become increasingly harder." - Tejas Shikhare, Senior Software Engineer at Netflix
Strong separation of concerns는 연방도 인터페이스를 실현하는 첫 번째 장점이다.이 컴퓨터 과학의 개념은 소프트웨어 중의 구성 요소의 전문화를 제창하는데, 이렇게 시스템의 모든 부분은 하나의 문제와 관련이 있다.대형 구성 요소를 소형 구성 요소로 분해함으로써 모든 구성 요소는 서로 다른 팀에서 설계하고 관리할 수 있으며 모든 업무에 최상의 기술 창고를 사용할 수 있다.
아폴로 연맹의 두 번째 장점은 다른 서브맵에서 실체를 인용할 수 있다는 것이다.이것은 개발자가 집적층에 정의된 모든 하위 그림으로 새로운 해결 방안을 구성할 수 있도록 데이터 디렉터리를 통일시킬 것입니다.이렇게 하면 이전에 정의된 여러 솔리드를 스택할 수 있습니다.
마지막으로 연방도 인터페이스를 사용하면 이전에 정의된 실체를 확장할 수 있다.이것은 inheritance in Object-Oriented Programming의 개념을 반영했다.실제적으로, 이것은 사용자가 기본적인 '사용자' 대상을 정의한 다음에 마이크로 서비스 네트워크에서 다른 서비스의 데이터를 사용하여 이를 확장할 수 있다는 것을 의미한다.
마이크로 서비스 및 데이터 제휴
GraphQL 구현 중인 세 개의 그림 중 두 개의 principles of integrity 성명이 있습니다. 이 그림이 다른 팀에서 이루어져도 모든 업무에 대한 그림을 만들어야 합니다.
"When teams create their own individual graphs without coordinating their work, it is all but inevitable that their graphs will begin to overlap, adding the same data to the graph in incompatible ways. At best, this is costly to rework; at worst, it creates chaos." - Principled GraphQL
이것은 마이크로 서비스 체계 구조 스타일의 목표에 매우 부합된다.마이크로 서비스는 귀하가 시스템의 부하(또는 시스템을 구축하는 작업)를 소형, 독립된 팀에 분배하여 최종적으로 공공 인터페이스를 실현하도록 요구합니다.
연방 그래픽 인터페이스를 마이크로 서비스와 결합하여 사용하면 다음과 같은 몇 가지 장점이 있다.
이런 모델은 전체 도형의 개발을 한 팀이나 기술에 집중하는 문제를 피할 수 있다. 왜냐하면 이것은 실제적으로 하나의 전체를 만들고 도입할 수 있기 때문이다all the problems that come along with them.
GraphQL 및 REST 기반 API 게이트웨이
GraphQL과 마이크로 서비스는 공통된 철학적 근원을 가지고 있지만 서로 보완하기 때문에 매우 적합하다.모든 마이크로 서비스의 중앙 접근점을 관리할 수 있는 다른 방법도 있지만 GraphQL federation은 전통적인 REST 기반의 API 인터페이스보다 현저한 개선을 제공했다.
우선, 효과적인 하중에 호응하는 통제권은 소비자에게 맡긴다.이것은 유효 하중을 동적으로 한다.REST API는 일반적으로 사용자에게 어떠한 통제도 제공하지 않고 서비스의 전체 모델을 보여 준다.GraphQL - 그리고 특수한 연방 그림 - 서로 다른 하위 그림에 정의된 다른 실체로 구성된 실체 부분을 조회할 가능성을 제공합니다.
둘째, GraphQL 지원definition of custom types.이 유형 시스템은 업무 영역에 가장 적합한 데이터 형식을 사용하여 모든 마이크로 서비스를 정의할 수 있습니다.연방 그래픽 인터페이스의 인용과 확장 기능을 지원하기 위해 유형은 관건적인 속성을 가진 실체가 되기만 하면 된다.
마지막으로GraphQL은 마이크로서비스를 추가로 사용할 수 있습니다.연방도 인터페이스를 사용하여 전체 서비스의 일부분을 증량적으로 향상시킬 수 있으며, 백엔드의 어떤 기능도 잃어버리지 않습니다.
이런 방법은 companies like Airbnb 응용 프로그램의 각 부분을 새로운 마이크로 서비스로 옮길 때 거대한 돌에 정의된 모든 실체를 자신의 하위 그림으로 분할할 수 있도록 허용한다.이것은 하나의 점진적인 방식으로 하나의 서비스에서 하나의 전체에서 완전한 분포식의 마이크로 서비스로 이전하는 것을 가능하게 한다.
연방도 인터페이스의 구성 요소
연방 그래픽 인터페이스가 응용 프로그램에 적합하다는 것을 확인하면, 반드시 채택 방법을 제시해야 한다.첫 번째 단계는 하나 이상의 기존 백엔드 서비스 위에 추상층을 추가하는 것이다.
Apollo Federation은 게이트웨이를 충당하고 GraphQL 연방을 지원하는 일련의 서비스에 연결됩니다.게이트웨이는 하나의 보호 우산을 충당하여 모든GraphQL 실현이나 마이크로 서비스에 집중적으로 방문한다.이러한 서비스는 내부에서 유지보수할 수도 있고 외부 응용 프로그램에서도 유지보수할 수 있다.
예를 들어 Strapi는 머리 없는 내용 관리 시스템(CMS)으로 GraphQL API를 제공하는데 이 API는 a simple change in its configuration와 연합할 수 있다.
{
"endpoint": "/graphql"
...
,"federation": false
}
전자상거래, 블로그, 지식 라이브러리 등 일반적인 데이터 모델을 실현하기 위해 Strapi의 헤더 기능을 사용할 수 있습니다.이러한 용례는GraphQL federation에 매우 적합합니다. 왜냐하면 서로 다른 하위 그림을 사용하여 느슨한 결합 방식으로 상호작용하는 보충 서비스를 제공할 수 있기 때문입니다.어떻게 연방 그래픽 인터페이스를 구축합니까
우아하고 확장 가능한 해결 방안을 테스트하기 시작하려면 Strapi starter repositories available for free 를 다시 사용할 수 있습니다.Apollo와 호환되는 연방 준비 인터페이스를 통해 접근할 수 있는 일반적인 GraphQL 백엔드 용례가 몇 개 포함되어 있습니다.초보자는 Gatsby,Next와 함께 사용할 수 있는 전단 프레임워크의 예도 포함한다.js 또는 Vue
예를 들어, 사용자 엔티티 중심의 Strapi 그래픽을 원한다고 가정합니다.전형적인 사용자 필드(이름, 이메일, ID 등)를 제외하고는 사용자를 블로그에 올린 글과 같은 외부 내용과 연결하기를 원할 수도 있습니다.
GraphQL 서비스에서 이러한 관계를 설계한 경우 다음과 같이 끝날 수 있습니다.
type User {
id: ID!
, nickname: String!
, name: String
, posts: [Post]
}
type Post {
id: ID!
, title: String!
, tags: String
, text: String
, writer: User
}
보시다시피 이 두 실체는 모두 결합되어 있지만, 응용 형식의 인용과 확장을 통해 쉽게 분리할 수 있습니다.이렇게 하면 사용자를 두 개의 독립된 하위 그림으로 나눌 수 있습니다.
type User {
id: ID!
, nickname: String!
, name : String
}
-- External service definition
type Post {
id: ID!
, title: String!
, tags: String
, text: String
, writer: User
}
extended type User {
id: ID! @external
, posts: [Post]
}
위 예제에서 Post 엔티티를 외부화하고 로컬 유형 확장 사용자 엔티티를 사용하여 이전에 정의한 원래 사용자 유형을 참조할 수 있습니다.이러한 유연성은 단일 문제를 해결하는 원자 실체를 정의하는 마이크로 서비스에서 복잡한 데이터 모델을 만들 수 있도록 합니다.만약 더 많은 예시가 필요하거나 실제 코드로 실현을 이해하고자 한다면 this article는 좋은 출발점이다.이것은 계정을 사용하여 사용자를 조합하는 방법을 보여 주고, 연방 그래픽 인터페이스를 사용하여 서로 다른 공급자의 실체를 볼 수 있습니다.
결론
연방도 인터페이스는 현대 소프트웨어 체계 구조에 매우 적합하다. 예를 들어 Walmart 과 Netflix 는 그것들을 이용하여 마이크로 서비스의 확장을 돕고 있다.
현재headless CMS like Strapi와Apollo 등 기존 스위치의 가용성 때문에 소규모 회사라도 연방도 인터페이스를 비교적 쉽게 실현할 수 있다.이 설정은 유연성과 확장성을 제공하여 시간을 절약하고 더욱 유연하고 확장 가능한 소프트웨어를 구축하는 데 도움을 줄 것입니다.
Reference
이 문제에 관하여(왜 당신의 조직에 연방도 인터페이스가 필요합니까), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/strapi/why-your-organization-needs-a-federated-graph-interface-b45텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)