EdgeDB
유명한 파이썬 핵심 컨트리뷰터들이 모여 만든 차세대 데이터베이스
- 실무에서 자주 사용되지는 않지만 EdgeDB의 성능이 좋고 query language 의 유연함, orm 대신 code generation 등등 장점이 많음
- Postgresql 위에서 동작
- 엣지디비 공식 클라이언트로 쿼리를 날리면 자동으로 “객체” 로 결과 리턴, 따라서 ORM 을 쓸 필요가 없음
- 최신데이터베이스로 공식 유튜브 채널, 공식 디스코드 채널, 심지어 카카오톡 오픈채팅 까지 지원
2025/10/13 ReStart
- 연휴동안 FastAPI 공식문서로 기초 공부하고 왔음
Tortoise-orm, cryptography, aerich 설치
버전은 강의 기준으로 맞춤
Tortoise-orm
설치: poetry add "tortoise-orm[asyncmy]==0.23.0"
공식문서: https://tortoise.github.io/
- django orm 이 async 를 (잘) 지원하지 않던 시절, 이를 대신하기 위해 탄생한 orm
- SqlAlchemy는 사용자가 많고 문서가 잘 되어있고 말이 어렵지만 내부코드도 잘 되어있음
- SqlAlchemy에 비해 안좋은 점이 많지만 성능은 비슷함
- django orm 과 90% 흡사
- 모델 선언방식 / QuerySet 을 사용해서 쿼리하는 점 / Orm 을 위한 테스트 프레임워크를 제공하는 점
cryptography
설치: poetry add cryptography==44.0.0
- 비밀번호 방식으로 mysql 에 로그인 할 떄 필요
aerich , tomlkit
설치: poetry add aerich==0.8.1 tomlkit==0.13.2
공식문서: https://github.com/tortoise/aerich
- tortoise-orm 의 migration tool (sqlalchemy: alembic / tortoise: aerich )
- (aerich 버그 때문에 설치) aerich 가 의존함에도 불구하고 의존성 그래프에 없기 때문에 수동으로 설치 필요
pydantic_settings
설치: poetry add pydantic_settings==2.7.1
- 서버 동작에 필요한 변수들을 환경변수에서 읽어주거나 dot env 에서 읽어줌
- pydantic v1 에서는 pydantic 자체에 포함된 라이브러리
- v2 가 되면서 빠져나왔음
- 환경변수를 적절한 “파이썬 타입” 으로 변환시켜 줌
Config



- connection 의 개수가 많을 수록 트래픽이 갑작스럽게 쏟아질때 더 유연하게 대처가 가능
- 반대로 데이터베이스가 커넥션을 유지하기 위해 사용하는 메모리도 많아짐
- TORTOISE_APP_MODELS
- tortoise 의 규칙, 설정 dict 에 어떤 tortoise model 들이 있는지 모두 등록해주어야 함
tortoise 등록

tortoise_models
- Model: 보통 데이터베이스의 테이블 구조를 코드로 표현한 것을 담아두는 공간


BaseModel
- MeetingModel은 BaseModel의 모든 기능(속성, 메서드 등)을 그대로 사용할 수 있다.
- 모든 모델이 공통으로 가져야 하는 필드나 메서드(예: id, created_at, updated_at 등) 를 정의
- 다른 모델(MeetingModel, UserModel, ReservationModel 등)에서 공통 기능을 재사용하기 위해 상속
Model
- Tortoise ORM에서 제공하는 핵심 ORM 클래스 / from tortoise import Model 로 임포트
- Model을 상속하면 Tortoise가 이 클래스를 데이터베이스 테이블로 인식
- 즉, ORM 기능이 동작하기 위한 “기본 뼈대” 역할
class MeetingModel(BaseModel, Model):
- Tortoise가 자동으로 MeetingModel 테이블을 만들고
.create(), .filter(), .get() 같은 ORM 메서드를 사용할 수 있게 됨
aerich 로 마이그레이션
- aerich init -t app.config.TORTOISE_ORM
- 마이그레이션 환경을 생성 (migrations/ 폴더와 설정 생성)
- aerich init-db
- 실제 DB에 현재 모델 구조를 반영하고 aerich 테이블 생성



httpx 설치, 테스트 작성하기
- fuction: 매번 테스트함수를 실행할때마다 fixture도 실행되는 것
- session: 전체테스트가 실행됬을때 처음 시작할때 한번 끝날때 한번
- initializer: 처음 데이터베이스가 필요하면 생성,연결 수립
- finalizer: 테스트가 끝난 후 남아있는 커넥션 정리, 종료
- conftest.py(이름 중요)
- get_test_db_config()
- 테스트용 설정을 추가, 테스트용 설정은 데이터베이스가 없다면 새로 생성
- initialize()
- pytest fixture 로, scope 가 session 이기 때문에 테스트 시작과 함께 생성
- 모든 테스트가 종료된 이후에 yield 이후가 실행됨
- tortoise 를 준비시키는 역할과, 테스트 종료후 남은 connection 을 정리하는 역할
- event_loop()
- tortoise-orm 과 겹치지 않도록 하기 위해
- 의도적으로 pytest-asyncio 의 event loop 생성을 차단