본문으로 건너뛰기
데이터베이스 기초집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

데이터베이스 연결과 Connection Pool 미니 퀴즈

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

0 / 2
  1. 문제 1“데이터베이스 연결과 Connection Pool”에서 다음 단계로 넘어가기 전에 확인할 핵심은 무엇인가요?
  2. 문제 2‘풀 크기만 크게 설정’ 실수를 판단할 때 “데이터베이스 연결과 Connection Pool” 강의가 제시한 기준은 무엇인가요?
LESSON STATUS

학습을 마쳤나요?

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

15강. 데이터베이스 연결과 Connection Pool 미완료 상태