Connection Pool

๋‹ค์Œ์€ JDBC ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์ด์šฉํ•ด DB์— ์ ‘์†ํ•˜๋Š” ์˜ˆ์ œ์ด๋‹ค.

String driverPath = "net.sourceforge.jtds.jdbc.Driver";
String address = "jdbc:jtds:sqlserver://IP/DB";
String userName = "user";
String password = "password";
String query = "SELECT ... where id = ?";
try {
 Class.forName(driverPath);
 Connection connection = DriverManager.getConnection(address, userName, password);
 PreparedStatement ps = con.prepareStatement(query);
 ps.setString(1, id);
 ResultSet rs = get.executeQuery();
 // ....
} catch (Exception e) { }
} finally {
 rs.close();
 ps.close();
}

JDBC๋ฅผ ์ด์šฉํ•ด ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์–ป๊ธฐ๊นŒ์ง€ ๊ณผ์ •์—์„œ ๊ฐ€์žฅ ๋น„์šฉ์ด ๋งŽ์ด ๋ฐœ์ƒํ•˜๋Š” ๋ถ€๋ถ„์€ ์›น ์„œ๋ฒ„์—์„œ ๋ฌผ๋ฆฌ์ ์œผ๋กœ DB์„œ๋ฒ„์— ์ตœ์ดˆ๋กœ ์—ฐ๊ฒฐ๋˜์–ด Connection ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ถ€๋ถ„์ด๋‹ค.

https://image.toast.com/aaaaahq/was-and-db.png

์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ HTTP ์š”์ฒญ์— ๋”ฐ๋ผ Thread๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ๋˜๊ณ , ๋Œ€๋ถ€๋ถ„์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์€ DB ์„œ๋ฒ„๋กœ ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์–ป๊ฒŒ๋œ๋‹ค. ๋งŒ์•ฝ ์œ„์™€ ๊ฐ™์ด ๋ชจ๋“  ์š”์ฒญ์—๋Œ€ํ•ด DB ์ ‘์†์„ ์œ„ํ•œ Driver๋ฅผ ๋กœ๋“œํ•˜๊ณ , Connection ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์—ฐ๊ฒฐํ•œ๋‹ค๋ฉด ๋ฌผ๋ฆฌ์ ์œผ๋กœ DB ์„œ๋ฒ„์— ์ง€์†์ ์œผ๋กœ ์ ‘๊ทผํ•ด์•ผ๋  ๊ฒƒ์ด๋‹ค.

์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ์— DBCP(Database Connection Pool)์„ ์ด์šฉํ•ด DB Connection ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ถ€๋ถ„์— ๋Œ€ํ•œ ๋น„์šฉ๊ณผ ์‹œ๊ฐ„์„ ์ค„์ด๊ณ , ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ์— ๋Œ€ํ•œ ๋ถ€๋‹ด์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

DBCP

Connection Pool์„ ์ด์šฉํ•˜๋ฉด ๋‹ค์ˆ˜์˜ HTTP ์š”์ฒญ์— ๋Œ€ํ•œ Thread๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ๋œ๋‹ค.

WAS ๊ฐ€ ์‹คํ–‰๋  ๋–„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ Connection Pool ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด Connection Pool ๊ตฌํ˜„์ฒด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.[[Apache Common DBCP ์˜คํ”ˆ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ][http://commons.apache.org/]]

https://docs.oracle.com/cd/B12037_01/appdev.101/b10779/lnoci043.gif

Connection Pool์ด๋ž€ DB์™€ ๋ฏธ๋ฆฌ ์—ฐ๊ฒฐ(connection)์„ ํ•ด๋†“์€ ๊ฐ์ฒด๋“ค์„ ์›…๋ฉ์ด(Pool)์— ์ €์žฅํ•ด๋‘์—ˆ๋‹ค๊ฐ€ ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์ด ์˜ค๋ฉด connection์„ ๋นŒ๋ ค์ฃผ๊ณ , ์ž‘์—…์ด ๋๋‚˜๋ฉด ๋‹ค์‹œ connection์„ ๋Œ๋ ค๋ฐ›์•„ pool์— ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์„ ๋งํ•œ๋‹ค.

  1. WAS๊ฐ€ ์‹คํ–‰๋˜๋ฉด์„œ ๋ฏธ๋ฆฌ ์ผ์ •๋Ÿ‰์˜ DB Connection ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  Pool์— ์ €์žฅํ•ด๋‘”๋‹ค.

  2. HTTP ์š”์ฒญ์— ๋”ฐ๋ผ ํ•„์š”ํ•  ๋•Œ Pool์—์„œ Connection ๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ๋‹ค ์“ฐ๊ณ  ๋ฐ˜ํ™˜ํ•œ๋‹ค.

  3. ์ด์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ HTTP ์š”์ฒญ ๋งˆ๋‹ค DB Driver๋ฅผ ๋กœ๋“œํ•˜๊ณ  ๋ฌผ๋ฆฌ์ ์ธ ์—ฐ๊ฒฐ์— ์˜ํ•œ Connection ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋น„์šฉ์ด ์ค„์–ด๋“ค๊ฒŒ ๋œ๋‹ค.

์„œ๋ฒ„๋Š” ๋™์‹œ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ์˜ ์ˆ˜๊ฐ€ ์žˆ๋Š”๋ฐ, ์ผ๋ฐ˜์ ์ธ Connection Pool ์ด์šฉ์‹œ ๋™์‹œ ์ ‘์†์ž ์ˆ˜๋ฅผ ๋ฒ—์–ด๋‚˜๊ฒŒ ๋  ๊ฒฝ์šฐ ์—๋Ÿฌ(์˜ˆ์™ธ)๊ฐ€ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ, ํฌ๊ธฐ๋Š” ์„œ๋ฒ„ ์ ‘์†์ž ์ˆ˜ ๋“ฑ ์„œ๋ฒ„ ๋ถ€ํ•˜์— ๋”ฐ๋ผ์„œ ์กฐ์ •ํ•ด์•ผํ•œ๋‹ค. Connection ๋˜ํ•œ ๊ฐ์ฒด์ด๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฐจ์ง€ํ•˜๊ฒŒ ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋ฌด์ž‘์ • ๋งŽ์ด ๋Š˜๋ฆฌ๋Š” ๊ฒƒ์€ ์˜คํžˆ๋ ค ์„ฑ๋Šฅ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค.

Connection Pool์—์„œ ์ƒ์„ฑ๋˜์–ด ์žˆ๋Š” Connection์˜ ์ˆ˜๋Š” ํ•œ์ •์ ์ด๋‹ค. ๋™์‹œ ์ ‘์†์ž๊ฐ€ ๋งŽ์•„์ ธ ๋‚จ์•„์žˆ๋Š” Connection์ด ์—†๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ํด๋ผ์ด์–ธํŠธ๋Š” ๋Œ€๊ธฐ ์ƒํƒœ๋กœ ์ „ํ™˜์ด๋˜๊ณ , ๋ฐ˜ํ™˜๋˜๋ฉด ๋Œ€๊ธฐํ•˜๊ณ  ์žˆ๋Š” ์ˆœ์„œ๋Œ€๋กœ Connectoin์ด ์ œ๊ณต๋œ๋‹ค.

์ฐธ๊ณ 

Last updated

Was this helpful?