Domain Graph Service(DGS) - Netflix의 Spring Boot용 오픈 소스 GraphQL 프레임워크

GraphQL 커뮤니티는 GraphQL 구현이 어떻게 제품을 변경하고 더 우수하고 강력하게 만들었는지에 대한 훌륭한 이야기로 가득 차 있습니다. 때때로 GraphQL을 채택하면 혁신이 필요합니다. Facebook 내부에서 생성되어 나중에 공개된 GraphQL 자체와 마찬가지로 많은 회사에서 GraphQL 구현을 오픈소스화하고 대중에게 제공하여 개발자 커뮤니티에 얼마나 많은 것을 줄 수 있는지 확인합니다. 이것은 그 이야기 중 하나입니다.

시작 방법



2019년 Netflix는 다음을 목표로 연합 GraphQL 아키텍처를 구현하기로 결정했습니다.
  • 소비자를 위한 통합 API 제공,
  • 백엔드 개발자에게 유연성 제공,
  • 서비스 격리를 유지합니다.

  • 백엔드 개발을 위해 Spring Boot를 표준화한 회사의 경우, 새로운 아키텍처로의 전환은 Netflix의 Java 에코시스템 전반에 걸쳐 다양한 백엔드 팀을 위해 GraphQL을 채택해야 하는 과제를 의미했습니다. 이 작업을 성공적으로 호출하려면 GraphQL을 구현해야 하는 팀이 Spring Boot에서 GraphQL에 대한 훌륭한 개발자 경험을 제공해야 한다는 것이 분명했습니다. 이것이 도메인 그래프 서비스가 탄생한 이유입니다.

    도메인 그래프 서비스



    DGS(도메인 그래프 서비스)는 Netlfix에서 내부적으로 생성된 프레임워크로 Spring Boot용 독립 실행형 및 연합 GraphQL 서비스의 구현을 단순화합니다. 프레임워크는 graphql-java 위에 구축됩니다. 대부분의 DGS 코드는 Kotlin으로 작성되었지만 주로 Java와 함께 사용하도록 설계되었으며 주요 기능은 다음과 같습니다.
  • 주석 기반 Spring Boot 프로그래밍 모델,
  • 스프링 보안과 통합,
  • GraphQL 스키마에서 Java/Kotlin 유형을 생성하는 Gradle 코드 생성 플러그인,
  • Java용 GraphQL 클라이언트,
  • 오류 처리,
  • GraphQL Federation과의 손쉬운 통합,
  • GraphQL 구독(WebSockets 및 SSE),
  • 인터페이스/공용체 유형을 자동으로 지원합니다.

  • 개발자들에게 얼마나 큰 거래인지 깨달은 Netflix는 2020년에 프레임워크를 오픈 소스로 만들고 이를 중심으로 커뮤니티를 구축하기로 결정했습니다(Netflix는 동일한 OSS 구성 요소를 사용하고 있습니다!).




    출처: netflixtechblog.com

    시작하기



    DGS를 사용하는 것은 매우 간단합니다. 프레임워크의 기초는 Spring Boot 개발자에게 잘 알려진 주석 기반 프로그래밍 모델을 중심으로 구성됩니다. 이 프로젝트를 진행하는 팀에서 제공한 예를 살펴보겠습니다.

    우선, GraphQL 스키마를 정의해야 합니다. 예를 들면 다음과 같이 간단합니다.

    type Query {
        shows(titleFilter: String): [Show]
    }
    
    type Show {
        title: String
        releaseYear: Int
    }
    


    스키마가 정의되면 다음 단계는 페처를 구현하는 것입니다. 그게 다입니다. 이것은 GraphQL 엔드포인트를 실행하기에 충분합니다!

    @DgsComponent
    public class ShowsDatafetcher {
    
        private final List<Show> shows = 
          List.of(
             new Show("Stranger Things", 2016),
             new Show("Ozark", 2017)
         );
    
        @DgsData(parentType = "Query", field = "shows")
        public List<Show> shows(@InputArgument("titleFilter") String titleFilter) {
            if(titleFilter == null) {
                return shows;
            }
    
            return shows.stream()
                .filter(s -> s.getTitle().contains(titleFilter))
                .collect(Collectors.toList());
        }
    }
    




    출처: netflixtechblog.com

    사용해 보세요



    DGS 프레임워크를 사용해보고 싶다면 official documentation and guides을 확인하거나 the DGS repo on GitHub으로 바로 이동하세요.


    GraphQL API 개발 속도 향상



    GraphQL Editor는 고급 GraphQL 사용자와 GraphQL API를 처음 사용하는 사용자 모두를 지원하는 도구입니다. GraphQL용 올인원 개발 환경은 GraphQL API를 훨씬 빠르게 구축, 관리 및 배포하는 데 도움이 됩니다. Try GraphQL Editor for free!

    좋은 웹페이지 즐겨찾기