edgeDB를 약간이라도 이해하고 quick start를 참고하되 nodejs(백엔드)와 edgeDB cloud(free tier)를 연결해서 통신을 확인한다.
기존 supabase를 주로 이용했다. supabase 와 edgeDB 둘 다 오픈소스이다. 각각 데이터베이스 관리 및 백엔드 서비스의 기능을 제공하는데 두 플랫폼을 비교해보자
EdgeDB: 강력한 데이터 모델링과 자동화된 관리 기능이 강점. 복잡한 데이터 처리에 유리. Supabase: 실시간 기능과 RESTful API가 강점. 서버리스 백엔드 서비스 통합이 용이.
이번엔 경험 상 EdgeDB 를 사용해보고자 한다.
mac 기준
그냥 처음엔 quickStart를 따라했다.
# Add the EdgeDB tap to your Homebrew brew tap edgedb/tap # Install EdgeDB CLI brew install edgedb-cli
이제 edgeDB cli를 활용해 작업을 할 수 있다.
edgedb project init
이 작업은 몇 가지 작업을 수행한다.
먼저, edgedb.toml 구성 파일과 스키마 파일 dbschema/default.esdl을 생성하여 프로젝트를 스캐폴딩했습니다. 다음 섹션에서는 default.esdl에서 스키마를 정의하겠습니다.
둘째, server라는 이름의 EdgeDB 인스턴스를 시작하고 현재 디렉터리에 “연결”했습니다. 프로젝트 디렉터리 내에 있는 한, 모든 CLI 명령은 이 인스턴스에 대해 실행됩니다.
설치는 쉽다.
cloud GUI에서 인스턴스를 확인하자. 일단 회원가입이 우선이겠죠.
터미널에서 cloud login을 한다. edgedb 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 info
일단 끊자.
edgedb project unlink 그리고
edgedb project unlink
cloud gui를 보면 connect 주소가 나온다.
이를 입력해주면 cloud DB와 연결된다.
이제 로컬의 개념은 버리고 cloud로 생각하자.
edgedb migration create -I hozunlee/mydb 이러면 마이그레이션 파일이 생긴다. git 처럼 기록이되는 로그라고 할 수 있다.
edgedb migration create -I hozunlee/mydb
edgedb migrate -I hozunlee/mydb 이러면 웹상에서도 적용된 걸 볼 수 있다.
edgedb migrate -I hozunlee/mydb
edgedb migration status -I hozunlee/mydb
잘 적용됐는지 확인
이상없이 cli를 통해 연결된 걸 볼 수 있다.
이제 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", });
둘 다해도 에러도 안나고 연결도 안됨
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으로 연결하겠다.