๊ด€๋ฆฌ ๋ฉ”๋‰ด

JiYoung Dev ๐Ÿ–ฅ

DBCP ValidationQuery ์ดํ•ด ๋ฐ ์„ค์ •ํ•˜๊ธฐ ๋ณธ๋ฌธ

Study/Back-End

DBCP ValidationQuery ์ดํ•ด ๋ฐ ์„ค์ •ํ•˜๊ธฐ

Shinjio 2024. 11. 25. 22:01
๋ฐ˜์‘ํ˜•

ํšŒ์‚ฌ ํ™ˆํŽ˜์ด์ง€์˜ ์„œ๋ฒ„๋ฅผ ์ด๊ด€ํ•ด์•ผ ํ•˜๋Š” ์ผ์ด ์ƒ๊ฒผ๋‹ค. ์–ด๋ ค์šด ์ž‘์—…์ด ์•„๋‹ˆ๋ผ ๋ช‡ ์‹œ๊ฐ„ ์žก๊ณ  tomcat ์„œ๋ฒ„๋ฅผ ํ†ต์œผ๋กœ ๋ณต์‚ฌํ•˜๊ณ , Mysql์—์„œ MariaDB๋กœ DB ์ด๊ด€ ์ž‘์—…์„ ์ง„ํ–‰ํ–ˆ๋‹ค. ์ž‘์—…๋“ค์„ ์ง„ํ–‰ํ•œ ํ›„ ํ•ด๋‹น URL๋กœ ์ ‘์†ํ–ˆ์„ ๋•Œ์—๋Š” ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ–ˆ๋Š”๋ฐ, ์‹œ๊ฐ„์ด ํ๋ฅธ ๋’ค ์ ‘์†ํ•˜๋‹ˆ ์•„๋ž˜์™€ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

 

2024-11-21 17:36:19,302 ERROR [egovframework.com.cmm.EgovComOthersExcepHndlr] egovframework.let.cop.bbs.service.impl.EgovBBSManageServiceImpl.selectBoardArticles org.springframework.transaction.CannotCreateTransactionException:
Could not open JDBC Connection for transaction; nested exception is java.sql.SQLNonTransientConnectionException: (conn=43) Connection reset
at org.springframework.jdbc.datasource.DataSourceTransactionManager.doBegin(DataSourceTransactionManager.java:289) ~[spring-jdbc-4.3.16.RELEASE.jar:4.3.16.RELEASE]

 

์ƒˆ๋กœ๊ณ ์นจ์„ ํ•˜๋‹ˆ ๋‹ค์‹œ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ–ˆ๊ณ , ๊ตฌ๊ธ€๋ง ๊ฒฐ๊ณผ DBCP ValidationQuery์™€ ๊ด€๋ จ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์˜ค๋Š˜์€ DBCP ValidationQuery์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ณ  ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค.

 


๐Ÿ”Ž ๋ฐœ์ƒ์›์ธ

๋ฐœ์ƒ ์›์ธ์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”๋กœ ํ•˜๋Š” ๋ช‡๊ฐ€์ง€ ์ด๋ก ์— ๋Œ€ํ•ด ๋จผ์ € ์„ค๋ช…ํ•˜๊ฒ ๋‹ค. 

DBCP(Database Connection Pool)

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

 

๋งŒ์•ฝ ์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ๋งˆ๋‹ค ์ปค๋„ฅ์…˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์—ฐ๊ฒฐํ•˜๊ณ  ์ข…๋ฃŒํ•˜๋Š” ๊ฒƒ์€ ๋น„ํšจ์œจ์ ์ด๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ Connection์„ ๋งบ๋Š” ์ž‘์—… ์ž์ฒด๊ฐ€ ๋งค์šฐ ๋Š๋ฆฌ๋ฉฐ ์ž์›์„ ๋งŽ์ด ์†Œ๋ชจํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ปค๋„ฅ์…˜ํ’€(DBCP)๋ฅผ ํ†ตํ•ด ๊ธฐ์กด pool์— ์กด์žฌํ•˜๋Š” connection์„ ์žฌ์‚ฌ์šฉํ•œ๋‹ค.

 

  • DB Connection ๊ฐ์ฒด๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ์ƒ์„ฑํ•œ ๋’ค Pool์— ๋‹ด์•„ ๋†“๊ณ  ํ•„์š”ํ•  ๋•Œ ๋ถˆ๋Ÿฌ์™€์„œ ์‚ฌ์šฉ
  • ๋งŒ์•ฝ, ๋นŒ๋ ค์ค„ ์ˆ˜ ์žˆ๋Š” Connection์ด ์—†๋‹ค๋ฉด Connection ๊ฐ์ฒด๊ฐ€ ๋ฐ˜ํ™˜ํ•  ๋•Œ๊นŒ์ง€ ํด๋ผ์ด์–ธํŠธ๋Š” ๋Œ€๊ธฐ ์ƒํƒœ๋กœ ์ „ํ™˜
  • ์‚ฌ์šฉ์ด ๋๋‚œ Connection ๊ฐ์ฒด๋Š” ๋‹ค๋ฅธ ์ž‘์—…์—์„œ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋„๋ก Pool์— ๋ฐ˜ํ™˜

 

DBCP ValidationQuery

ValidationQuery๋ž€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ์ด ์œ ํšจํ•œ์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์‹คํ–‰๋˜๋Š” SQL๋ฌธ์ด๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปค๋„ฅ์…˜ ํ’€๋ง ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(Apache Commons DBCP, HikariCP ๋“ฑ)์—์„œ ๊ด€๋ฆฌ๋˜๋Š” ์ปค๋„ฅ์…˜ ๊ฐ์ฒด๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

 

ValidationQuery ์„ค์ •์€ ์„œ๋ฒ„ ํ™˜๊ฒฝ๊ณผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์š”๊ตฌ ์‚ฌํ•ญ์— ๋”ฐ๋ผ ์‚ฌ์šฉ ์—ฌ๋ถ€๊ฐ€ ๋‹ฌ๋ผ์ง€๋‚˜ ๋Œ€๋ถ€๋ถ„์˜ ํ™˜๊ฒฝ์—์„œ๋Š” ValidationQuery๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋‹ค. ValidationQuery ๋Œ€์‹  Keep-Alive ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ•œ๋‹ค.

 

  • ValidationQuery๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ
    • ์œ ํœด ์‹œ๊ฐ„์ด ๊ธด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜: ์•ผ๊ฐ„์— ์œ ํœด ์ƒํƒœ๊ฐ€ ๋งŽ๊ณ , ์•„์นจ์— ํŠธ๋ž˜ํ”ฝ์ด ์ฆ๊ฐ€ํ•˜๋Š” ์„œ๋น„์Šค
    • ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ์ด ์•ˆ์ •์ ์ด์ง€ ์•Š๊ฑฐ๋‚˜ DB ์„œ๋ฒ„๊ฐ€ ๊ฐ„ํ—์ ์œผ๋กœ ์žฌ์‹œ์ž‘๋˜๋Š” ๊ฒฝ์šฐ
    • ๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒฝ์šฐ
    • ๋‹ค์ค‘ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ™˜๊ฒฝ
  • ValidationQuery๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ
    • ValidationQuery๋Š” ์ถ”๊ฐ€ ์ฟผ๋ฆฌ ์‹คํ–‰ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์œ ๋ฐœํ•˜๊ธฐ ๋Œ€๋ฌธ์— ์„ฑ๋Šฅ์ด ์ค‘์š”ํ•œ ๊ฒฝ์šฐ๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ DB๊ฐ€ ๊ฐ™์€ ๋„คํŠธ์›Œํฌ ๋‚ด์—์„œ ๋™์ž‘ํ•˜๋ฉฐ, ์—ฐ๊ฒฐ์ด ์•ˆ์ •์ ์ด๊ณ  ๋ฌธ์ œ๊ฐ€ ๋“œ๋ฏˆ ๊ฒฝ์šฐ ์ƒ๋žต ๊ฐ€๋Šฅ
    • ์ปค๋„ฅ์…˜์ด ์งง์€ ์ฃผ๊ธฐ๋กœ ์žฌํ™œ์šฉ๋˜๊ฑฐ๋‚˜ ์ž์ฃผ ์ƒˆ๋กœ์šด ์ปค๋„ฅ์…˜์ด ์ƒ์„ฑ๋˜๋Š” ๊ฒฝ์šฐ

 

ValidationQuery๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

  • ์œ ํœด ์ปค๋„ฅ์…˜ ๋ฌธ์ œ ํ•ด๊ฒฐ
    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ์ด ์˜ค๋žœ ์‹œ๊ฐ„ ๋™์•ˆ ์‚ฌ์šฉ๋˜์ง€ ์•Š์œผ๋ฉด ๋„คํŠธ์›Œํฌ ๋ฌธ์ œ, DB ์„œ๋ฒ„ ์žฌ์‹œ์ž‘, ์„ธ์…˜ ๋งŒ๋ฃŒ ๋“ฑ์œผ๋กœ ์ธํ•ด ํ•ด๋‹น ์—ฐ๊ฒฐ์ด ๋Š์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ปค๋„ฅ์…˜ ํ’€์€ ์—ฌ์ „ํžˆ ์ด ์—ฐ๊ฒฐ์„ ‘์‚ฌ์šฉ ๊ฐ€๋Šฅ’์œผ๋กœ ๊ฐ„์ฃผํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ์ƒํƒœ์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ์ปค๋„ฅ์…˜์„ ์š”์ฒญํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
  • ์•ˆ์ •์ ์ธ ์—ฐ๊ฒฐ ๋ณด์žฅ
    • ํ’€๋ง๋œ ์—ฐ๊ฒฐ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํ•ญ์ƒ ์ •์ƒ์ ์ธ ์ปค๋„ฅ์…˜๋งŒ ์‚ฌ์šฉํ•˜๋„๋ก ๋ณด์žฅํ•œ๋‹ค.

 

ValidationQuery ์ž‘๋™ ๋ฐฉ์‹

  1. ์ปค๋„ฅ์…˜ ํ’€์—์„œ ์ปค๋„ฅ์…˜์„ ์ œ๊ณตํ•˜๊ธฐ ์ „์— ์„ค์ •๋œ ValidationQuery๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
  2. ์ด ์ฟผ๋ฆฌ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์‹คํ–‰๋˜๋ฉด ํ•ด๋‹น ์ปค๋„ฅ์…˜์€ ‘์œ ํšจ’ํ•œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•œ๋‹ค.
  3. ์‹คํŒจํ•  ๊ฒฝ์šฐ, ํ•ด๋‹น ์ปค๋„ฅ์…˜์€ ํ๊ธฐ๋˜๋ฉฐ ์ƒˆ๋กœ์šด ์ปค๋„ฅ์…˜์„ ์ƒ์„ฑํ•œ๋‹ค.

์œ„์˜ ๋‚ด์šฉ์„ ํ† ๋Œ€๋กœ ์˜ˆ์ธก๋œ ์›์ธ์€ ‘์œ ํœด ์—ฐ๊ฒฐ ๊ด€๋ฆฌ ๋ฌธ์ œ’์ด๋‹ค. ์ผ๋ฐ˜์ ์ธ ํ™˜๊ฒฝ์—์„œ๋Š” ์ž˜ ๋™์ž‘ํ•˜์ง€๋งŒ, ์ผ์ • ์‹œ๊ฐ„์ด ์ง€๋‚˜ ์œ ํœด ์ƒํƒœ๋กœ ์žˆ๋˜ ์—ฐ๊ฒฐ์ด ๋Š์–ด์ง„ ํ›„ ์žฌ์‚ฌ์šฉ์„ ์‹œ๋„ํ•˜๋ฉด์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค.

 

์ด๊ด€ํ•œ ์„œ๋ฒ„๋Š” ์•„์ง ๊ณต๊ฐœ๋œ ์‚ฌ์ดํŠธ๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ์—†๋Š” ๊ด€๊ณ„๋กœ ์œ ํœด์‹œ๊ฐ„์ด 8์‹œ๊ฐ„ ์ด์ƒ์œผ๋กœ ๊ธธ์–ด์ ธ ํ•ด๋‹น ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค. ์ด๋Œ€๋กœ ๋‘์–ด๋„ ํฌ๊ฒŒ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์„ ๊ฒƒ ๊ฐ™์•˜์œผ๋‚˜ ํ˜น์‹œ ์ถ”ํ›„ ์‚ฌ์šฉ์ž ์ ‘์†์ž ์ˆ˜๊ฐ€ 8์‹œ๊ฐ„ ์ด๋‚ด์— ํ•œ ๋ฒˆ๋„ ์•ˆ ๋“ค์–ด์˜ฌ ๊ฐ€๋Šฅ์„ฑ๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ์—๋Ÿฌ๋Š” ํ•ด๊ฒฐํ•˜๊ณ  ๋„˜์–ด๊ฐ€๋Š”๊ฒŒ ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

 

#mysql/mariadb wait timeout ํ™•์ธ
SHOW VARIABLES LIKE 'wait_timeout';

#mysql/mariadb interactive timeout ํ™•์ธ
SHOW VARIABLES LIKE 'interactive_timeout';

 

์ด๊ด€ํ•œ MariaDB์˜ wait_time์€ 8์‹œ๊ฐ„ ์ด์—ˆ๋‹ค.

์ฆ‰, ์ •์ƒ ๋™์ž‘์„ ํ™•์ธํ•œ ํ›„ ํ•˜๋ฃจ ์ด์ƒ ์•„๋ฌด๋Ÿฐ ์ ‘์†์ด ์—†์—ˆ๊ธฐ ๋Œ€๋ฌธ์— ์œ ํœด ์ƒํƒœ๊ฐ€ 8์‹œ๊ฐ„ ์ด์ƒ ์ง€์†๋˜๋ฉด์„œ ์„ธ์…˜์ด ์ข…๋ฃŒ๋œ ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ธฐ์กด ์ปค๋„ฅ์…˜ ํ’€(DBCP)๋Š” ๋Š์–ด์ง„ ์—ฐ๊ฒฐ์„ ์—ฌ์ „ํžˆ ์œ ํšจํ•˜๋‹ค๊ณ  ๊ฐ„์ฃผํ•˜๊ณ  ๋ฐ˜ํ™˜ํ•˜์˜€์œผ๋‚˜, ์‹ค์ œ๋กœ๋Š” ์—ฐ๊ฒฐ์ด ๋Š์–ด์ ธ ์žˆ์–ด Connection reset ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒƒ์ด๋‹ค.

 

wait_timeout vs interactive_timeout

  • wait_timeout
    • ์ ์šฉ ๋Œ€์ƒ: ๋น„๋Œ€ํ™”ํ˜•(non-interactive) ์—ฐ๊ฒฐ
    • ์ผ๋ฐ˜์ ์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‚˜ ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•  ๋•Œ ์‚ฌ์šฉ
  • interactive_timeout
    • ์ ์šฉ ๋Œ€์ƒ: ๋Œ€ํ™”ํ˜•(interactive) ์—ฐ๊ฒฐ
    • ํ„ฐ๋ฏธ๋„ ๊ธฐ๋ฐ˜ ํด๋ผ์ด์–ธํŠธ์—์„œ ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์„ธ์…˜

 

ํ•ญ๋ชฉ wait_timeout interactive_timeout
์ ์šฉ ๋Œ€์ƒ ๋น„๋Œ€ํ™”ํ˜• ์—ฐ๊ฒฐ (์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋“ฑ) ๋Œ€ํ™”ํ˜• ์—ฐ๊ฒฐ (CLI, ํ„ฐ๋ฏธ๋„ ๋“ฑ)
์ฃผ์š” ์˜ˆ JDBC, ODBC, ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค MySQL CLI, MariaDB CLI
์„ค์ • ์šฐ์„ ์ˆœ์œ„ ๋น„๋Œ€ํ™”ํ˜• ํด๋ผ์ด์–ธํŠธ์—๋งŒ ์ ์šฉ ๋Œ€ํ™”ํ˜• ํด๋ผ์ด์–ธํŠธ์—๋งŒ ์ ์šฉ
๊ธฐ๋ณธ๊ฐ’ (MariaDB) 600์ดˆ 28800์ดˆ (8์‹œ๊ฐ„)
๊ธฐ๋ณธ๊ฐ’ (MySQL) 28800์ดˆ (8์‹œ๊ฐ„) 28800์ดˆ (8์‹œ๊ฐ„)

 

  • ์ถ”์ฒœ ์„ค์ •
    • ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋งŽ์„ ๊ฒฝ์šฐ ๋น„๋Œ€ํ™”ํ˜• ์—ฐ๊ฒฐ์˜ ์œ ํœด ํƒ€์ž„์•„์›ƒ์„ ๋‚ฎ์ถฐ ์—ฐ๊ฒฐ ๋‚ญ๋น„๋ฅผ ์ค„์ธ๋‹ค.
    • ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ CLI๋ฅผ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ interactive_timeout์„ ๋” ๊ธธ๊ฒŒ ์„ค์ •ํ•˜์—ฌ ์„ธ์…˜์ด ์ž์ฃผ ๋Š๊ธฐ๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•œ๋‹ค.

๐ŸŽ ํ•ด๊ฒฐ๋ฐฉ์•ˆ

ํ•ด๊ฒฐ๋ฐฉ์•ˆ์€ DB์˜ wait_timeout ์„ค์ •์„ ๋Š˜๋ฆฌ๊ฑฐ๋‚˜ Connection Pool ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์ง„ํ–‰ํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๊ทธ๋Ÿฌ๋‚˜ ์ฒซ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์ธ wiat_timeout์„ 8์‹œ๊ฐ„ ์ด์ƒ์œผ๋กœ ๋Š˜๋ฆฌ๊ฒŒ ๋˜๋ฉด, ์žฅ์‹œ๊ฐ„ ์œ ์ง€๋˜์ง€ ์•Š๋Š” ์—ฐ๊ฒฐ์ด ๋งŽ์„ ๊ฒฝ์šฐ ์‹œ์Šคํ…œ ์ž์›์„ ๋‚ญ๋น„ํ•˜๊ฑฐ๋‚˜ ํŠธ๋ž˜ํ”ฝ์ด ๋ชฐ๋ ธ์„ ๋•Œ ์—ฐ๊ฒฐ ๋ถ€์กฑ ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ wait_timeout ์„ค์ •์€ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ , ValidationQuery ์„ค์ •๊ณผ ๋Š์–ด์ง„ ์—ฐ๊ฒฐ์„ ์ž๋™์œผ๋กœ ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” JDBC ๋“œ๋ผ์ด๋ฒ„์˜ autoRecoonect ์˜ต์…˜์„ ์„ค์ •ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์˜€๋‹ค.

 

DBCP Configuraion validationQuery ์„ค์ • ์ถ”๊ฐ€

<bean id="dataSource-mysql" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="${Globals.DriverClassName}"/>
    <property name="url" value="${Globals.Url}" />
    <property name="username" value="${Globals.UserName}"/>
    <property name="password" value="${Globals.Password}"/>
    <property name="validationQuery" value="select 1"/>
</bean>

 

JDBC ์ž๋™ ์žฌ์—ฐ๊ฒฐ ์˜ต์…˜ ์„ค์ •

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

 

jdbc:mariadb://yourhost:3306/dbname?autoReconnect=true&testOnBorrow=true
์„ค์ • ValidationQuery๋งŒ ์žˆ์Œ ์ž๋™ ์žฌ์—ฐ๊ฒฐ๋งŒ ์žˆ์Œ ๋‘ ์„ค์ • ๋ชจ๋‘ ์žˆ์Œ
๋ชฉ์  ์œ ํœด ์—ฐ๊ฒฐ ์ƒํƒœ ํ™•์ธ ๋Š์–ด์ง„ ์—ฐ๊ฒฐ ๋ณต๊ตฌ ์œ ํœด ์ƒํƒœ ํ™•์ธ + ๋Š์–ด์ง„ ์—ฐ๊ฒฐ ๋ณต๊ตฌ
์—ฐ๊ฒฐ ๋Š๊น€ ๋ณต๊ตฌ ๋Š์–ด์ง„ ์—ฐ๊ฒฐ์„ ํ๊ธฐํ•˜๊ณ  ์ƒˆ ์—ฐ๊ฒฐ ์ƒ์„ฑ ์ž๋™์œผ๋กœ ์ƒˆ ์—ฐ๊ฒฐ ์ƒ์„ฑ ๋Š์–ด์ง„ ์—ฐ๊ฒฐ ์ž๋™ ๋ณต๊ตฌ, ์œ ํšจ์„ฑ ํ™•์ธ ์ถ”๊ฐ€
์˜ค๋ฒ„ํ—ค๋“œ ์ฟผ๋ฆฌ ์˜ค๋ฒ„ํ—ค๋“œ(ValidationQuery ์‹คํ–‰) ์ƒˆ๋กœ์šด ์—ฐ๊ฒฐ ์ƒ์„ฑ ๋น„์šฉ ์ฟผ๋ฆฌ ์˜ค๋ฒ„ํ—ค๋“œ + ์—ฐ๊ฒฐ ์ƒ์„ฑ ๋น„์šฉ
๋ณต๊ตฌ ์†๋„ ๋น„๊ต์  ๋Š๋ฆผ(ValidationQuery ์‹คํŒจ ํ›„ ์ƒˆ๋กœ์šด ์—ฐ๊ฒฐ ์ƒ์„ฑ) ๋น ๋ฆ„(์—ฐ๊ฒฐ ๋Š๊น€ ์‹œ ์ฆ‰์‹œ ๋ณต๊ตฌ) ์ฆ‰์‹œ ๋ณต๊ตฌ + ์œ ํšจ์„ฑ ํ™•์ธ
์ ํ•ฉํ•œ ํ™˜๊ฒฝ ํŠธ๋ž˜ํ”ฝ์ด ๋งŽ๊ณ  ์œ ํœด ์—ฐ๊ฒฐ์ด ์žฆ์€ ํ™˜๊ฒฝ ํŠธ๋ž˜ํ”ฝ์ด ์ ๊ณ  ์—ฐ๊ฒฐ์ด ์žฅ์‹œ๊ฐ„ ์œ ์ง€๋˜๋Š” ํ™˜๊ฒฝ ์•ˆ์ •์„ฑ์ด ๊ฐ€์žฅ ์ค‘์š”ํ•œ ํ™˜๊ฒฝ(ํŠธ๋ž˜ํŒฉ ์ ์Œ, ์œ ํœด ์‹œ๊ฐ„ ๊ธด ๊ฒฝ์šฐ)

 


์ฐธ๊ณ ์ž๋ฃŒ

https://www.leafcats.com/237

https://www.egovframe.go.kr/home/qainfo/qainfoRead.do?menuNo=69&qaId=QA_00000000000021342

https://velog.io/@mooh2jj/์ปค๋„ฅ์…˜-ํ’€Connection-pool์€-์™œ-์“ฐ๋Š”๊ฐ€

๋ฐ˜์‘ํ˜•