-
Couldn't load subscription status.
- Fork 7
GraphQL, Prisma, Apollo 소개
김예진 edited this page Nov 24, 2020
·
1 revision
API를 위한 쿼리 언어이며 이미 존재하는 데이터로 쿼리를 수행하기 위한 런타임
- SQL은 서버 측 요청인 반면, GraphQL은 클라이언트가 요청
- 타입 기반 API 스키마 작성

- REST API를 사용할 때 정의되던 각 CRUD에 요청이 GraphQL에서는 단 하나의 EndPoint에서 일어난다.
- Query의 요청에 따라 결과가 달라진다.
- API에 대한 version 관리가 필요없다.
- 데이터 요청이 유연하다.
- 필요한 데이터만 요청 가능하다.
- REST API와 함께 사용할 수 있다.
- 병목현상과 재귀적 호출 등은 과도한 트래픽 유발 문제가 될 수 있다.
- 재귀적 호출 문제를 해결하기 위해 depth를 지정해줄 수 있다.
- REST API는 특정 url을 기준으로 쉽게 캐싱을 제공할 수 있는 반면, GraphQL은 한 가지의 EndPoint를 통해 요청 쿼리에 따라 다른 결과를 반환하여 캐싱이 복잡하다.
- Apollo 등의 서비스를 이용해 해결할 수 있다.
- Client 개발자가 직접 Query를 작성해야 하기 때문에 GraphQL 문법을 알아야 한다.
데이터베이스를 쉽게 사용할 수 있게 도와주는 데이터베이스 툴킷. Prisma를 통해 ORM을 대체.
- GraphQL 형식의 데이터모델만 작성하면, 사용하는 언어와 DBMS에 구애받지 않고 ORM 클라이언트와 모델 그리고 Data Schema가 자동으로 생성된다.
- GraphQL, REST API의 구현체(Resolvers)를 제공해준다.
- 자체 어드민 페이지를 제공하여 쉬운 데이터 운용이 가능하다.
- Scala로 작성된 Prisma의 서버가 DB 호스트를 앞단에서 관리한다.
- GraphQL 형식의 DataModel을 정의하면
- Prisma가 알아서 사용하고 있는 DBMS와 언어의 종류에 맞게 실제 DB 배포부터 클라이언트와 모델, 타입정의까지 자동으로 만들어 제공한다. (GraphQL의 구현체까지 모두 정의되어있다.)
- 만들어진 클라이언트, 모델, 구현체 등을 바탕으로 실제 서버에 적용한다. (주로
apollo-server를 이용해 구현체(Resolvers)를 그대로 활용한다)
- 언어:
JavaScriptTypeScriptGo - DBMS:
MySQLmongoDBPostgres
GraphQL 기반의 플랫폼
- 글로벌 저장소(global store)와 캐시 등을 제공하는 Apollo는 Apollo Client와 Apollo Server로 나뉘어 있다.
- Apollo Client는 React뿐만 아니라 Angular, Vue.js, iOS, Android 등 다양한 환경에서 사용할 수 있다.
- Apollo Server는 Node.js 기반의 HTTP 서버로 작동한다.
- Apollo Client와 Apollo Server를 사용해 GraphQL 기반의 데이터를 용이하게 관리할 수 있다.

