눈덩이의 테크블로그
connection pool방식의 종류가 있다? (postgeSQL, node.js) 본문
우선 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()를 사용하여 풀 자체에서 바로 쿼리를 실행한다. 이 방법은 요청마다 새로운 클라이언트를 생성하지 않고, 풀 자체에서 관리하는 연결을 사용하여 쿼리를 실행하며, 클라이언트 생성 및 해제를 개발자가 수동으로 관리할 필요가 없으며, 풀에서 관리하는 연결을 통해 쿼리를 실행하는 방식이다.
주로 두 번째 방법이 코드를 더 간결하게 만들어주고, 요청마다 연결을 새로 만들고 해제하는 오버헤드를 피할 수 있다. 요청마다 연결을 만들 필요가 없는 경우, 풀에서 직접 쿼리를 실행하는 것이 효율적이다. 따라서 다음부터는 두 번째 방식을 쓰자.
'jsp' 카테고리의 다른 글
[MySQL] 단일 Connection VS Connection Pool 방식의 차이 (0) | 2023.12.29 |
---|---|
자식창(팝업창)에서 부모창으로 값 전달해주기 (아이디 중복체크 팝업) (0) | 2023.12.06 |
[7_2] tomcat과 mariaDB(mysql)연결하기, jsp(java) form태그 사용법 (action) (0) | 2023.11.01 |