Fastapi
Chapter 4-1 📌 EdgeDB 소개 및 설치 가이드
Chansman
2025. 5. 28. 10:17
📌 EdgeDB 소개 및 설치 가이드
1. EdgeDB란 무엇인가요?
💡 EdgeDB는 PostgreSQL 기반의 차세대 객체지향 데이터베이스입니다.
- 유명한 Python 핵심 컨트리뷰터들이 만든 MagicStack에서 개발
- ORM 없이도 객체 지향 방식으로 데이터 처리 가능
- SQL을 대체하는 EdgeQL이라는 강력하고 유연한 쿼리 언어 제공
- 성능 면에서도 뛰어나며, 코드 자동 생성, 공식 유튜브와 오픈 채팅 등 지원 커뮤니티도 활발
👉 실무에선 아직 흔하진 않지만, 다양한 데이터베이스 기술을 접하고 싶은 분들에게 강력 추천됩니다.
2. EdgeDB CLI 설치 방법
💡 버전 명시 설치는 권장되지 않으며, 공식 방법 사용을 권장합니다.
- 공식 설치 페이지: https://www.edgedb.com/install
- 기본 curl 명령어로 간단하게 설치 가능
특정 버전 설치 (예: 6.1.0)
- 내 시스템 정보 확인: uname -sm ( windows wsl : Linux x86_64)
- https://packages.edgedb.com/archive/ 에서 내 시스템에 맞는 CLI 파일 다운로드
- x86_64-unknown-linux-gnu/ 선택 / 현재없음
- 설치 명령 실행
chmod +x edgedb-cli-6.1.0+...
./edgedb-cli-6.1.0+... self-install
- 보안 경고 시: "Allow Anyway" 클릭 후 재실행
- edgedb --version 으로 설치 확인
3. VSCode + EdgeQL 플러그인 설치
- EdgeQL 쿼리는 JetBrains 계열 미지원 → VSCode에서 작업 권장
- 다운로드: https://code.visualstudio.com/download
- 플러그인 설치: https://marketplace.visualstudio.com/items?itemName=magicstack.edgedb
4. 프로젝트 초기화 및 마이그레이션
edgedb project init
타입 정의 (dbschema/default.esdl)
module default {
type Person {
required name: str;
}
type Movie {
title: str;
multi actors: Person;
}
}
- type = MySQL의 table
- required = NOT NULL
- 관계 설정: multi 또는 single로 다대다/일대다 정의 가능
마이그레이션 실행
edgedb migration create
edgedb migrate
5. EdgeDB UI로 CRUD 실습
# insert
insert Movie { title := "Dune" };
# update
update Movie
filter .title = "Dune"
set {
actors := {
(insert Person { name := "Timothee Chalamet" }),
(insert Person { name := "Zendaya" })
}
};
# select
select Movie {
title,
actors: { name }
};
# delete
DELETE Movie filter .title = "Dune";
실습 예제: insert → 곧바로 select
SELECT (
INSERT Movie {
title := "Incredible"
}
) {id, title};
select 결과 기반 insert
INSERT Person {
name := "황정민"
};
INSERT Person {
name := "이정재"
};
INSERT Movie {
title := "국제시장",
actors := (
SELECT Person
FILTER .name = "황정민"
)
};
6. 인덱스 추가 및 쿼리 성능 분석
인덱스 정의
type Movie {
title: str;
multi actors: Person;
index on (.title);
}
edgedb migration create
edgedb migrate
쿼리 성능 측정
edgedb analyze 'select Movie {id, title} filter .title = "a"' --expand
더미 데이터 대량 생성
FOR x IN range_unpack(range(1, 100000)) UNION (
INSERT Movie {
title := "Movie " ++ <str>x
}
);
- 작은 데이터셋: SeqScan
- 큰 데이터셋: BitmapIndexScan으로 인덱스 사용 확인 가능
🎯 인덱스 정리:
- 데이터 적으면 인덱스 안 쓰고 테이블 스캔할 수 있음
- 인덱스가 있다고 항상 사용되는 건 아님 (쿼리 플래너가 판단)
- 대규모 트래픽 시스템에서는 인덱스 필수!
7. 스키마 초기화 및 정리
- default.esdl 파일 비우고 다시 마이그레이션
edgedb migration create
edgedb migrate
8. 철학: Everything is a Set
EdgeDB에서는 모든 쿼리 결과는 Set으로 반환됩니다.
- NULL이 없고, 존재하지 않는 값을 의미하는 값이 없음
- 더 명확하고 예측 가능한 데이터 처리 가능
🧠 참고: NULL 개념을 만든 토니 호어도 이를 "Billion Dollar Mistake"라 평가했음
이제 EdgeDB의 기본 구조와 실습 방법을 익혔다면, 실무 프로젝트에 응용할 차례입니다! 🚀