
PDO ODBC Connection Pooling은 연결을 만들고 유지하는 비용을 절약하기 위해 연결을 풀링하는 기능입니다. 하지만, connection pooling을 사용할 때 기존에 생성된 연결을 재사용하는 방식이 아닌 새로운 연결을 계속 생성하는 것처럼 보일 수 있습니다.
이러한 이유로 connection pooling의 이점을 느끼지 못하고 있습니다. connection pooling의 원리로는 기존에 생성된 연결을 재사용해야 한다고 이해하고 있습니다. 따라서, 실제로 재사용이 되는지 확인하고 싶습니다.
connection pooling을 사용할 때 기존에 생성된 연결을 재사용하는 방법은 PDO의 ATTR_PERSISTENT 옵션을 사용하는 것입니다. ATTR_PERSISTENT 옵션을 true로 설정하면 PDO는 기존에 생성된 연결을 재사용합니다.
하지만, ATTR_PERSISTENT 옵션만으로는 연결을 재사용하는지 확인할 수 없습니다. PDO의 ATTR_CONNECTION_STATUS 옵션을 사용하여 연결의 상태를 확인할 수 있습니다.
다음은 예시입니다.
#hostingforum.kr
php
$dsn = "odbc:DRIVER={ODBC Driver 17 for SQL Server};SERVER=localhost;DATABASE=mydb;UID=myuser;PWD=mypassword";
$opt = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => true,
PDO::ATTR_PERSISTENT => true, // connection pooling 사용
PDO::ATTR_CONNECTION_STATUS => true // 연결 상태 확인
);
try {
$pdo = new PDO($dsn, null, null, $opt);
echo "연결 상태: " . $pdo->getAttribute(PDO::ATTR_CONNECTION_STATUS) . "n";
} catch (PDOException $e) {
echo "Connection failed: " . $e->getMessage();
}
위 코드를 실행하면 연결 상태가 2로 출력됩니다. 2는 PDO가 기존에 생성된 연결을 재사용한 경우를 의미합니다.
또한, PDO의 ATTR_PERSISTENT 옵션을 false로 설정하면 새로운 연결을 생성합니다. ATTR_CONNECTION_STATUS 옵션을 사용하여 연결의 상태를 확인할 수 있습니다.
#hostingforum.kr
php
$dsn = "odbc:DRIVER={ODBC Driver 17 for SQL Server};SERVER=localhost;DATABASE=mydb;UID=myuser;PWD=mypassword";
$opt = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => true,
PDO::ATTR_PERSISTENT => false, // connection pooling 사용 안함
PDO::ATTR_CONNECTION_STATUS => true // 연결 상태 확인
);
try {
$pdo = new PDO($dsn, null, null, $opt);
echo "연결 상태: " . $pdo->getAttribute(PDO::ATTR_CONNECTION_STATUS) . "n";
} catch (PDOException $e) {
echo "Connection failed: " . $e->getMessage();
}
위 코드를 실행하면 연결 상태가 1로 출력됩니다. 1은 PDO가 새로운 연결을 생성한 경우를 의미합니다.
따라서, PDO의 ATTR_PERSISTENT 옵션을 사용하여 connection pooling을 사용할 때 기존에 생성된 연결을 재사용할 수 있습니다. 또한, ATTR_CONNECTION_STATUS 옵션을 사용하여 연결의 상태를 확인할 수 있습니다.
2025-05-02 06:01