Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

눈덩이의 테크블로그

connection pool방식의 종류가 있다? (postgeSQL, node.js) 본문

jsp

connection pool방식의 종류가 있다? (postgeSQL, node.js)

nundung 2023. 12. 31. 15:11

우선 psql.js에서 이렇게 connection pool과 연결시켜주었다.

//Import
const { Pool } = require("pg")

const pool = new Pool({
    user: process.env.USER,
    password: process.env.PASSWORD,
    host: process.env.HOST,
    database: process.env.DATABASE,
    port: process.env.PORT, 
    max: 5     // 맥스값 설정하기
})

pool.connect(err => {
    if (err) {
    console.log('Failed to connect db ' + err)
    } else {
    console.log('Connect to db done!')
    }
})

module.exports = pool

 

 

그리고 api에서 pool을 사용할 때,

 

첫번째 방식 : 나는  각각의 api에게 풀을 연결해주고 수동으로 끊어주고 하였는데 

const client = await pool.connect();
const data = await client.query(sql, values);
if(client) client.release();

 

 

 

 

두번째 방식 : 이런 방식으로 pool자체에서 query를 직접호출하는 방식이 있다고 한다.

const data = await pool.query(sql, values);

 

 

 



첫 번째 방식에서 pool.connect()를 사용하여 명시적으로 클라이언트를 생성한 후, 이 클라이언트를 통해 쿼리를 실행하고 client.release()를 사용하여 클라이언트를 명시적으로 해제하고 풀에 반환하는데
즉, 각각의 요청마다 새로운 클라이언트가 생성되고, 요청이 완료되면 해당 클라이언트는 해제된다. 이 방법은 요청마다 새로운 연결을 생성하여 데이터베이스 작업을 수행하며, 작업이 끝난 후에는 해당 연결을 명시적으로 닫아서 리소스를 확보한다. 이는 요청마다 연결을 만들고 끊는 데에 따른 추가 오버헤드가 있을 수 있다고한다.

두 번째 방식에서 pool.query()를 사용하여 풀 자체에서 바로 쿼리를 실행한다. 이 방법은 요청마다 새로운 클라이언트를 생성하지 않고, 풀 자체에서 관리하는 연결을 사용하여 쿼리를 실행하며, 클라이언트 생성 및 해제를 개발자가 수동으로 관리할 필요가 없으며, 풀에서 관리하는 연결을 통해 쿼리를 실행하는 방식이다.

주로 두 번째 방법이 코드를 더 간결하게 만들어주고, 요청마다 연결을 새로 만들고 해제하는 오버헤드를 피할 수 있다. 요청마다 연결을 만들 필요가 없는 경우, 풀에서 직접 쿼리를 실행하는 것이 효율적이다. 따라서 다음부터는 두 번째 방식을 쓰자.