๐ DBCP(DataBase Connection Pool)
์๋ ํ์ธ์, ์ด๋ฒ์ ์ ๋ฆฌํ ๋ด์ฉ์ DBCP(๋ฐ์ดํฐ๋ฒ ์ด์ค ์ปค๋ฅ์ ํ) ์ ๋๋ค.
ํด๋ผ์ด์ธํธ์ ์๋ฒ ์ฌ์ด๋์ธ ์น ์ดํ๋ฆฌ์ผ์ด์ ์์, ์ฌ์ฉ์์ ์์ฒญ์ ๋ฐ๋ผ Connection์ด ์์ฑ๋๋ค๋ฉด ์ ๋ง์ ์ฌ์ฉ์๊ฐ ์์ฒญ์ ํ์ ๋ ์๋ฒ์ ๊ณผ๋ถํ๊ฐ ๊ฑธ๋ฆฌ๊ฒ ๋ฉ๋๋ค.
์ด๋ฌํ ์ํฉ์ ์๋ฐฉํ๊ธฐ ์ํด ๋ฏธ๋ฆฌ ์ผ์ ๊ฐฏ์์ Connection์ ๋ง๋ค์ด Pool์ ์ ์ฅ์ ํ๊ณ , ์ฌ์ฉ์์ ์์ฒญ์ด ๋ฐ์ํ๋ฉด Connection์ ์ ๊ณตํ๊ณ ์ฌ์ฉ์์์ ์ฐ๊ฒฐ์ด ์ข ๋ฃ๋๋ค๋ฉด Pool์ ๋ค์ ๋ฐํํ์ฌ ๋ณด๊ดํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์ฆ, Connection Pool์ ๋ํด ์ ๋ฆฌํ์๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ฌ๋ฌ ๊ฐ์ DB Connection์ ํ๋์ Pool์ ๋ชจ์๋๊ณ ๊ด๋ฆฌ
- DB ์ปค๋ฅ์ ๊ฐ์ฒด๋ฅผ ์ฌ๋ฌ ๊ฐ ์์ฑํ ๋ค Pool์ ๋ด์๋๊ณ ํ์ํ ๋ ๋ถ๋ฌ์์ ์ฌ์ฉ
- ๋ง์ฝ, ๋น๋ ค์ค ์ ์๋ Connection์ด ์๋ค๋ฉด Connection ๊ฐ์ฒด๊ฐ ๋ฐํํ ๋ ๊น์ง ํด๋ผ์ด์ธํธ๋ ๋๊ธฐ ์ํ๋ก ์ ํ
- ์ฌ์ฉ์ด ๋๋ ์ปค๋ฅ์ ๊ฐ์ฒด๋ ๋ค๋ฅธ ์์ ์์ ๋ค์ ์ฌ์ฉํ ์ ์๋๋ก Pool์ ๋ฐํ
๐ค ๊ทธ๋ผ, ์ด๋ฌํ DBCP(DataBase Connection Pool)์ ์ ํ์ํ ๊ฑธ๊น์?
์น ์ดํ๋ฆฌ์ผ์ด์ ์ CRUD์ ๊ฐ์ ์์ ์ ์ฒ๋ฆฌํ ๋ ์ฃผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ด์ฉํฉ๋๋ค.
DBMS๋ ๊ธฐํ ์ธ๋ถ์์ ์ ์์ด ๋น๋ฒํ๊ฒ ํ์ํ ์์คํ ์๋ ๋ฐ๋์ ์กด์ฌํด์ผ ํ๋ ๊ธฐ๋ฅ์ธ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ Connection์ ๋งบ๋ ์์ ์ ๋งค์ฐ ๋๋ฆฌ๋ฉฐ ์์์ ๋ง์ด ์๋ชจํ๋ ์์ ์ ๋๋ค.
์ด์ ๊ฐ์ด ์๋ฒ๊ฐ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ์ ์ฐ๊ฒฐ๋์ด Connection์ ๋งบ๋ ์์ ์ ๋น์ฉ์ด ํฐ ๋ถ๋ถ ์ ๋๋ค.
๋ง์ฝ, ๋ค์์ ์ฌ์ฉ์๋ค์ด ๋์๋ค๋ฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ Connection ์ฐ๊ฒฐ์ ์์ฒญํ๋ค๋ฉด ์ต์ ์ ๊ฒฝ์ฐ ์๋ฒ๊ฐ ๋ค์ด์ด ๋ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ์ด๋ฌํ ํฐ ๋น์ฉ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด DBCP๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ ์ฌ์ง๊ณผ ๊ฐ์ด Pool์ ๋ง๋ค์ด์ ๋ฏธ๋ฆฌ ์์ฑํ ์ฌ๋ฌ Connection ๊ฐ์ฒด๋ฅผ ๋ด์๋๊ณ ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ ๋ ๋ง๋ค ํ๋์ฉ ๋น๋ ค์ค๋๋ค.
ํด๋ผ์ด์ธํธ๊ฐ ์ฌ์ฉ์ ๋ง์น ํ์๋ Pool์ ๋ค์ Connection ๊ฐ์ฒด๋ฅผ ๋ฐํํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ทผ ์์ฒญ์ด ์กด์ฌํ๋๋ผ๋
์๋ก์ด Connection ๊ฐ์ฒด๋ฅผ ์์ฑํ ํ์๊ฐ ์์ต๋๋ค.
์์์ ๋ง์๋๋ฆฐ ๋๋ก ๋ค์์ ์ฌ์ฉ์๋ค์ด ๋์๋ค๋ฐ์ ์ผ๋ก ์์ฒญํด์ Pool์ ๋น๋ ค์ค ์ ์๋ ์ปค๋ฅ์ ์ด ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ์๋ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์๊ณ ๋ค๋ฅธ ํด๋ผ์ด์ธํธ๊ฐ ์ปค๋ฅ์ ์ Pool์ ๋ฐํํ ๋๊น์ง ์์ฒญํ ํด๋ผ์ด์ธํธ๋ ๋๊ธฐ์ํ๋ก ์ ํ์ด ๋ฉ๋๋ค.
๊ทธ ํ ๋ค๋ฅธ ํด๋ผ์ด์ธํธ๊ฐ ์ปค๋ฅ์ ์ ๋ฐํํ๋ฉด, ๋๊ธฐ์ํ์ธ ํด๋ผ์ด์ธํธ๊ฐ ํด๋น ์ปค๋ฅ์ ์ ์ฌ์ฉํ๋ ๊ตฌ์กฐ๋ก ๋์ด์์ต๋๋ค.
๐ค DBCP(DataBase Connection Pool)์ ์ต์
์ด์ ๊น์ง DBCP์ ๊ฐ๋ ๊ณผ ๊ตฌ์กฐ, ์ฌ์ฉ ์ด์ ์ ๋ํด ์ดํด๋ณด์์ต๋๋ค.
Apache์ Commons DBCP์ ๊ฒฝ์ฐ ์ค์ ํ ์ ์๋ ์ต์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.(Commons DBCP 1.x ๊ธฐ์ค์ ๋๋ค.)
โป Commons DBCP๋, ์ปค๋ฅ์ ํ ๊ตฌํ์ฒด์ค ๊ฐ์ฅ ๋ง์ด ์ฐ์ด๋ ์คํ์์ค ์ ๋๋ค.
Parameter(๋ฒ์ ) | Default | Description |
initialSize | 0 | ์ต์ด ์ปค๋ฅ์ ์ ๋งบ์ ๋ Connection Pool์ ์์ฑ๋๋ ์ปค๋ฅ์ ์ ๊ฐฏ์ |
maxActive (1.x) maxTotal (2.x) |
8 | ๋์์ ์ฌ์ฉํ ์ ์๋ ์ต๋ ์ปค๋ฅ์ ์ ๊ฐฏ์ |
maxIdle | 8 | Connection Pool์ ๋ฐ๋ฉํ ๋ ์ต๋๋ก ์ ์ง๋ ์ ์๋ ์ปค๋ฅ์ ์ ๊ฐฏ์ |
minIdle | 0 | ์ต์ํ์ผ๋ก ์ ์งํ ์ปค๋ฅ์ ์ ๊ฐฏ์ |
maxWait (1.x) maxWaitMillis (2.x) |
indefinitely | Pool์ด ์์ธ๋ฅผ throwํ๊ธฐ ์ ์ฐ๊ฒฐ์ด ๋ฐํ๋ ๋๊น์ง(์ฌ์ฉ ๊ฐ๋ฅํ Connection ๊ฐ์ฒด๊ฐ ์๋๊ฒฝ์ฐ) ๋๊ธฐํ๋ ์ต๋ ์๊ฐ(ms) ๋๋ ๋ฌดํ ๋๊ธฐ(-1) |
์์ ๊ฐ์ ์ค์ ์ธ์๋ validationQuery, testOnCreate, testOnBorrow, testOnReturn, defaultAutoCommit, defaultReadOnly ๋ฑ๋ฑ ๋ค์ํ ์ค์ ์ด ์กด์ฌํฉ๋๋ค.
๋ค์ํ ์ค์ ์ด ๊ถ๊ธํ์๋ค๋ฉด Apache์ ๊ณต์๋ฌธ์๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์ :)
๐ฏ ์ปค๋ฅ์ ๊ฐฏ์์ ๊ด๋ จ๋ ์์ฑ ๋ฐ ์กฐ๊ฑด
maxActive >= initialSize
- ๋์์ ์ฌ์ฉํ ์ ์๋ ์ต๋ ์ปค๋ฅ์ ์ ๊ฐฏ์(maxActive)๊ฐ 10์ด๊ณ , ์ต์ด ์ปค๋ฅ์ ์ ๋งบ์ ๋ Pool์ ์์ฑ๋๋ ์ปค๋ฅ์ ์ ๊ฐฏ์(initialSize)๊ฐ 20๊ฐ๋ผ๋ฉด, initialSize ๊ฐ์ด ์ต๋ ์ปค๋ฅ์ ๊ฐฏ์์ธ maxActive ๊ฐ๋ณด๋ค ์ปค์ ๋ ผ๋ฆฌ์ ์ผ๋ก ์ค๋ฅ๊ฐ ์๋ ์ค์ ์ ๋๋ค.
maxIdle >= minIdle
- ๋น์ฐํ์ง๋ง ์ต๋๋ก ์ ์งํ ์ปค๋ฅ์ ์ ๊ฐฏ์๊ฐ ์ต์ํ์ผ๋ก ์ ์ง๋ ์ปค๋ฅ์ ์ ๊ฐฏ์๋ณด๋ค ๋ง์์ผ ํฉ๋๋ค.
maxActive = maxIdle
- maxActive์ maxIdle ๊ฐ์ด ๋์ผํ ๊ฒ์ด ์ข์ต๋๋ค. ๋์์ ์ฌ์ฉํ ์ ์๋ ์ต๋ ์ปค๋ฅ์ ์ ๊ฐฏ์(maxActive)๊ฐ 20์ด๊ณ , Pool์ ๋ฐ๋ฉํ ๋ ์ต๋๋ก ์ ์ง๋ ์ ์๋ ์ปค๋ฅ์ ์ ๊ฐฏ์(maxIdle)๊ฐ 10์ด๋ผ๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ์ปค๋ฅ์ ์ ๋์์ 10๊ฐ๋ฅผ ์ฌ์ฉํ๊ณ ์๋์ํฉ์์ 1๊ฐ์ ์ปค๋ฅ์ ์ด ์ถ๊ฐ๋ก ์์ฒญ๋๋ค๋ฉด maxActive = 20์ด๋ฏ๋ก 1๊ฐ์ ์ถ๊ฐ ์ปค๋ฅ์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐํ ํ Pool์ ๋น์ฆ๋์ค ๋ก์ง์ผ๋ก ์ปค๋ฅ์ ์ ์ ๋ฌํฉ๋๋ค. ์ดํ ๋น์ฆ๋์ค ๋ก์ง์ด ์ปค๋ฅ์ ์ ์ฌ์ฉํ ํ Pool์ ๋ฐ๋ฉํ ๊ฒฝ์ฐ, maxIdle = 10์ด๋ฏ๋ก ์ปค๋ฅ์ ์ ์ค์ ๋ก ๋ซ์๋ฒ๋ฆฌ๋ฏ๋ก, ์ผ๋ถ ์ปค๋ฅ์ ์ ๋งค๋ฒ ์์ฑํ๋ค ๋ซ๋ ๋น์ฉ์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
initialSize = maxActive = maxIdle = minIdle
- ์ ๋ค ๊ฐ์ง์ ์ค์ ์ ๋์ผํ ๊ฐ์ผ๋ก ํต์ผํด๋ ๋ฌด๋ฐฉํฉ๋๋ค. ์ปค๋ฅ์ ๊ฐฏ์์ ๊ด๋ จ๋ ๊ฐ์ฅ ์ค์ํ ์ฑ๋ฅ ์์๋ ์ผ๋ฐ์ ์ผ๋ก ์ปค๋ฅ์ ์ ์ต๋ ๊ฐฏ์ ์ ๋๋ค. ๋ฐ๋ผ์ ์ ํญ๋ชฉ์ ์ค์ ๊ฐ ์ฐจ์ด๋ ์ฑ๋ฅ์ ์ข์ฐํ๋ ์ค์ ๋ณ์๋ ์๋๋๋ค.
maxActive
- maxActive์ ๊ฐ์ DBMS์ ์ค์ ๊ณผ ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ ๊ฐฏ์, Apache, Tomcat ๋ฑ์์ ๋์์ ์ฒ๋ฆฌํ ์ ์๋ ์ฌ์ฉ์ ์ ๋ฑ์ ๊ณ ๋ คํด์ ์ค์ ํด์ผ ํฉ๋๋ค. DBMS๊ฐ ์์ฉํ ์ ์๋ ์ปค๋ฅ์ ์ ๊ฐฏ์๋ฅผ ํ์ธํ ํ ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ ์ธ์คํด์ค 1๊ฐ๊ฐ ์ฌ์ฉํ๊ธฐ์ ์ ์ ํ ๊ฐฏ์๋ฅผ ์ค์ ํฉ๋๋ค. ๋ง์ฝ ๋ค์์ ์ฌ์ฉ์๊ฐ ์์ฒญ์ ํ๋ ์ํฉ์์ ์ปค๋ฅ์ ์ ๋ง์ด ์ฌ์ฉํ ๋ maxActive์ ๊ฐ์ด ์ถฉ๋ถํ ํฌ์ง ์๋ค๋ฉด ๋ณ๋ชฉ ์ง์ ์ด ๋ ์ ์์ต๋๋ค. ๋ฐ๋๋ก ์ฌ์ฉ์๊ฐ ์ ์ด์ ์ฌ์ฉ์ค์ธ ์ปค๋ฅ์ ์ด ๋ง์ง ์์ ์์คํ ์์๋ maxActive ๊ฐ์ ์ง๋์น๊ฒ ์๊ฒ ์ค์ ํ์ง ์๋ ํ ์ฑ๋ฅ์๋ ํฐ ์ํฅ์ด ์์ต๋๋ค.
์ด์์ผ๋ก ๊ฐ๋จํ๊ฒ DBCP์ ๋ํด ์์๋ณด์์ต๋๋ค.
์ด๋ก ์ ์ผ๋ก๋ง ์ ๋ฆฌ๋ฅผ ํ์์ผ๋ฉฐ ์ค์ ๋ก๋ DBMS์ ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ์ ์์, ๊ธฐํ ์์ธ ์ํฉ, Tomcat ์ค์ , ์ฌ์ฉ์์ ์์ฒญ, TPS ๋ฑ์ ๊ณ ๋ คํ์ฌ ์ค์ ์ ํด์ผ ํฉ๋๋ค. ํนํ Commons DBCP์ ๊ฐ์ ์ปค๋ฅ์ ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ๊ณผ ์์ ์ฑ์ ์ค์ํ ์ญํ ์ ํ๊ธฐ ๋๋ฌธ์ ์ถฉ๋ถํ ์๊ฐ๊ณผ ๋ ธ๋ ฅ์ ํฌ์ํด์ผ ํ๋ค๊ณ ํฉ๋๋ค.
๋ง์ฝ ์ค๋ฌด์์ ์ ๋ฌด๋ฅผ ์งํํ๋ฉฐ ์ง์ ์ ์ผ๋ก DBCP์ ์ค์ ์ ์๋์ผ ํ ์ผ์ด ๋ฐ์ํ๋ค๋ฉด, ์ข ๋ ์์ธํ ์ ๋ฆฌํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
Commons DBCP์ ๋ํ ์์ธํ ์ ๋ฆฌ๋ ๋ค์ ํฌ์คํ ์ ์ถ์ฒ๋๋ฆฝ๋๋ค.
https://d2.naver.com/helloworld/5102792
References
'CS > Database' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring Data MongoDB] Auto-Increment Sequence ๋ง๋ค๊ธฐ (0) | 2021.09.10 |
---|---|
[MySQL] - ํธ๋์ญ์ ์ ๊ฒฉ๋ฆฌ ์์ค(Isolation level) (11) | 2021.09.05 |
์ฌ์ฉ์๊ฐ ๊ฒ์๋ฌผ์ ์์ฑํ ๋์ ํธ๋์ญ์ ์ฒ๋ฆฌ (6) | 2021.08.05 |
MongoDB CRUD(์์ฑ, ์กฐํ, ์์ , ์ญ์ ) ์ฟผ๋ฆฌ๋ฌธ (0) | 2021.07.26 |
MongoDB, compass(MongoDB GUI Client) ์ค์นํ๊ธฐ(MacOS) (0) | 2021.07.21 |
๋๊ธ