EdgeDB Adapter
리소스
설정
설치
npm install edgedb @auth/edgedb-adapter
npm install @edgedb/generate --save-dev
EdgeDB CLI가 설치되어 있는지 확인하세요. 아래 지침을 따르거나 EdgeDB 퀵스타트를 참고하여 EdgeDB CLI를 설치하고 프로젝트를 초기화하세요.
환경 변수
AUTH_EDGEDB_DSN="edgedb://edgedb:p4ssw0rd@10.0.0.1"
설정
import NextAuth from "next-auth"
import { EdgeDBAdapter } from "@auth/edgedb-adapter"
import { createClient } from "edgedb"
const client = createClient({ dsn: process.env.AUTH_EDGEDB_DSN })
export const { handlers, auth, signIn, signOut } = NextAuth({
adapter: EdgeDBAdapter(client),
providers: [],
})
EdgeDB CLI
Linux 또는 macOS
curl --proto '=https' --tlsv1.2 -sSf https://sh.edgedb.com | sh
Windows
iwr https://ps1.edgedb.com -useb | iex
CLI가 설치되었는지 확인하려면 edgedb --version
명령어를 실행하세요. Command not found
오류가 발생하면, 새로운 터미널 창을 열어야 edgedb
명령어를 사용할 수 있습니다.
CLI가 설치되면, 애플리케이션의 루트 디렉토리에서 프로젝트를 초기화하세요. 이 과정에서 여러 프롬프트가 나타납니다.
edgedb project init
이 과정은 EdgeDB 인스턴스를 시작하고 현재 디렉토리와 “링크”합니다. 해당 디렉토리 안에 있는 동안, CLI 명령어와 클라이언트 라이브러리는 추가 설정 없이도 자동으로 링크된 인스턴스에 연결할 수 있습니다.
스키마
dbschema/default.esdl
파일의 자동 생성된 내용을 다음으로 교체하세요:
module default {
type User {
property name -> str;
required property email -> str {
constraint exclusive;
}
property emailVerified -> datetime;
property image -> str;
multi link accounts := .<user[is Account];
multi link sessions := .<user[is Session];
property createdAt -> datetime {
default := datetime_current();
};
}
type Account {
required property userId := .user.id;
required property type -> str;
required property provider -> str;
required property providerAccountId -> str {
constraint exclusive;
};
property refresh_token -> str;
property access_token -> str;
property expires_at -> int64;
property token_type -> str;
property scope -> str;
property id_token -> str;
property session_state -> str;
required link user -> User {
on target delete delete source;
};
property createdAt -> datetime {
default := datetime_current();
};
constraint exclusive on ((.provider, .providerAccountId))
}
type Session {
required property sessionToken -> str {
constraint exclusive;
}
required property userId := .user.id;
required property expires -> datetime;
required link user -> User {
on target delete delete source;
};
property createdAt -> datetime {
default := datetime_current();
};
}
type VerificationToken {
required property identifier -> str;
required property token -> str {
constraint exclusive;
}
required property expires -> datetime;
property createdAt -> datetime {
default := datetime_current();
};
constraint exclusive on ((.identifier, .token))
}
}
# 접근 정책 내에서 접근 정책을 적용하는 것을 비활성화합니다.
# 이 동작은 EdgeDB 3.0에서 기본값이 될 예정입니다.
# 참고: https://www.edgedb.com/docs/reference/ddl/access_policies#nonrecursive
using future nonrecursive_access_policies;
마이그레이션
- 마이그레이션 생성
edgedb migration create
- 마이그레이션 적용
edgedb migrate
EdgeDB 마이그레이션에 대해 더 알아보려면 마이그레이션 문서를 확인하세요.
Generate
npx @edgedb/generate edgeql-js
이 명령어는 쿼리 빌더를 생성합니다. 이를 통해 TypeScript를 사용하여 코드 중심의 방식으로 완전히 타입이 지정된 EdgeQL 쿼리를 작성할 수 있습니다.
const query = e.select(e.User, () => ({
id: true,
email: true,
emailVerified: true,
name: true,
image: true,
filter_single: { email: "johndoe@example.com" },
}))
return await query.run(client)
Deploying
EdgeDB 배포
먼저 선호하는 클라우드 제공자에 EdgeDB 인스턴스를 배포하세요:
- AWS
- Google Cloud
- Azure
- DigitalOcean
- Fly.io
- Docker (클라우드 독립적)
인스턴스의 DSN 찾기
DSN은 연결 문자열로도 알려져 있습니다. DSN은 edgedb://사용자명:비밀번호@호스트명:포트
형식을 따릅니다. 이에 대한 정확한 지침은 여러분이 배포하는 클라우드 제공자에 따라 다릅니다.
환경 변수 설정하기
AUTH_EDGEDB_DSN=edgedb://johndoe:supersecure@myhost.com:420
마이그레이션 적용
원격 인스턴스에 마이그레이션을 적용하려면 DSN을 사용하세요.
edgedb migrate --dsn <your-instance-dsn>
prebuild
스크립트 설정하기
package.json
에 다음 prebuild
스크립트를 추가하세요. 호스팅 제공자가 빌드를 초기화할 때 이 스크립트가 실행되어 쿼리 빌더를 생성합니다. npx @edgedb/generate edgeql-js
명령어는 EDGEDB_DSN
환경 변수의 값을 읽고, 데이터베이스에 연결한 후 호스팅 제공자가 프로젝트 빌드를 시작하기 전에 쿼리 빌더를 생성합니다.
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint",
+ "prebuild": "npx @edgedb/generate edgeql-js"
},