-
[DB] Connection PoolDevelopment/DB & SQL 2020. 9. 29. 12:03728x90
# Connection Pool이란?
데이터베이스에 대한 향후 요청이 필요할 때 연결을 재사용할 수 있도록 유지 관리하는 데이터베이스 연결의 캐시다.
쉽게 말해서 다른 사용자가 다시 사용할 수 있도록 데이터베이스 연결을 열린 상태로 유지하는 데 사용되는 방법으로, DB와 연결된 Connection을 미리 만들어서 pool 속에 저장해 두고 있다가 필요할 때 Connection을 Pool에서 쓰고 다시 Pool에 반환한다.
DB와 Connection하는 작업은 네트워크 세션을 열고, 인증하고, 인증을 확인하는 등의 작업을 수행해야 하므로, 비용이 많이 들고, 리소스를 낭비한다.
이 작업을 DB 접근요청이 들어올때 마다 매번 한다고 생각하면 서버에 부하도 많이 갈 것이다.
따라서, Connection Pool을 사용하면 한번 연결한 정보를 재사용 가능하니 비용이 적어지고, 리소스 낭비를 방지할수있으며 DB Connection하는데 걸리는 시간도 줄일 수 있다.
# 코드로 이해하기
필자는 NodeJS에서 MSSQL을 Connection 하였다.
아래 dbConnection함수는 함수를 실행하면 실행 할때마다 DB Connection을 하므로, 서버에 부하를 줄 것이다.
import sql from "mssql"; const config = { user: "a", password: "aa", server: "aaa", database: "aaaa", }; const dbConnection = async () => { await sql.connect(config, function (err) { if (err) return console.error("error is", err); const request = new sql.Request(); request.query("SELECT TOP 1 * FROM ORDR", function (err, recordset) { if (err) console.log(err); console.log(recordset); }); }); }; dbConnection();
아래 코드는 위에 있는 코드를 Connection Pool을 사용해서 변경한 코드이다.
db.js파일에서 connection pool을 사용하여 global connection을 생성하고 export 하였다.
db.js import sql from "mssql"; const config = { user: "a", password: "aa", server: "aaa", database: "aaaa", }; const poolPromise = new sql.ConnectionPool(config) .connect() .then((pool) => { console.log("Connected to MSSQL"); return pool; }) .catch((err) => console.log("Database Connection Failed! Bad Config: ", err)); module.exports = { sql, poolPromise, };
app.js파일에서 db.js파일에서 생성해둔 db connection을 import하여 사용하였다.
queryDatabase함수를 실행할 때마다 connection을 해주지 않아도 되기 때문에 서버에 부하도 줄고, 재사용성도 높일 수 있다.
aap.js import { poolPromise } from "db.js"; queryDatabase(); async function queryDatabase() { const pool = await poolPromise; const result = await pool.request().query("SELECT TOP 1 * FROM ORDR", function (err, profileset) { if (err) { console.log(err); } else { const send_data = profileset.recordset; console.log(send_data); } }); }
# 참고자료
🎉 피드백은 언제나 환영입니다. 🎉
728x90'Development > DB & SQL' 카테고리의 다른 글
[MSSQL] STRING_SPLIT, CTE, STRING_AGG (0) 2023.08.10 [SQL] 인스턴스가 뭔가요? (0) 2021.08.10