SQLAlchemy와 같은 데이터베이스 추상화 라이브러리(Database Abstraction Layer에 속한다고 봄)는 ORM을 번역하여 적절한 쿼리로 변환하여 psycopg2와 같은 특정 DB용 드라이버로 보내는 역할을 한다. 동시에 이들은 애플리케이션 레벨에서 연결 풀을 관리하기도 한다.

engine = create_engine("postgresql://user:password@localhost/mydb")

커넥션 풀을 지원하는 DAL을 사용하지 않고 데이터베이스 드라이버(psycopg2 등)를 직접 사용하면 원래 자동으로 관리되는 커넥션 풀은 존재하지 않는다. 커넥션 풀 구현은 개발자의 몫이다. 일부 데이터베이스는 미들웨어 레벨에서 커넥션 풀을 관리해주기도 한다. Postgres의 PgBouncer이 대표적이다.


parse me : 언젠가 이 글에 쓰이면 좋을 것 같은 재료을 보관해 두는 영역입니다.

  1. 적절한 pool 크기 산정은 Little's Law를 기반으로 한다.

from : 과거의 어떤 원자적 생각이 이 생각을 만들었는지 연결하고 설명합니다.

  1. 데이터베이스 응답은 빠른 속도가 중요하므로, 연결을 끊어버리면 매번 TCP 핸드셰이크와 DB 핸드셰이크를 다시 해야 한다는 문제가 있다. 그래서 전송 계층으로 HTTP이 상태 유지가 기본인 TCP 프로토콜에 의존하고, 커넥션 풀을 이용해 한 번 맺어둔 TCP 연결을 재사용한다.
  2. SQLAlchemy 1.0은 원래 ORM과 저수준 표현식 언어로 구분돼 있었다.

supplementary : 어떤 새로운 생각이 이 문서에 작성된 생각을 뒷받침하는지 연결합니다.

  1. None

opposite : 어떤 새로운 생각이 이 문서에 작성된 생각과 대조되는지 연결합니다.

  1. 미들웨어 레벨 커넥션 풀이 있다고 해서 클라이언트 레벨 커넥션 풀이 불필요한 것은 아니다.

to : 이 문서에 작성된 생각이 어떤 생각으로 발전되거나 이어지는지를 작성하는 영역입니다.

  1. None