데이터베이스 기초집LESSON 15
데이터베이스 연결과 Connection Pool
난이도초급 → 중급
예상 시간35분
선수지식이전 강의
15강. 데이터베이스 연결과 Connection Pool
1. 이번 강의에서 해결할 문제
요청마다 새 연결을 만들거나 Session을 전역 공유하면 연결 비용, 트랜잭션 누수, 동시 요청 간 상태 오염이 발생합니다. 프로세스·요청·트랜잭션 수명에 맞춰 연결 풀을 구성합니다.
2. 학습 목표
3. 핵심 개념
SQLAlchemy Engine은 연결 생성과 풀의 진입점이고 기본적인 동기 서버 환경에서는 QueuePool이 연결을 재사용합니다. Session은 ORM 작업과 트랜잭션의 단위이며 스레드나 요청 사이에 공유하지 않습니다. 총 잠재 연결 수는 대략 프로세스 수 × 프로세스별 (pool_size + max_overflow)이므로 PostgreSQL의 연결 한도와 여유를 함께 봅니다.
4. 단계별 예시
파일 경로: C:\dev\game-ranking-service\app\database.py
app/database.py
from collections.abc import Generator
from sqlalchemy import create_engine
from sqlalchemy.orm import Session, sessionmaker
from app.settings import settings
engine = create_engine(
settings.database_url,
pool_size=5,
max_overflow=5,
pool_pre_ping=True,
pool_recycle=1800,
)
SessionLocal = sessionmaker(bind=engine, autoflush=False, expire_on_commit=False)
def get_db() -> Generator[Session, None, None]:
with SessionLocal() as session:
try:
yield session
except Exception:
session.rollback()
raise
PowerShell · API 실행
$env:DATABASE_URL='postgresql+psycopg://app_user:local-password@localhost:5432/game_ranking_dev'
python -m uvicorn app.main:app --reload
5. 동작 원리
요청은 Session을 빌리고 종료 시 컨텍스트 관리자가 반환합니다. Session이 필요할 때 Engine의 풀에서 연결을 checkout하고, 종료 시 연결을 pool로 돌려줍니다. pool_pre_ping은 오래된 연결을 사용하기 전에 생존 여부를 확인하지만 잘못된 트랜잭션 경계를 대신 해결하지는 않습니다.
6. 자주 하는 실수와 해결법
7. 직접 실습
8. 이해 점검 질문 3개
9. 핵심 요약
MINI QUIZ
0 / 2데이터베이스 연결과 Connection Pool 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
LESSON STATUS
15강. 데이터베이스 연결과 Connection Pool 미완료 상태학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.