Programming/Databse

[Postgresql] PostGraphile: Instant GraphQL API

비만오리 2020. 4. 5. 15:13

 

Postgresql과 GraphQL을 연결시켜주는 PostGraphile에 대해 알아봅니다.

 

 

 

1. 소개

 

GraphQL은 서버 측 데이터와 통신하기 위한 환상적인 솔루션입니다. GraphQL을 통해 개발자는 서버와 상호 작용하는 사람들이 서버에서 필요한 데이터의 정확한 구조를 지정할 수 있도록 하여 데이터의 오버 페치 및 언더 페치 문제를 해결하는 빠르고 안정적인 API를 만들 수 있습니다. 이는 GraphQL을 사용해 애플리케이션을 개발하는 개발자들에게 더 나은 개발자 경험을 제공하며 엔드 유저에게는 더욱 빠른 애플리케이션을 제공하는 것을 의미합니다.

 

과거에는 PostGraphQL로 알려졌던 PostGraphile은 개발자가 PostgreSQL 데이터베이스에 데이터를 저장하는데 필요한  모든 기능을 갖춘 GraphQL 서버를 신속하게 구성할 수 있도록 해주며 PostgreSQL과 GraphQL 두 기술을 결합하는 데 큰 역할을 합니다. PostGraphile은 데이터베이스 기반(DB-driven) 개발을 활용하여 Postgres 데이터베이스 스키마에서 Graphql 서버를 생성 및 업데이트하여 스키마 변경 사항을 자동으로 감지하고 이 변경사항에 따라 서버를 업데이트합니다.

 

그들의 말에 따르면 :

PostgreSQL에는 이미 놀라운 인증 및 관계 인프라가 있습니다. 왜 커스텀 API에서 해당 로직을 복제해야 합니까?

 

PostGraphile은 개발자가 제품에 집중할 수 있도록 성능 및 표준 호환 GraphQL API 계층 생성을 처리합니다. 또한 개발 시간이 크게 단축됩니다.

 

게다가 PostGraphile은 다양한 방식으로 기능을 확장하는 데 도움이 되는 여러 커뮤니티 개발 플러그인을 갖춘 강력한 플러그인 시스템을 자랑합니다.

 

이 글에서는 PostGraphile을 사용하여 몇 분 만에 모든 기능을 갖춘 서버를 설치하고 실행할 수 있는 방법을 살펴보겠습니다.

 

 

 

2. PostGraphile의 사용법

 

PostGraphile은 세 가지 주요 방법으로 사용할 수 있습니다.

 

PostGraphile CLI: 터미널에서 PostGraphile API를 바로 시작하는 가장 쉽고 빠른 방법입니다. 


미들웨어: postgraphile 패키지에서 가져온 PostGraphile 인스턴스를 NodeJS 서버에 마운트 합니다.

 

도커: PostGraphile을 도커 이미지로 가져와 CLI 옵션으로 Docker 컨테이너에 전달하여 발생합니다.

 

이 글에서는 CLI를 사용하는 방법에 대해서 알아보도록 하겠습니다.

 

 

 

3. PostGraphile 시작하기.


PostGraphile을 사용하려면 Node.js v8.6 이상을 설치해야 합니다. 아직 설치하지 않은 경우 Node 웹 사이트에서 원하는 버전을 찾아 설치하시기 바랍니다.

 

PostgreSQL v9.6.0 이상 버전이 필요합니다. PostgreSQL 다운로드 페이지에서 찾을 수 있습니다.

 

 

3.1. DB 설치하기.

 

이 글에선 별도로 Postgresql DB를 설치하는 방법에 대해 다루지 않습니다. PostgreSql을 설치하는 방법은 다음 글에서 확인해 주시기 바랍니다.

 

 

3.2. PostGraphile 설치하기.

 

다음 명령어로 npm을 통해 PostGraphile을 설치합니다.

 

> npm i postgraphile

 

 

 

3.3 Express와 연동하기.

 

이제 실제 Express서버에 Postgraphile을 연동해 봅시다.

 

const express = require("express");
const { postgraphile } = require("postgraphile");
const vals = require('./const');
const app = express();

const connectionString = `postgres://${vals.user}:${vals.pass}@${vals.host}:${vals.port}/${vals.db}`

app.use(
  postgraphile(
    process.env.DATABASE_URL || connectionString,
    "public",
    {
      watchPg: true,
      graphiql: true,
      enhanceGraphiql: true,
    }
  )
);

app.listen(process.env.PORT || 3300);

 

** connectionString에 필요한 변수는 const.js에 별도로 정의해 사용하고 있습니다.

 

 

 

3.4 Graphiql로 직접 데이터 조회해보기.

 

위의 코드를 실행시키고 graphiql 페이지로 이동한 뒤 Explorer 버튼을 눌러봅시다.

 

 

좌측에 우리가 만들지 않은 여러 옵션이 보이시나요?

 

우리는 직접 리졸버를 만들지 않았습니다만 이미 우리가 만들었던 테이블을 쿼리 할 수 있는 옵션이 존재합니다. Postgraphile에서 알아서 해줍니다!

 

이제 미리 만들어둔 users 테이블의 모든 데이터를 조회해 봅시다. 직접 타자 칠 필요 없이 익스플로러에서 클릭만으로 쿼리를 만들 수 있습니다.

 

 

단지 allUsers->nodes를 클릭한 후 컬럼을 순서에 맞게 클릭했을 뿐입니다. 여기서 nodeId라는 것이 보일 텐데 이 id는 postgraphile내에서 node마다 유지되는 고유한 ID입니다. 

 

 

 

4. 마무리

 

이렇듯 postgraphile을 사용하면 별도의 추가 작업 없이 postgresql에 연결해주는 것만으로도 바로 graphql을 사용할 수 있습니다. 다음에는 직접 클라이언트에서 호출해 사용하는 방법에 대해 알아보도록 하겠습니다.

 

 

 

 

 

 

 

반응형