본문 바로가기

GraphQL

[GraphQL] 3. GraphQL에서의 인증 // Authentication in GraphQL 1. GraphQL에서의 인증 방식GraphQL은 플랫폼 독립적이고 기존의 REST API와는 완전히 다르기 때문에 GraphQL에서의 인증은 큰 문제라고 생각할수도 있지만 인증은 그렇게 어렵지 않다. 기존의 JWT(Json Web Token)을 충분히 이용 가능하다JWT 토큰을 전달하는 위치가 헤더에서 쿼리나 뮤테이션의 인자로 바뀌었을 뿐이다. 우리가 GraphQL 서버를 만들떄 사용하는 Flask와 Graphene에서 인증을 처리하는 것도 기존 Flask에서 Flask-JWT-Extended나 Flask-JWT-Simple을 사용했던 것처럼 Flask-GraphQL-Auth를 사용하면 그저 쿼리 리솔버나 뮤테이션에 인증 데코레이터를 적용해 우리가 익숙하게 사용하던 JWT(Json Web Token)를.. 더보기
[GraphQL] 2. Graphene에 MongoDB(MongoEngine) 연동하기 // MongoDB and Graphene MongoEngine과 Graphene 우리가 만든 GraphQL 서버에 DB를 연결해 보자. 기본적으로 웹 서버는 클라이언트의 요청을 따라 DB를 조회하거나 삭제, 수정, 추가를 한다. 우리의 GraphQL 서버도 쿼리가 들어오면 쿼리에 맞추어 DB를 조회하고, 뮤테이션 요청이 들어오면 DB에 항목을 추가, 수정하거나 삭제한다.graphene에 쿼리 요청이 들어온다면 graphene은 그 요청을 받아서 resolver에서 요청된 조건대로 DB에 조회를 하고 그 결과물을 스키마에서 반횐하기로 정의된 필드에 바인딩해 클라이언트가 요청한 방식대로 전달한다.따라서 우리가 resolver를 작성하기 위해서는 MongoDB ORM인 Mongoengine의 도큐멘트를 GraphQL 필드에 바인딩하는 유틸리티 함수인.. 더보기
[GraphQL] 1. 파이썬과 플라스크로 기본적인 GraphQL 서버 만들어보기 // GraphQL with Flask(Python) GraphQL 시스템 알아보기 GraphQL 서버를 만들려면 GraphQL API를 구성하는 요소들에 대해 알아볼 필요가 있다. GraphQL API는 다음의 요소로 이루어진다. 스키마: DB 스키마가 테이블과 릴레이션을 정의하는 것처럼 GraphQL 스키마는 뮤테이션, 쿼리, 타입과 Enum 등 GraphQL 시스템을 정의한다. 쿼리: CRUD의 Read를 담당하는 부분이다 필드: 쿼리의 속성, DB의 테이블 역할을 수행하고 반환값을 결정한다. 뮤테이션: CRUD의 Create, Update, Delete를 담당한다 리솔버: 쿼리나 뮤테이션 요청이 들어올 때마다 요청에 맞게 리턴값을 만들어 내는 로직 부분이다. 즉, GraphQL 시스템은 스키마로 시스템의 구조를 정의하고, 리솔버에서 행동을 정의한다... 더보기
[GraphQL] 0. 왜 GraphQL을 쓸까? // Why GraphQL? 현재 수많은 웹 서비스와 API들은 REST API를 사용하여 클라이언트-서버 간 통신을 수행한다. 물론 REST API는 좋은 방식이지만 다음과 같은 문제점이 생긴다. 첫번째, 수많은 양의 엔드포인트들 두번째, 데이터가 원한것보다 너무 많음 세번째, 여러가지 데이터를 사용하기 위해 요청을 여러번 해서 데이터를 받아와야 함 (N+1 문제) 네번쨰, 응답 데이터의 구조를 API 도큐멘트 없이 알 수 없다. 그러나 ✨GraphQL✨이란게 있다! GraphQL을 간단히 설명해 보자면 클라이언트-서버 간 통신을 위해 기존 REST에서 사용하는 엔드포인트 방식 대신 DB에 날리는 SQL 쿼리처럼 API 서버를 대상으로 하는 쿼리 언어(Application Query Language)를 사용하는 방식이다. Grap.. 더보기