header-img
Info :
728x90

 

 

Springboot :: HikariCP ๋ž€?

์ปค๋„ฅ์…˜ ํ’€(Connection Pooling)์„ ์ œ๊ณตํ•˜๋Š” JDBC Datasource์˜ ๊ตฌํ˜„์ฒด. ์‚ฌ์ „ ์ง€์‹JDBC(Java Database Connectivity)์ž๋ฐ”์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘์†ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ์ž๋ฐ” API.JDBC๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ž๋ฃŒ๋ฅผ ์ฟผ๋ฆฌ

bornatnoon.tistory.com

 

์šฐ์„  ๋“ค์–ด๊ฐ€๊ธฐ ์ „์— ์•ž์„œ HikariCP ๊ฐ€ ๋ญ”์ง€ ๊ฐœ๋…์„ ๋ชจ๋ฅด๊ฒ ๋‹ค๋ฉด.

์œ„์˜ ๊ธ€์„ ์ฐธ์กฐํ•˜๋„๋ก ํ•˜์ž.

 


HikariCP ์˜ต์…˜

 

 

GitHub - brettwooldridge/HikariCP: ๅ…‰ HikariCPใƒปA solid, high-performance, JDBC connection pool at last.

ๅ…‰ HikariCPใƒปA solid, high-performance, JDBC connection pool at last. - brettwooldridge/HikariCP

github.com

ํ•ด๋‹น ๋ฌธ์„œ์˜ Frequently used ๋ฅผ ๋ฒˆ์—ญํ•˜์˜€๋‹ค. ๊ณต์‹ ๋ฌธ์„œ์ด๋‹ˆ ์ฐธ๊ณ .

 

Frequently used

โ€ป ์‹œ๊ฐ„ ๋‹จ์œ„๋Š” ms ๊ธฐ์ค€.

Option Discription.
autoCommit auto-commit ์„ค์ •

- default: true
connectionTimeout pool์—์„œ connection์„ ๋ฐ›์•„์˜ค๊ธฐ ์ „๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ตœ๋Œ€ ์‹œ๊ฐ„. 
ํ—ˆ์šฉ ๊ฐ€๋Šฅํ•œ ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ์ดˆ๊ณผํ•˜๋ฉด SQL Exception์„ ๋ณด๋‚ธ๋‹ค.

- ์„ค์ • ๊ฐ€๋Šฅํ•œ ์ตœ์†Œ ์‹œ๊ฐ„: 250ms
- default: 30000 (30s)
idleTimeout pool์— ์ผ์„ ์•ˆํ•˜๋Š” ์ปค๋„ฅ์…˜์„ ์œ ์ง€ํ•˜๋Š” ์‹œ๊ฐ„.
์ด ์˜ต์…˜์€ minimumIdle์ด mazimumPoolSize ๋ณด๋‹ค ์ž‘๊ฒŒ ์„ค์ •๋˜์–ด ์žˆ์„ ๋•Œ๋งŒ ์„ค์ •.
pool์—์„œ ์œ ์ง€ํ•˜๋Š” ์ตœ์†Œ ์ปค๋„ฅ์…˜์˜ ์ˆ˜๋Š” minimumIdle.

- ์ตœ์†Œ ๊ฐ’: 10000ms
- default: 600000ms (10min)
maxLifetime ์ปค๋„ฅ์…˜ ํ’€์—์„œ ์‚ด์•„ ์žˆ์„ ์ˆ˜ ์žˆ๋Š” ์ปค๋„ฅ์…˜์˜ ์ตœ๋Œ€ ์ˆ˜๋ช… ์‹œ๊ฐ„.
์‚ฌ์šฉ์ค‘์ธ ์ปค๋„ฅ์…˜์€ maxLifetime์— ์ƒ๊ด€ ์—†์ด ์ œ๊ฑฐ๋˜์ง€ ์•Š๊ณ , ์‚ฌ์šฉ ์ค‘์ด์ง€ ์•Š์„ ๋•Œ๋งŒ ์ œ๊ฑฐ.
0์œผ๋กœ ์„ค์ •ํ•˜๋ฉด infinite lifetime์ด ์ ์šฉ.(idleTimeout ์„ค์ • ๊ฐ’์— ๋”ฐ๋ผ ์ ์šฉ idleTimeout ๊ฐ’์ด ์„ค์ •๋˜์–ด ์žˆ์„ ๊ฒฝ์šฐ 0์œผ๋กœ ์„ค์ •ํ•ด๋„ ๋ฌดํ•œ lifetime ์ ์šฉ ์•ˆ๋จ.)
pool ์ „์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ connection ๋‹จ์œ„๋กœ ์ ์šฉ์ด ๋จ. → pool์—์„œ ๋Œ€๋Ÿ‰์œผ๋กœ connection์ด ์ œ๊ฑฐ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•จ.

* ๋ฌด์กฐ๊ฑด ์„ค์ •ํ•ด์•ผ ํ•˜๋Š” ๊ฐ’์œผ๋กœ, DB๋‚˜ ์ธํ”„๋ผ์— ์ ์šฉ๋œ connection time limit ๋ณด๋‹ค ์ž‘์•„์•ผ ํ•จ.
- default: 1800000 (30min)
connectionTestQuery *JDBC4 ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์ง€์›ํ•œ๋‹ค๋ฉด ์ด ์˜ต์…˜์€ ๋ฏธ์„ค์ • ์ถ”์ฒœ

connection pool ์—์„œ connection์„ ํš๋“ํ•˜๊ธฐ ์ „์— ์œ ํšจํ•œ ์ปค๋„ฅ์…˜์ธ์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•˜์—ฌ vaild ์ฟผ๋ฆฌ๋ฅผ ๋˜์ง€๋Š” ๋ฐ์— ์‚ฌ์šฉ๋˜๋Š” ์ฟผ๋ฆฌ.
JDBC4 ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ํ™˜๊ฒฝ์—์„œ ์ด ๊ฐ’์„ ์„ค์ •ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ error ๋ ˆ๋ฒŒ ๋กœ๊ทธ๋ฅผ ๋ฑ‰๋ƒ„.
minimumIdle ์•„๋ฌด๋Ÿฐ ์ผ์„ ํ•˜์ง€ ์•Š์•„๋„ ์ ์ด๋„ ์ด ์˜ต์…˜์˜ ์„ค์ • ๊ฐ’ size๋กœ ์ปค๋„ฅ์…˜์„ ์œ ์ง€ํ•˜๋Š” ์„ค์ •.
์ตœ์ ์˜ ์„ฑ๋Šฅ๊ณผ ์‘๋‹ต์„ฑ์„ ์š”๊ตฌํ•œ๋‹ค๋ฉด ์ด ๊ฐ’์„ ์„ค์ •ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Œ.

- default: same as maximumPoolSize
maximumPoolSize pool์— ์œ ์ง€ ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์ปค๋„ฅ์…˜ ์ˆ˜.
pool์˜ ์ปค๋„ฅ์…˜ ์ˆ˜๊ฐ€ ์˜ต์…˜ ๊ฐ’์— ๋„๋‹ฌํ•˜๊ฒŒ ๋˜๋ฉด idle์ธ ์ƒํƒœ๋Š” ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค.

- default: 10
poolName ๋กœ๊น…์ด๋‚˜ JMX management console์— ํ‘œ์‹œ ๋˜๋Š” pool์˜ ์ด๋ฆ„.

- default: auto-generated
initializationFailTimeout pool์—์„œ connection์„ ์ดˆ๊ธฐํ™” ํ•  ๋•Œ ์„ฑ๊ณต์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์„ ๊ฒฝ์šฐ ๋น ๋ฅด๊ฒŒ ์‹คํŒจํ•˜๋„๋ก ํ•ด์ฃผ๋Š” ์˜ต์…˜.
readOnly pool์—์„œ ์ปค๋„ฅ์…˜์„ ํš๋“ํ•  ๋•Œ real-Only ๋ชจ๋“œ๋กœ ๊ฐ€์ ธ์˜จ๋‹ค. connection์ด read-Only๋กœ ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฉด ๋ช‡๋ช‡์˜ ์ฟผ๋ฆฌ๋“ค์ด ์ตœ์ ํ™” ๋จ.
(๋ช‡๋ช‡ DB๋Š” read-only ๋ชจ๋“œ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋‹ˆ ์ฐธ๊ณ .)

- default: false
driverClassName HikariCP๋Š” jdbcUrl์„ ์ฐธ์กฐํ•˜์—ฌ ์ž๋™์œผ๋กœ driver๋ฅผ ์„ค์ •ํ•˜๋ ค๊ณ  ์‹œ๋„ → ๋ช‡๋ช‡ ์˜ค๋ž˜๋œ driver๋“ค์€ driverClassName์„ ๋ช…์‹œํ™” ํ•ด์•ผํ•จ.

* ์–ด๋–ค ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๊ฐ€ ๋ช…๋ฐฑํ•˜๊ฒŒ ํ‘œ์‹œ ๋˜์ง€์•Š๋Š”๋‹ค๋ฉด ์ƒ๋žต ๊ฐ€๋Šฅ.
validationTimeout valid ์ฟผ๋ฆฌ๋ฅผ ํ†ตํ•˜์—ฌ ์ปค๋„ฅ์…˜์ด ์œ ํšจํ•œ์ง€ ๊ฒ€์‚ฌํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” timeout.

- ์ตœ์†Œ ๊ฐ’: 250ms
- default: 5000ms
leakDetectionThreshold ์ปค๋„ฅ์…˜์ด ๋ˆ„์ˆ˜ log ๋ฉ”์„ธ์ง€๊ฐ€ ๋‚˜์˜ค๊ธฐ ์ „์— connection์„ ๊ฒ€์‚ฌํ•˜์—ฌ pool์—์„œ connection์„ ๋‚ด๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š” ์‹œ๊ฐ„.

* 0์œผ๋กœ ์„ค์ •ํ•˜๋ฉด leak detection์„ ์ด์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
- ์ตœ์†Œ ๊ฐ’: 2000ms
- default: 0

 

MySql ์˜ ๊ฒฝ์šฐ๋Š” ๊ณต์‹ ๋ฌธ์„œ์— ์•„์˜ˆ ์„ฑ๋Šฅ ํŒ์ด ๋ณ„๋„๋กœ ์„ค๋ช…๋˜์–ด ์žˆ๋Š”๋ฐ..

๋‹ค๋ฅธ DB์˜ ๊ฒฝ์šฐ์—๋Š” ์—†๋‹ค..

ํ•œ๊ตญ์˜ ํšŒ์‚ฌ๋“ค์€ ๋Œ€๋ถ€๋ถ„ mssql, oracle ์„ ๋งŽ์ด ์‚ฌ์šฉํ• ํ…๋ฐ ๋ง์ด๋‹ค.

 

๊ทธ๋Ÿฌ๋ฉด ์šฐ๋ฆฌ๋Š” ์–ด๋–ค ์˜ต์…˜๋“ค์„ ์ฒดํฌํ•ด๋ด์•ผ ํ• ๊นŒ?

 

 


์„ฑ๋Šฅ ์ตœ์ ํ™” 

 

1. ์ตœ๋Œ€ ์ปค๋„ฅ์…˜ ๊ฐœ์ˆ˜ - mazimumPoolSize

 

connection pool์ด ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์ปค๋„ฅ์…˜์˜ ๊ฐœ์ˆ˜.

(์‚ฌ์šฉ ์ค‘์ธ Connection๊ณผ ์œ ํœด ์ปค๋„ฅ์…˜์„ ํ•ฉ์นœ ๊ฐ’์„ ์˜๋ฏธํ•จ)

 

์„ค์ •์— ์•ž์„œ. ๋ชฉํ‘œ TPS ๊ฐ’์ด ํ•„์š”.

์ตœ๋Œ€ TPS = 1๊ฐœ์˜ connection์˜ ์ดˆ๋‹น ์ฒ˜๋ฆฌ ์š”์ฒญ ๊ฐœ์ˆ˜ * ๋™์‹œ connection ๊ฐœ์ˆ˜

๋™์‹œ connection ๊ฐœ์ˆ˜
= ์ตœ๋Œ€ TPS / 1๊ฐœ ์ปค๋„ฅ์…˜์˜ ์ดˆ๋‹น ์š”์ฒญ ์ฒ˜๋ฆฌ ๊ฐœ์ˆ˜
= ์ตœ๋Œ€ TPS / (1์ดˆ / ์ฟผ๋ฆฌ ์‹คํ–‰ ์‹œ๊ฐ„)

 

์ตœ๋Œ€ ๊ฐœ์ˆ˜ ๊ณ ๋ ค ์‚ฌํ•ญ

slowQuery(ํ‰๊ท  ์ด์ƒ์œผ๋กœ ์‹คํ–‰ ์‹œ๊ฐ„์ด ํŠ€๋Š” ๊ฐœ์ˆ˜๋‚˜ ๋น„์œจ ๊ฒ€ํ† .) ๋ฅผ ์žก์•„์•ผํ•œ๋‹ค.

 

2. ์ตœ๋Œ€ ์ปค๋„ฅ์…˜ ๋Œ€๊ธฐ ์‹œ๊ฐ„ - ConnectionTimeOut

ํ’€์—์„œ ์ปค๋„ฅ์…˜์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด ๋Œ€๊ธฐํ•˜๋Š” ์‹œ๊ฐ„.

์ตœ๋Œ€ ์ปค๋„ฅ์…˜๋งŒํผ ์‚ฌ์šฉ ์ค‘์— connection์„ ๊ฐ€์ ธ์˜ค๋ ค๊ณ  ํ•  ๋•Œ ๋Œ€๊ธฐํ•˜๋Š” ์‹œ๊ฐ„.

 

๊ธฐ๋ณธ ๊ฐ’์œผ๋กœ ์„ค์ •ํ•ด๋‘๋ฉด 30์ดˆ๋ฅผ ๊ธฐ๋‹ค๋ ค์•ผ ํ•œ๋‹ค.

๋”ฐ๋ผ์„œ ๊ธฐ๋ณธ ๊ฐ’ ๋Œ€์‹ ์— 0.5~3์ดˆ ์ด๋‚ด๋กœ ์„ค์ •ํ•˜๊ณ , ์ฐจ๋ผ๋ฆฌ ์˜ค๋ฅ˜ ํ™”๋ฉด์ด๋ผ๋„ ์‘๋‹ต ์‹œ์ผœ์ฃผ๋Š” ๊ฒŒ ๋‚ซ๋‹ค.

 

3. ์ปค๋„ฅ์…˜ ์ตœ๋Œ€ ์œ ์ง€ ์‹œ๊ฐ„ - maxLifeTime

 

์ปค๋„ฅ์…˜์„ ์ƒ์„ฑํ•œ ์ดํ›„์— ์ด ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ์ปค๋„ฅ์…˜์„ ๋‹ซ๊ณ , ํ’€์—์„œ ์ œ๊ฑฐํ•œ ๋’ค ์ปค๋„ฅ์…˜์„ ์ƒˆ๋กœ ์ƒ์„ฑํ•จ.

๊ธฐ๋ณธ ๊ทœ์น™: ๋„คํŠธ์›Œํฌ๋‚˜ DB ๊ด€๋ จ ์„ค์ • ๊ฐ’๋ณด๋‹ค ์ž‘์€ ๊ฐ’์„ ์‚ฌ์šฉํ•œ๋‹ค.
   - ๋„คํŠธ์›Œํฌ ์žฅ๋น„์˜ ์ตœ๋Œ€ TCP ์ปค๋„ฅ์…˜ ์œ ์ง€ ์‹œ๊ฐ„

 

๋งŒ์•ฝ์— ์ด ๊ฐ’์ด ๊ด€๋ จ ์„ค์ • ๊ฐ’๋ณด๋‹ค ํฌ๋ฉด ์ด๋ฏธ ์œ ํšจํ•˜์ง€ ์•Š์€ ์ปค๋„ฅ์…˜์ด pool์— ๋‚จ๊ฒŒ ๋œ๋‹ค.

์š”์ฒญ์ด ์œ ํšจํ•˜์ง€ ์•Š์€ connection์„ ๋ฐ›์•„์˜ฌ ๊ฒฝ์šฐ ์œ ํšจ์„ฑ ๊ฒ€์ฆ ๊ณผ์ • ์ค‘์— ์ปค๋„ฅ์…˜์„ ์ƒˆ๋กœ ์ƒ์„ฑํ•˜๊ฒŒ ๋˜๊ณ ,

ํŠธ๋ž˜ํ”ฝ์ด ๋ฌผ๋ฆฌ๋Š” ์‹œ์ ์ธ ๊ฒฝ์šฐ ์„ฑ๋Šฅ์ด ์ €ํ•˜ ๋œ๋‹ค.

 

4. ์ปค๋„ฅ์…˜ ํ™•์ธ ์ฃผ๊ธฐ - keepAliveTime

 

์ปค๋„ฅ์…˜์ด ์‚ด์•„์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๋Š” ์ฃผ๊ธฐ

Idle ์ปค๋„ฅ์…˜์— ๋Œ€ํ•ด ์ปค๋„ฅ์…˜ ํ™•์ธ, ์œ ํšจํ•˜์ง€ ์•Š๋Š” ์ปค๋„ฅ์…˜ ํ’€์—์„œ ์ œ๊ฑฐํ•œ ๋’ค ์ปค๋„ฅ์…˜์„ ์ƒˆ๋กœ ์ƒ์„ฑ ...

๊ธฐ๋ณธ ๊ทœ์น™: ๋„คํŠธ์›Œํฌ๋‚˜ DB์˜ ๊ด€๋ จ ์„ค์ • ๊ฐ’๋ณด๋‹ค ์ž‘์€ ๊ฐ’์„ ์‚ฌ์šฉํ•œ๋‹ค.
   - ๋„คํŠธ์›Œํฌ ์žฅ๋น„์˜ ์ตœ๋Œ€ TCP ์ปค๋„ฅ์…˜ ์œ ์ง€ ์‹œ๊ฐ„

 

 

5. ์ตœ์†Œ ์œ ํœด ์ปค๋„ฅ์…˜ - minimumIdle

 

ํ’€์—์„œ ์œ ์ง€ํ•  ์ตœ์†Œ ์œ ํœด ์ปค๋„ฅ์…˜ ๊ฐœ์ˆ˜

๊ธฐ๋ณธ ๊ฐ’์€ maximumPoolSize ์™€ ๋™์ผํ•˜๊ณ  HikatiCP๋Š” ์ด ๊ฐ’์„ ๋ฐ”๊พธ์ง€ ์•Š๋Š” ๊ฒƒ์„ ๊ถŒ์žฅ.

์šฉ๋„๋Š” ํŠธ๋ž˜ํ”ฝ์ด ์ ์€ ์‹œ๊ฐ„๋Œ€์˜ DB ์ž์› ์‚ฌ์šฉ์„ ์ค„์ด๊ธฐ ์œ„ํ•จ์ด๋‹ค.

 


 

์„ฑ๋Šฅ ํ™•์ธ ํˆด์€ jMeter ๋ฅผ ์‚ฌ์šฉํ•˜์˜€๋‹ค..

 

 

Apache JMeter - Apache JMeter™

Apache JMeter™ The Apache JMeter™ application is open source software, a 100% pure Java application designed to load test functional behavior and measure performance. It was originally designed for testing Web Applications but has since expanded to oth

jmeter.apache.org


 

๋ˆ„๊ตฐ๊ฐ€ ๋ณผ ์ฝ”๋“œ๋ฅผ ์œ„ํ•˜์—ฌ... 

์ˆ˜์ •ํ•˜๋ฉด์„œ ์ฃผ์„์„ ์•ผ๊ธˆ์•ผ๊ธˆ ๋‹ฌ์•„๋‘๋„๋ก ํ•˜์ž.

728x90
๋”๋ณด๊ธฐ
BACKEND/SpringBoot