본문으로 건너뛰기
백엔드 기초집: Python FastAPILESSON 19

PostgreSQL로 데이터베이스 확장

난이도초급
예상 시간35분
선수지식이전 강의

19강. PostgreSQL로 데이터베이스 확장

1. 이번 강의에서 해결할 문제​

SQLite는 학습과 단일 프로세스 개발에 편하지만 운영의 동시 연결, 계정, 서버 관리 요구를 대신하지 않습니다. PostgreSQL 환경으로 같은 앱을 실행합니다.

2. 학습 목표​

3. 핵심 개념​

SQLAlchemy dialect가 DB별 SQL과 DBAPI 차이를 연결합니다. Psycopg 3의 동기 연결 URL은 postgresql+psycopg://사용자:비밀번호@호스트:포트/DB입니다. 비밀번호에 특수문자가 있으면 URL 인코딩이 필요하며 실제 운영 연결은 TLS와 최소 권한 계정을 사용합니다.

4. 단계별 코드 예시​

파일 경로: game-ranking-api/.env.postgresql.example

.env.postgresql.example
APP_ENV=production
DATABASE_URL=postgresql+psycopg://game_api:change-me@localhost:5432/game_ranking
JWT_SECRET=replace-with-at-least-32-random-bytes
ACCESS_TOKEN_EXPIRE_MINUTES=30
FRONTEND_ORIGINS=https://example.com

파일 경로: game-ranking-api/app/database.py

app/database.py
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

from app.config import settings

connect_args = {"check_same_thread": False} if settings.database_url.startswith("sqlite") else {}
engine = create_engine(
settings.database_url,
connect_args=connect_args,
pool_pre_ping=True,
)
SessionLocal = sessionmaker(bind=engine, autoflush=False, expire_on_commit=False)

실행 위치: PostgreSQL의 psql이 설치된 터미널

psql -U postgres -c "CREATE USER game_api WITH PASSWORD 'change-me';"
psql -U postgres -c "CREATE DATABASE game_ranking OWNER game_api;"
$env:DATABASE_URL = 'postgresql+psycopg://game_api:change-me@localhost:5432/game_ranking'
$env:JWT_SECRET = 'development-only-change-me'
python -m uvicorn app.main:app --reload
Invoke-RestMethod http://127.0.0.1:8000/health

5. 코드가 동작하는 이유​

동일한 Engine 생성 코드가 URL scheme을 보고 PostgreSQL dialect와 Psycopg 3 DBAPI를 선택합니다. SQLite 전용 connect_args는 조건부로만 전달됩니다. pool_pre_ping은 풀에서 꺼낸 오래된 연결을 사용하기 전에 확인합니다.

6. 자주 하는 실수와 해결법​

7. 직접 실습​

8. 이해 점검 질문 3개​

9. 핵심 요약​

MINI QUIZ

PostgreSQL로 데이터베이스 확장 미니 퀴즈

선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.

0 / 2
  1. 문제 1“PostgreSQL로 데이터베이스 확장” 코드 리뷰에서 유지해야 할 설계 원칙은 무엇인가요?
  2. 문제 2‘최고 권한 postgres 계정으로 앱을 실행합니다.’ 상태에 관한 “PostgreSQL로 데이터베이스 확장” 본문의 설명으로 가장 알맞은 것은 무엇인가요?
LESSON STATUS

학습을 마쳤나요?

직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.

19강. PostgreSQL로 데이터베이스 확장 미완료 상태