EdgeDB와 GraphQL

전에 GraphQL을 Node.js기반으로 테스트 해보고 블로그를 한번 썼었다. 늘 그렇지만 이런 테스트의 목적은 어떻게 하면 코드를 적게 쓰고 목적을 달성하려는 의지이다. 좋게 말하면 생산성 향상.

http://practical.kr/?p=62

긱뉴스에 올라온 링크의 글(EdgeDB 관련)을 읽고 다시 호기심이 생겨서 한번 테스트를 해봤다.

EdgeDB 1년 사용 후기 - "다시는 SQL로 돌아가지 않을꺼야"

https://news.hada.io/topic?id=7052

EdgeDB는 Postgres 위에 만든 Graph/Relational DB 라고 한다. R-DB 이기는 하지만 SQL을 사용하지 않고 EgdeQL라는 새로 정의된 쿼리언어(?)를 사용하는데 SQL을 안다면 그리 어렵지는 않다.

개인적으로 쿼리언어를 바꾸는건 사실상 거의 불가능(? – 너무 오래 써서) 하다고 생각하고 있지만 의외로 GraphQL을 사용할 수 있는데 관심이 생겼다. 서버 코드 적게 쓰거나 안써도 될까? 이건 늘 관심사다. 그래도 DB 바꾸는 일은 쉬운일이 절대 아니다. 특히 SQL은 더더욱. EdgeDB의 GraphQL 부분만 한번 테스트 해봤다. 다음 프로젝트에서 써먹을 수 있을까 싶어서…

설치

설치는 매우 쉽다. 커맨드 라인에 명령어를 입력하면 자동으로 설치된다. 링크를 따라가면 Windows용 설치 명령어도 있다.

EdgeDB 설치
https://www.edgedb.com/install

스키마 만들기

설치가 완료되고 테스트용 스키마를 만들었다. 설치된 폴더 아래에 \dbschema 라는 폴더가 있고 거기에 default.esdl 파일이 생성되어 있다. 이 파일을 텍스트 편집기로 열고 아래 스키마를 입력하고 저장한다.

module default {
  type Person {
    required property first_name -> str;
    required property last_name -> str;
  }

  type Movie {
    required property title -> str;
    property year -> int64;
    link director -> Person;
    multi link actors -> Person;
  }
};

그리고 마이그레이션 과정을 거치면

마이그레이션 실행

> edgedb migration create
> edgedb migrate

스키마가 생성되고 입력, 수정, 삭제 등이 가능하다. 테스트를 위해 몇개의 데이터를 삽입했다.

https://www.edgedb.com/docs/guides/quickstart#insert-data

GraphQL 실행

테스트의 목적이 GraphQL을 통한 데이터 쿼리였으니 GraphQL 기능을 Enable 상태로 바꾸어야 한다. 방법은 위의 default.esd 파일의 첫줄에 아래 명령어를 추가 해주고 마이그레이션 명령을 한번 더 실행하는 것으로 완료된다.

using extension graphql;

실행하고 나서 edgedb instance list 커맨드를 실행하면 Name, Port, Status등을 확인 할 수 있다.

그리고 PostMan 같은 API Call 도구를 이용해서 http get을 통해서 아래와 같이 Json데이터를 얻을 수 있었다.

GraphQL 호출결과

결론

GraphQL은 마치 과거에 C/S 프로그램을 연상 시키지만 SQL을 사용하지 않는다는 점에서 보안상의 헛점을 해결한듯 보인다. 그러면서도 REST 서버 코드를 줄이고 생산성을 높인다는 점에서 매력적으로 보인다. EdgeDB는 SQL을 버리면서 또다른 방법을 보여준것 같아서 기대가 된다.

다음 프로젝트에 한번 써볼까? 2020.07.28 박병일