GraphQL + Serverless = lyf

Daniel any
6 min readAug 11, 2021

rebitly 설계도

GraphQL + Serverless

GraphQL?

  • 여러 API를 단일 HTTP 엔드포인트로 축소할 수 있음
  • 이를 사용하여 여러 데이터 소스에서 데이터를 가져올 수 있음

장점

  1. 네트워크 비용을 줄이고 쿼리 효율성을 높일 수 있다.
  2. 응답이 어떻게 생겼는지 정확히 알고 클라이언트가 필요로 하는 것보다 많거나 적게 보내지 않을 수 있다.
  3. 스키마를 기존 백엔드에 매핑하는 유형으로 API를 설명할 수 있다.

GraphQL을 사용하기 전에…

  1. 하나의 API 엔드포인트만 있는 것은 너무 위험하다. 다운되면 어떻게 할까?
  2. 많은 부하를 어떻게 처리할까?
  3. 보안은 어떻게 할까?

하나의 HTTP 엔드포인트를 사용하면 엔드포인트가 절대 다운되지 않고 필요에 따라 확장할 수 있음을 완전히 확신해야 한다.

Serverless?

  1. 서버 관리 없음 (어떤 형태의 시스템도 관리할 필요 없음, No server management)
  2. 실행당 지불 (유휴에 대해 지불X,Pay-per-execution)
  3. 오토스케일 (수요에 따른 스케일링 가능, Auto-scale)
  4. 함수 단위 (Function as a unit of application logic)

서버리스를 사용하기 전에…

  1. 복잡하고 고차원의 큰 데이터 세트를 제공하기 위해 지연 시간이 짧은 API를 어떻게 구축할 수 있을까?
  2. 단일 쿼리를 사용하여 여러 데이터 소스에서 중첩 응답을 구성할 수 있을까?
  3. 데이터를 통해 안전하게 집계하고 페이지를 매길 수 있는 엔드포인트를 고성능으로 구축할 수 있을까?
  4. 유휴 CPU 시간이 아닌 각 쿼리 실행에 대해서만 비용을 지불하면서 규모에 맞게 이 모든 작업을 수행할 수 있는 방법이 있을까?

Serverless와 GraphQL이 잘 맞는 이유?

  • GraphQL을 통해 하나의 HTTP 엔드포인트에 의존하여 클라이언트를 백엔드 서비스에 연결 가능
  • 서버리스를 통해 안정적이고 빠르며 확장성이 용이하며 보안성이 좋은 하나의 HTTP 엔드포인트 관리 가능
  • 이러한 모든 속성은 API Gateway + 단일 AWS Lambda 함수로 충족

서버리스 백엔드로 GraphQL 엔드포인트를 구동하면 확장성 및 가용성 문제가 완전히 해결되고 보안에 큰 도움이 된다. 많은 코드 구성도 필요 없다.

FaaSaaS

  • Function as a Service as a Server
  • FaaS를 서버로 활용하는 방식
  • GraphQL + Serverless 를 기반으로 하나의 HTTP를 통해 관리
  • 서버리스의 장점을 가진 HTTP 서버로 활용

Apex — Up

사용하는 이유

  • 이전에 사용해왔기 때문에..

Up is the second framework from TJ Holowaychuk. Compared to Apex, Up has added a whole bunch of new features, including support for multiple providers and built-in middlewares. One interesting capability Up offers, is the ability to separate the planning and the application of configuration changes. You can see what configuration changes Up will apply by running the up stack plan command. Once you are satisfied with the plan, then you must run the up stack apply command to actually apply the changes. This is similar to the terraform plan and terraform apply commands for those of you who are familiar with Terraform.

  • Up은 vanilla HTTP server를 배포하는 것에 집중한다.
  • <계획 및 구성 변경> 과 <응용 프로그램>을 분리하는 기능 → 핵심 로직과 인프라를 분리하여 관리할 수 있다.
    (terraform plan, terraform apply와 유사함)
  • 상대적으로 가벼운 프레임워크
  • 빠른 배포가 가능 (DEPLOY IN SECONDS)
  • GraphQL + Serverless 를 구현하는데 최적

VPC (Virtual Private Cloud)

아마존 공식 설명

Amazon Virtual Private Cloud(VPC)를 사용하면 AWS 클라우드에서 논리적으로 격리된 공간을 프로비저닝하여 고객이 정의하는 가상 네트워크에서 AWS 리소스를 시작할 수 있습니다. IP 주소 범위 선택, 서브넷 생성, 라우팅 테이블 및 네트워크 게이트웨이 구성 등 가상 네트워킹 환경을 완벽하게 제어할 수 있습니다. VPC에서 IPv4와 IPv6를 모두 사용하여 리소스와 애플리케이션에 안전하고 쉽게 액세스할 수 있습니다

  • 즉, 논리적으로 공간을 격리하는데, 우리가 사용하는 EC2, RDS 등이 이 격리된 공간 위에서 리소스를 생성하는 것
  • 하나의 계정에서 생성한 리소스들만의 격리된 네트워크를 만들어주는 기능이 바로 VPC이고, 격리되어 있기 때문에 다른 사람들은 접근하고 보는 것이 불가능
  • 2019년부터 모든 사용자에게 VPC적용이 강제적으로 부여됐기 때문에, 대부분의 서비스는 VPC없이는 사용할 수 없음

참고

--

--