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