GitHub

socketIO를 이용한 실시간 두더지 게임 구현하기 (3) | node와 edgeDB cloud 연결

hojun lee · 01/10/2025
커버이미지

목표

edgeDB를 약간이라도 이해하고 quick start를 참고하되 nodejs(백엔드)와 edgeDB cloud(free tier)를 연결해서 통신을 확인한다.

edgeDB

기존 supabase를 주로 이용했다. supabase 와 edgeDB 둘 다 오픈소스이다. 각각 데이터베이스 관리 및 백엔드 서비스의 기능을 제공하는데 두 플랫폼을 비교해보자

EdgeDB와 Supabase 비교 요약

EdgeDB: 강력한 데이터 모델링과 자동화된 관리 기능이 강점. 복잡한 데이터 처리에 유리. Supabase: 실시간 기능과 RESTful API가 강점. 서버리스 백엔드 서비스 통합이 용이.

이번엔 경험 상 EdgeDB 를 사용해보고자 한다.

edgeDB local 과 cloud

mac 기준

그냥 처음엔 quickStart를 따라했다.

  1. EdgeDB CLI 설치
# Add the EdgeDB tap to your Homebrew
brew tap edgedb/tap
# Install EdgeDB CLI
brew install edgedb-cli

이제 edgeDB cli를 활용해 작업을 할 수 있다.

  1. 내가 운용중인 backend 폴더에 들어간다. edgedb project init을 한다.

이 작업은 몇 가지 작업을 수행한다.

먼저, edgedb.toml 구성 파일과 스키마 파일 dbschema/default.esdl을 생성하여 프로젝트를 스캐폴딩했습니다. 다음 섹션에서는 default.esdl에서 스키마를 정의하겠습니다.

둘째, server라는 이름의 EdgeDB 인스턴스를 시작하고 현재 디렉터리에 “연결”했습니다. 프로젝트 디렉터리 내에 있는 한, 모든 CLI 명령은 이 인스턴스에 대해 실행됩니다.

설치는 쉽다.

근데 우리는 cloud 환경임을 고려하자

cloud GUI에서 인스턴스를 확인하자. 일단 회원가입이 우선이겠죠.

터미널에서 cloud login을 한다. edgedb cloud login

로그인이 되었다면 우린 스키마를 마이그레이션하는 과정이 필요하다. 일단 테스트용으로 스키마를 작성해보자

module default {

type Movie {
  required property title -> str;
  required property year -> int16;
  required property director -> str;
  required property created_at -> datetime {
    default := datetime_current();
  };
}

이를 마이그레이션 해야한다. 여기서 중요하다. 모르고 로컬에 때려박을 수 있기 때문에

일단 연결을 해야한다. 처음에 뭣도 모르고 db를 세팅했다면 아마도 로컬에 세팅되어있을 가능성이 크다.

edgedb project info를 해보면 어디에 연결되어있는지 나온다.

일단 끊자.

edgedb project unlink 그리고

cloud gui를 보면 connect 주소가 나온다.

이를 입력해주면 cloud DB와 연결된다.

이제 로컬의 개념은 버리고 cloud로 생각하자.

로컬 스키마 수정 후 마이그레이션 생성

edgedb migration create -I hozunlee/mydb 이러면 마이그레이션 파일이 생긴다. git 처럼 기록이되는 로그라고 할 수 있다.

클라우드에 마이그레이션 적용

edgedb migrate -I hozunlee/mydb 이러면 웹상에서도 적용된 걸 볼 수 있다.

상태 확인

edgedb migration status -I hozunlee/mydb

잘 적용됐는지 확인

이상없이 cli를 통해 연결된 걸 볼 수 있다.

이제 nodejs와 edgeDB를 연결해야지

nodejs와 edgeDB 연결

pnpm add --save-dev @edgedb/generate # generators

자바스크립트 환경이나 타입스크립트 환경이라면 이거 설치

로컬에 연결할 때

import { createClient } from "edgedb";

const edgeClient = createClient();

근데 우린 cloud를 연결해야하기 때문에 connection parametrers를 준비한다.

여기서 삽질을 많이 했다. 연결 error는 안뜨는데 cloud와 연결은 되지 않는 신비한 현자타임

import { createClient } from "edgedb";



// 1. dns를 이용하기
//edgedb://USERNAME:PASSWORD@HOSTNAME:PORT/BRANCH

//# example
//edgedb://alice:pa$$w0rd@example.com:1234/my_branch

const edgeClient = createClient({
     dns: process.env.EDGEDB_CONNECTION_STRING,
     tlsSecurity: "strict",
 });


// 2. instanceName과 secretKey를 이용하기 (gui에서 만들수있음)
const edgeClient = createClient({
    instanceName: process.env.EDGEDB_INSTANCE_NAME,
    secretKey: process.env.EDGEDB_SECRET_KEY,
    tlsSecurity: "strict",
});

둘 다해도 에러도 안나고 연결도 안됨

.env 트러블

dotenv 설치 안하면 env가 왜 작동안하나 ? nodejs에서

Node.js 자체에는 .env 파일을 자동으로 로드하는 기능이 없습니다. .env 파일을 사용해 환경 변수를 로드하려면 dotenv 라이브러리가 필요합니다. dotenv가 설치되지 않으면 .env 파일의 내용을 해석·주입하지 않으므로 설정한 변수들이 작동하지 않습니다.

이런... 무지한 나를 탓하자. 이거로 두세시간을 소비했다.

pnpm i dotenv

env 연결이 undefined 가 나오면서 문제를 알았다.

import { createClient } from "edgedb";
import "dotenv/config";

const edgeClient = createClient({
    instanceName: process.env.EDGEDB_INSTANCE_NAME,
    secretKey: process.env.EDGEDB_SECRET_KEY,
    tlsSecurity: "strict",
});

const a = await edgeClient.query(`
    SELECT Movie{
    title
    } ;
    `);

const b = await edgeClient.querySingle(`select 1 + 1`);

console.log("a :>> ", a, b); // "M17", 2
export default edgeClient;

성공적으로 EdgeDB cloud 연결

자세한 자료는 댓글로

이제 auth - webAuthn을 websocket으로 연결하겠다.