DB Connection Pool(DBCP)

ํƒœ๊ทธ
Database
๋‚ ์งœ
2024/01/19
2 more properties
์ˆ˜ ๋งŽ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋ƒˆ์„ ๋•Œ ๊ทธ๋งŒํผ Connection์„ ์ƒ์„ฑํ•˜๊ฒŒ ๋˜๋ฉด ์„œ๋ฒ„์— ๊ณผ๋ถ€ํ•˜๊ฐ€ ๊ฑธ๋ฆฌ๊ฒŒ ๋œ๋‹ค.
DBCP๋Š” ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์„ ์˜ˆ๋ฐฉํ•˜๊ธฐ ์œ„ํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํ–‰ ๋  ๋•Œ ๋ฏธ๋ฆฌ ์ •์˜๋œ ์ˆ˜๋งŒํผ DB Connection์„ ์ƒ์„ฑํ•˜๊ณ , DB์ž‘์—…์ด ํ•„์š”ํ•  ๋•Œ ์ƒ์„ฑํ•ด๋‘” Connection์„ โ€œ๋Œ€์—ฌโ€๋ฐ›์•„ ์žฌ์‚ฌ์šฉํ•œ๋‹ค.
์ž‘์—…์„ ๋งˆ์นœ Connection์€ Connection Pool๋กœ ๋ฐ˜ํ™˜๋˜๊ณ , ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๋Š” Connection์€ ์œ ํœด ์ƒํƒœ๋กœ ์ „ํ™˜๋˜์–ด Connection Pool ํฌ๊ธฐ๋ฅผ ์œ ์ง€ํ•˜์—ฌ DB ์„ฑ๋Šฅ์„ ์ตœ์ ํ™” ํ•œ๋‹ค.

์š”์•ฝ

1.
์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ์‹œ ์ •์˜๋œ ์ˆ˜๋งŒํผ DB Connection ์ƒ์„ฑ
2.
DB ์ž‘์—…์ด ํ•„์š”ํ•  ๋•Œ ์ƒ์„ฑํ•ด๋‘” Connection์„ ๋Œ€์—ฌ๋ฐ›์•„ ์žฌ์‚ฌ์šฉ
3.
์ž‘์—…์„ ๋งˆ์นœ Connection์€ Connection Pool๋กœ ๋ฐ˜ํ™˜
4.
์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๋Š” Connection์€ ์œ ํœด์ƒํƒœ๋กœ ์ „ํ™˜

DBCP์™€ DB Access์˜ ์ƒ๊ด€ ๊ด€๊ณ„

DB Access (๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘๊ทผ or ์—ฐ๊ฒฐ)
DB์— ์ ‘์†ํ•˜๊ณ , ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ฑฐ๋‚˜ ์“ฐ๋Š” ํ”„๋กœ์„ธ์Šค
โ†’ DB์— ์ ‘๊ทผํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒ, ์ˆ˜์ •, ์‚ญ์ œ ํ•˜๋Š” ํ–‰์œ„๋ฅผ ์˜๋ฏธ
์ผ๋ก€๋กœ ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด์„œ 10๋ฒˆ์˜ DB Access๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค๋ฉด?
์กฐ๊ฑด
1.
๋‹จ์ผ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ
2.
๋ณ‘๋ ฌ์ฒ˜๋ฆฌ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ
10๋ฒˆ ๋ฐ˜๋ณต ์ˆ˜ํ–‰ ํšŒ์›Id๋กœ ํšŒ์› ์ •๋ณด ์กฐํšŒ
Java
๋ณต์‚ฌ
์œ„ ์˜์‚ฌ์ฝ”๋“œ๋ฅผ ์ˆ˜ํ–‰ํ–ˆ์„ ๋•Œ,
1๊ฐœ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ 10๋ฒˆ์˜ DB Access๋ฅผ ํ•˜๊ฒŒ๋จ
โ†’ Connection Pool ์—์„œ Connection ๋Œ€์—ฌ - ๋ฐ˜ํ™˜์„ 10ํšŒ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋จ
โ†’ ๋ฐ˜๋ณต์„ ์ˆ˜ํ–‰ํ•˜๋”๋ผ๋„ Connection Pool์•ˆ์˜ Connection ์‚ฌ์šฉ๋Ÿ‰์€ ๋ณ€ํ•˜์ง€ ์•Š์Œ
โ€ข
1๊ฐœ Thead, 1๊ฐœ Connection๋งŒ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  Thread ์ˆ˜์™€ Connection pool ํฌ๊ธฐ๋ฅผ ๊ฐ™๊ฒŒ ์„ค์ •ํ•˜๋ฉด ์•ˆ๋จ
โ€ข
Connection์„ ๋ฐ˜ํ™˜ํ•˜๊ณ , ์ƒˆ๋กœ์šด Connection์„ ๋Œ€์—ฌ๋ฐ›๋Š” ๋™์•ˆ ๊ธฐ์กด Connection์ด ๋ฐ˜ํ™˜๋˜์ง€ ์•Š๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ณ  ๋Œ€๊ธฐ ์ƒํƒœ๋ฅผ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ์Œ.
โ€ข
๊ทธ๋Ÿฌ๋‚˜ ๋ชจ๋“  ์š”์ฒญ์ด DB Access๋ฅผ ์š”๊ตฌํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ๋ฅผ ๊ฑฐ์นœ ํ›„ ์กฐ์ •์ด ํ•„์š”ํ•จ
๋„ˆ๋ฌด ํฐ ํฌ๊ธฐ์˜ DBCP๋Š” ์ง€์†์ ์ธ DB ์„œ๋ฒ„ ๋ฆฌ์†Œ์Šค๋ฅผ ์†Œ๋ชจํ•˜๊ณ ,
๋„ˆ๋ฌด ์ ์€ ํฌ๊ธฐ์˜ DBCP๋Š” ๋Œ€๊ธฐ ์ƒํƒœ๋ฅผ ์œ ๋ฐœํ•œ๋‹ค.
๋ณ‘๋ ฌ์ฒ˜๋ฆฌ๋กœ DB Access๋ฅผ ํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด?
โ†’ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” Thread๋งŒํผ Connection์„ ๋Œ€์—ฌํ•˜๊ฒŒ๋œ๋‹ค.
โ†’ Connection Pool์˜ Connection ์ด์ƒ์œผ๋กœ DB Access ์š”์ฒญ์ด ๋ฐœ์ƒํ•œ๋‹ค๋ฉด, Connction Pool์€ ๋Œ€๊ธฐ ์ƒํƒœ๋กœ ์ด์–ด์ง€๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ๋ผ์นœ๋‹ค.

๋™์‹œ ์ ‘์†์ž๊ฐ€ ๋งŽ์œผ๋ฉด?

โ†’ ๋‚จ์•„์žˆ๋Š” Connection์ด ์—†์„ ๋•Œ
๋Œ€๊ธฐ ์ƒํƒœ (Waiting State)
Connection Pool์— ๋นˆ Connection์ด ์—†๋Š” ๊ฒฝ์šฐ, ์ƒˆ๋กœ์šด ์ ‘์†์ž๋Š” ๋Œ€๊ธฐ ์ƒํƒœ์— ๋“ค์–ด๋จ
์ด๋Ÿฌํ•œ ์ƒํƒœ์—์„œ ์ ‘์†์ž๋Š” ๋‹ค๋ฅธ ์ ‘์†์ž๊ฐ€ Connection์„ ๋ฐ˜ํ™˜ํ•˜๊ธธ ๊ธฐ๋‹ค๋ฆฌ๊ณ ,
๋Œ€๊ธฐ ์ƒํƒœ๊ฐ€ ๊ธธ์–ด์งˆ ๊ฒฝ์šฐ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‘๋‹ต ์‹œ๊ฐ„์ด ์ง€์—ฐ๋˜๊ฑฐ๋‚˜ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ์Œ
pool size = Tn * (Cm - 1) + 1
โ€ข
Tn = ์ „์ฒด Thread ๊ฐœ์ˆ˜
โ€ข
Cm = ํ•˜๋‚˜์˜ Task์— ๋™์‹œ์— ํ•„์š”ํ•œ Connection ์ˆ˜

์ฐธ์กฐ