Skip to content

Latest commit

ย 

History

History
143 lines (88 loc) ยท 6.42 KB

ConnectionPool.md

File metadata and controls

143 lines (88 loc) ยท 6.42 KB

์ปค๋„ฅ์…˜ ํ’€ (DBCP; Database Polling Service)

์›น ์ปจํ…Œ์ด๋„ˆ(WAS)๊ฐ€ ์‹คํ–‰๋˜๋ฉด์„œ Database์™€ ์—ฐ๊ฒฐ๋œ Connection์„ ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•˜์—ฌ pool์— ์ €์žฅํ•ด๋‘์—ˆ๋‹ค๊ฐ€, ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์ด ์˜ค๋ฉด ํ•ด๋‹น Connection ์„ ์‚ฌ์šฉํ•˜๊ณ , ์ฒ˜๋ฆฌ๊ฐ€ ๋๋‚˜๋ฉด ๋‹ค์‹œ ๋ฐ˜ํ™˜ํ–ˆ๋˜ Connection์„ ๋ฐ˜๋‚ฉ๋ฐ›์•„ pool์— ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.


Connection
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๊ฐ์ฒด๋กœ, Connetion์ด ์ƒ์„ฑ๋  ๋•Œ๋งˆ๋‹ค ์‹œ์Šคํ…œ์˜ ์ž์›(CPU, ๋ฉ”๋ชจ๋ฆฌ)์˜ ๋งŽ์€ ์†Œ๋ชจ์™€ ์‹œ๊ฐ„์ด ๋ฐœ์ƒํ•œ๋‹ค.

  • HTTP ์š”์ฒญ : ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์— ์˜ํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด DBMS ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ๋กœ ์ดํ•ดํ•˜์ž.

IMAGES

  1. Connection ์š”์ฒญ ๋ฐœ์ƒ
  2. Connection Pool์— ์กด์žฌํ•˜๋Š” Connection ์„ ์ œ๊ณต
  3. Connection ์‚ฌ์šฉ
  4. Connection ์‚ฌ์šฉ ์ข…๋ฃŒ
  5. ์‚ฌ์šฉ์ด ๋๋‚œ Connection ์„ ๋‹ค์‹œ Connection Pool ์— ๋ฐ˜ํ™˜


์ปค๋„ฅ์…˜ ํ’€ ๊ฐœ์ˆ˜ ์„ค์ •

IMAGES

T, C ์˜ ์˜๋ฏธ๋Š”?

  • T : ํ˜„์žฌ ์‹œ๊ฐ„์„ ๋‹ด๊ณ ์žˆ๋Š” ํƒ€์ž„ ์Šคํƒฌํ”„
  • C : ์ปค๋„ฅ์…˜์˜ ๋ ˆํผ๋Ÿฐ์Šค

commons.dbcp ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

  • PoolableConnection ํƒ€์ž…์˜ ์ปค๋„ฅ์…˜์„ ์ƒ์„ฑํ•˜๊ณ  ์ƒ์„ฑํ•œ ์ปค๋„ฅ์…˜์— ConnectionEventListener ๋“ฑ๋ก
  • ConnectionEventListener ์—๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‚ฌ์šฉํ•œ ์ปค๋„ฅ์…˜์„ ํ’€๋กœ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ํ˜ธ์ถœ๋  ์ฝœ๋ฐฑ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋‹ค.
  • ์ด๋ ‡๊ฒŒ ์ƒ์„ฑ๋œ ์ปค๋„ฅ์…˜์ด ์ปค๋„ฅ์…˜ ํ’€์— ์ถ”๊ฐ€๋œ๋‹ค.
  • ์ด๋•Œ commons-pool์€ ๋‚ด๋ถ€์ ์œผ๋กœ ํ˜„์žฌ ์‹œ์ž‘์„ ๋‹ด๊ณ ์žˆ๋Š” ํƒ€์ž„์Šคํƒฌํ”„์™€ ์ถ”๊ฐ€๋œ ์ปค๋„ฅ์…˜์˜ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ํ•œ์Œ์œผ๋กœ ํ•˜๋Š” ObjectTimestampPair๋ผ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  • ์ด๋“ค์„ LIFO(Stack) ํ˜•ํƒœ์˜ CursorableLinkedList ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค. (๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋ฐฉ์‹)

์˜ต์…˜ ์„ค๋ช…
maxActive ๋™์‹œ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์ปค๋„ฅ์…˜ ๊ฐœ์ˆ˜
maxIdle Connection Pool์— ๋ฐ˜๋‚ฉํ•  ๋•Œ ์ตœ๋Œ€๋กœ ์œ ์ง€๋  ์ˆ˜ ์žˆ๋Š” ์ปค๋„ฅ์…˜ ๊ฐœ์ˆ˜
minIdle ์ตœ์†Œํ•œ์œผ๋กœ ์œ ์ง€ํ•  ์ปค๋„ฅ์…˜ ๊ฐœ์ˆ˜
initialSize ์ตœ์ดˆ๋กœ getConnection() Method๋ฅผ ํ†ตํ•ด ์ปค๋„ฅ์…˜ ํ’€์— ์ฑ„์›Œ ๋„ฃ์„ ์ปค๋„ฅ์…˜ ๊ฐœ์ˆ˜
maxWait ์ปค๋„ฅ์…˜์„ ์–ป๊ธฐ ์ „ ์ตœ๋Œ€ ๋Œ€๊ธฐ ์‹œ๊ฐ„

  1. maxActive ๋Š” initialSize ๋ณด๋‹ค ๋” ํฌ๊ฑฐ๋‚˜ ๊ฐ™์•„์•ผํ•œ๋‹ค.
  • maxActive = 10์ด๊ณ  initialSize = 20์ด๋ผ๊ณ  ๊ฐ€์ •ํ•˜๋ฉด ์ตœ์ดˆ์— ์ปค๋„ฅ์…˜์„ ์ƒ์„ฑํ•  ๋•Œ initialSize ๊ฐ’์ด ์ตœ๋Œ€ ์ปค๋„ฅ์…˜ ๊ฐœ์ˆ˜์ธ maxActive ๊ฐ’๋ณด๋‹ค ์ปค์„œ ๋…ผ๋ฆฌ์ ์œผ๋กœ ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋Š” ์„ค์ •์ด๋‹ค.
  • ์—ฌ๊ธฐ์„œ initialSize ์€ ์‚ฌ์šฉ์ค‘์ธ Connection ๊ฐ์ฒด๋กœ ๋ณด์ž.
  1. maxActive ์™€ maxIdle ์€ ๋™์ผํ•˜๊ฒŒ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค.

( 2)๋ฒˆ ์˜ˆ์‹œ ์ƒํ™ฉ )

maxActive = 10์ด๊ณ , maxIdle = 5์ธ ๊ฒฝ์šฐ

๋™์‹œ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์ปค๋„ฅ์…˜ ๊ฐœ์ˆ˜๊ฐ€ 10๊ฐœ์ธ๋ฐ, ํ•ญ์ƒ ์ปค๋„ฅ์…˜์„ ๋™์‹œ์— 5๊ฐœ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž. ์ด๋•Œ 1๊ฐœ์˜ ์ปค๋„ฅ์…˜์ด ์ถ”๊ฐ€๋กœ ์š”์ฒญ๋œ๋‹ค๋ฉด 10๊ฐœ๊นŒ์ง€ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ํ•˜๋‚˜์˜ Connection์„ ์ƒ์„ฑํ•˜์—ฌ ์ถ”๊ฐ€ํ•˜๊ณ , ์ด Connection์€ ์š”์ฒญ์ด ๋๋‚œ ํ›„ ๋‹ค์‹œ pool์— ๋ณด๊ด€๋œ๋‹ค. ์ด๋•Œ maxIdel์ด 5์ด๋ฏ€๋กœ ํ•ด๋‹น ์ปค๋„ฅ์…˜์€ close ๋˜์–ด, ์ด๋Ÿฐ ์ƒํ™ฉ์ด ๋ฐ˜๋ณต๋˜๋ฉด ๋งค๋ฒˆ Connection์„ ์ƒ์„ฑํ•˜๊ณ  ๋‹ซ๋Š” ๋น„์šฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.



์ปค๋„ฅ์…˜ ํ’€ ๋™์ž‘์›๋ฆฌ (์˜ˆ์‹œ: Hikari CP)

(์˜ˆ์‹œ) Hikari CP : https://brunch.co.kr/@jehovah/24

Connection Pool์„ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ


(1๋ฒˆ)

IMAGES

  • ์š”์ฒญ์ด ๋ฐœ์ƒํ•˜์—ฌ, Connection Pool์˜ Connection ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ด์ „์— ์‚ฌ์šฉํ–ˆ๋˜ Connection์˜ ์กด์žฌ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜์—ฌ ์ด๋ฅผ ์šฐ์„ ์ ์œผ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

(2๋ฒˆ)

IMAGES

  • ๊ฐ€๋Šฅํ•œ Connection์ด ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ, HandOffQueue๋ฅผ Polling ํ•˜๋ฉด์„œ ๋‹ค๋ฅธ Thread๊ฐ€ Connection์„ ๋ฐ˜๋‚ฉํ•˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฐ๋‹ค. ๋งŒ์•ฝ ์ตœ๋Œ€ ๋Œ€๊ธฐ์‹œ๊ฐ„ ์„ค์ •๊ฐ’ (maxWait)๋ณด๋‹ค ์ง€๋‚˜๊ฒŒ๋˜๋ฉด ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

Polling ์ฃผ๊ธฐ์ ์œผ๋กœ Connection Pool์˜ ์ƒํƒœ๋ฅผ ๊ฒ€์‚ฌํ•˜์—ฌ HandOffQueue์— ๋™๊ธฐํ™”ํ•œ๋‹ค.


(3๋ฒˆ)

IMAGES

  • ์ตœ์ข…์ ์œผ๋กœ ์‚ฌ์šฉํ•œ Connection์„ ๋ฐ˜๋‚ฉํ•˜๋ฉด Connection Pool์ด Connection ์‚ฌ์šฉ ๋‚ด์—ญ์„ ๊ธฐ๋กํ•˜๊ณ  HandOffQueue์— ๋ฐ˜๋‚ฉ๋œ Connection์„ ์‚ฝ์ž…ํ•œ๋‹ค.


์ปค๋„ฅ์…˜ ํ’€์˜ ์žฅ์ 

** ๋งŒ์•ฝ ์ปค๋„ฅ์…˜ํ’€์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด?
ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์ด ๋ฐœ์ƒํ• ๋•Œ ๋งˆ๋‹ค Connection ์„ ์ƒ์„ฑํ•ด์ค˜์•ผํ•˜๋Š” ์ƒํ™ฉ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž. ์ด๋ ‡๊ฒŒ๋˜๋ฉด ์š”์ฒญ์ด ์˜ฌ๋•Œ๋งˆ๋‹ค ๊ณ„์†ํ•ด์„œ ์ƒˆ๋กœ์šด Connection ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๋ฉฐ, Conenction์„ ์ƒ์„ฑํ•˜๊ณ  ์‚ญ์ œํ•˜๋Š” ๋น„์šฉ์ด ๋ฐœ์ƒํ•˜๊ฒŒ๋œ๋‹ค.

  1. ์ปค๋„ฅ์…˜ ํ’€์— ๋ฏธ๋ฆฌ Connection ๋“ค์„ ์ƒ์„ฑํ•˜์—ฌ ์ €์žฅํ•˜๋ฏ€๋กœ, ์ปค๋„ฅ์…˜์ด ํ•„์š”ํ•œ ์‹œ์ ์— ์ƒ์„ฑํ•˜๋Š” ์‹œ๊ฐ„์„ ์†Œ๋น„ํ•˜์ง€ ์•Š๋Š”๋‹ค.
  2. ์ƒ์„ฑ๋œ Connection์„ ๊ณ„์†ํ•ด์„œ ์žฌ์‚ฌ์šฉํ•˜์—ฌ, ์ƒ์„ฑ๋˜๋Š” ์ปค๋„ฅ์…˜์˜ ์ˆ˜๊ฐ€ ๋งŽ์ง€ ์•Š๊ณ  ์ง์ ‘ ์„ค์ •์ด ๊ฐ€๋Šฅํ•˜๋‹ค.


์ปค๋„ฅ์…˜ ํ’€์˜ ๊ฐœ์ˆ˜ ์„ค์ •

WAS์—์„œ ์„ค์ •ํ•ด์•ผ ํ•˜๋Š” ๊ฐ’ ์ค‘ ๊ฐ€์žฅ ์„ฑ๋Šฅ์— ๋งŽ์€ ์˜ํ–ฅ์„ ์ฃผ๋Š” ๋ถ€๋ถ„์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  • Thread
  • Connection Pool์˜ ๊ฐœ์ˆ˜

์ด๋“ค ๊ฐ’์€ ์ง์ ‘์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ์™€ ๊ด€๋ จ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋งŽ์ด ์‚ฌ์šฉํ•˜๋ฉด ํ•  ์ˆ˜๋ก ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋งŽ์ด ์ ์œ ํ•˜๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ ‡๋‹ค๊ณ  ๋ฐ˜๋Œ€๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์œ„ํ•ด ์ ๊ฒŒ ์ง€์ •ํ•œ๋‹ค๋ฉด, ์„œ๋ฒ„์—์„œ๋Š” ๋งŽ์€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•˜๊ณ  ๋Œ€๊ธฐ ํ•  ์ˆ˜ ๋ฐ–์— ์—†๋‹ค.


DB Connection Pool ๊ด€๋ฆฌ ๋ฐฉ๋ฒ•

  • ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹ค์ œ ์šด์˜ ํ™˜๊ฒฝ์—์„œ์˜ ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜์—ฌ ์‹œ์Šคํ…œ ํ™˜๊ฒฝ์— ์ตœ์ ํ™”๋œ ๊ฐ’์„ ์ฐพ์•„๋‚ด๋Š”๊ฒŒ ์ข‹๋‹ค.
  • WAS์˜ Thread์˜ ๊ฐœ์ˆ˜๊ฐ€ DB์˜ Connection Pool์˜ ๊ฐฏ์ˆ˜ ๋ณด๋‹ค ๋งŽ์•„์•ผ ํ•˜๋Š” ์ด์œ ๋Š”, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ๋ชจ๋“  ์š”์ฒญ์ด DB์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.


Reference.

https://programmer93.tistory.com/74

https://linked2ev.github.io/spring/2019/08/14/Spring-3-%EC%BB%A4%EB%84%A5%EC%85%98-%ED%92%80%EC%9D%B4%EB%9E%80/

https://velog.io/@kchief/Connection-Pool%EC%BB%A4%EB%84%A5%EC%85%98-%ED%92%80

https://steady-coding.tistory.com/564