한양과학기술고등학교

에듀테크 프로젝트 대시보드

데이터베이스 연동 개요

psycopg asyncpg SQLAlchemy DSN ORM

FastAPI 자체는 DB 기능이 없습니다. 드라이버·(선택적) ORM·세션 관리를 직접 붙입니다.

1. PostgreSQL 드라이버

드라이버성격SQLAlchemy URL
psycopg (psycopg3)동기 + 비동기 모두. 최신 권장postgresql+psycopg://
psycopg2동기 전용. 레거시 다수postgresql+psycopg2:// (또는 postgresql://)
asyncpg비동기 전용. 가장 빠름postgresql+asyncpg://
pip install "psycopg[binary]"      # psycopg3
# 또는
pip install asyncpg

2. 접근 방식 선택

옵션
  • SQLAlchemy Core/ORM 2.0 — 사실상 표준. 이 레퍼런스의 기본 선택
  • SQLModel — SQLAlchemy + Pydantic 결합 (FastAPI 제작자 작품). 간단한 앱에 편함
  • raw SQL (psycopg 직접 / databases) — 쿼리 완전 제어, 소규모
  • Tortoise / Piccolo — 네이티브 async ORM

3. 연결 문자열(DSN) 구조

postgresql+psycopg://USER:PASSWORD@HOST:PORT/DBNAME?sslmode=require

#  dialect+driver :// 사용자 : 비밀번호 @ 호스트 : 포트 / DB이름 ? 옵션

비밀번호에 @ : / ? 등 특수문자가 있으면 urllib.parse.quote_plus 로 인코딩.

4. 동기 vs 비동기 결정

가이드
  • 이미 동기 코드 위주 / 트래픽 보통 → 동기 SQLAlchemy + def 라우트 (가장 단순, 버그 적음)
  • 높은 동시성 / 외부 API 호출과 DB 를 함께 await → 비동기(asyncpg)
  • 한 앱에서 두 방식을 섞지 말 것

5. 다음 순서

PostgreSQL 준비 → 동기 SQLAlchemy → 비동기 → CRUD → Alembic → 풀·트랜잭션

"느린 것은 async 로, 무거운 것은 백그라운드로"