2025/10/01 FastAPI -4

김기훈·2025년 10월 2일

TIL

목록 보기
31/191

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 생성을 차단

profile
안녕하세요.

0개의 댓글