[파이썬] Psycopg2에서 Connection pooling

Connection Pooling은 여러 클라이언트가 데이터베이스 연결을 공유하여 재사용할 수 있는 기능입니다. 이를 통해 연결이 필요한 경우 기존 연결을 가져와 사용하고, 사용이 끝난 후에는 연결을 풀에 반환하여 다른 클라이언트가 사용할 수 있게 됩니다. 이는 연결 생성 및 해제에 따른 오버헤드를 줄이고, 애플리케이션의 응답 시간을 개선하는 데 도움이 됩니다.

Psycopg2에서 Connection Pooling을 사용하려면 psycopg2.pool 모듈에서 SimpleConnectionPool 클래스를 import해야 합니다. 다음은 psycopg2를 사용하여 Connection Pooling을 구현하는 간단한 예제입니다.

import psycopg2
from psycopg2 import pool

# Connection Pool 생성
connection_pool = psycopg2.pool.SimpleConnectionPool(5, 20,
                                                     host='your_host',
                                                     port='your_port',
                                                     dbname='your_dbname',
                                                     user='your_user',
                                                     password='your_password')

# Connection Pool에서 Connection 가져오기
connection = connection_pool.getconn()

try:
    # Connection 사용
    cursor = connection.cursor()
    cursor.execute("SELECT * FROM your_table")
    rows = cursor.fetchall()
    # 데이터 처리 등

finally:
    # Connection 반환
    connection_pool.putconn(connection)

위의 예제에서 SimpleConnectionPool 클래스는 최소 연결 수와 최대 연결 수를 인자로 받습니다. 또한 데이터베이스에 연결하기 위한 호스트, 포트, 데이터베이스 이름, 사용자 이름 및 비밀번호도 제공해야 합니다.

위의 코드는 with 문을 사용하여 더욱 효율적으로 Connection Pool을 관리하는 방법도 있습니다. 다음은 with 문을 사용한 예제입니다.

import psycopg2
from psycopg2 import pool

# Connection Pool 생성
connection_pool = psycopg2.pool.SimpleConnectionPool(5, 20,
                                                     host='your_host',
                                                     port='your_port',
                                                     dbname='your_dbname',
                                                     user='your_user',
                                                     password='your_password')

# Connection Pool에서 Connection 가져오기
with connection_pool.getconn() as connection:
    # Connection 사용
    cursor = connection.cursor()
    cursor.execute("SELECT * FROM your_table")
    rows = cursor.fetchall()
    # 데이터 처리 등

# with 문을 벗어나면서 Connection 반환

위의 코드에서 with connection_pool.getconn() as connection의 블록 내에서 Connection을 사용할 수 있습니다. with 문을 벗어나면 Connection은 자동으로 반환됩니다.

Connection Pooling은 psycopg2를 사용하는 애플리케이션에서 데이터베이스 연결 성능 및 효율성을 향상시키는 강력한 기능입니다. Connection Pooling을 사용하면 많은 클라이언트가 동시에 데이터베이스에 액세스해야 하는 경우에도 성능 손실 없이 안정적인 서비스를 제공할 수 있습니다.