개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.05.02 06:00

PDO ODBC Connection Pooling 관련 질문

목록
  • Unity마법사 21시간 전 2025.05.02 06:00 새글
  • 4
    1
teacher님, PDO ODBC Connection Pooling에 대해 질문이 있습니다.

제가 이해한 바에 따르면 PDO ODBC Connection Pooling은
연결을 만들고 유지하는 비용을 절약하기 위해
연결을 풀링하는 기능이라고 합니다.

하지만, connection pooling을 사용할 때
기존에 생성된 연결을 재사용하는 방식이 아닌
새로운 연결을 계속 생성하고 있는 것처럼 보입니다.

이러한 이유로 connection pooling의 이점을
느끼지 못하고 있습니다.

connection pooling의 원리로는 기존에
생성된 연결을 재사용해야 한다고 이해하고
있는데, 실제로 재사용이 되는지 확인하고 싶습니다.

connection pooling을 사용할 때
기존에 생성된 연결을 재사용하는 방법은 무엇입니까?

다음은 예시입니다.

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 사용

);



try {

    $pdo = new PDO($dsn, null, null, $opt);

} catch (PDOException $e) {

    echo 'Connection failed: ' . $e->getMessage();

}



이러한 코드를 통해 connection pooling을 사용했을 때
기존에 생성된 연결을 재사용하는지 확인하고 싶습니다.

connection pooling을 사용할 때
기존에 생성된 연결을 재사용하는 방법을 알려주시면
감사하겠습니다.

    댓글목록

    profile_image
    나우호스팅  21시간 전



    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

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 16,123건 / 3 페이지

검색

게시물 검색