| Title | DBCP |
|---|---|
| Category | DB |
| Author | Jung |
๋ฏธ๋ฆฌ ์ผ์ ๊ฐฏ์์ Connection์ ๋ง๋ค์ด Pool์ ์ ์ฅ ํ๊ณ ,
์ฌ์ฉ์์ ์์ฒญ์ด ๋ฐ์ํ๋ฉด Connection์ ์ ๊ณต ํ ๋ค
์ฌ์ฉ์์ ์ฐ๊ฒฐ์ด ์ข ๋ฃ๋๋ค๋ฉด Pool์ ๋ค์ ๋ฐํํ์ฌ ๋ณด๊ดํฉ๋๋ค.
Connection Pool์ ์ฌ์ฉํ์ง ์๊ณ
์ฌ์ฉ์์ ์์ฒญ์ ๋ฐ๋ผ Connection์ด ์์ฑ๋๊ณ ์ฐ๊ฒฐ์ ํด์ ํ๋ค๋ฉด
์ ๋ง์ ์ฌ์ฉ์๊ฐ ์์ฒญํ ๊ฒฝ์ฐ ์๋ฒ์ ๊ณผ๋ถํ๊ฐ ์๊ธธ ์ ์๋ค.
- Connection์ ๊ฐ์ฒด์์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฐจ์งํ๋ค.
- ์ฆ, ์์ฒญ๋๋น ๋๋ฌด ๋ง์ ๊ฐ์๋ฅผ ์ค์ ํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๊ฐ ๋ฐ์ํ ์ ์๋ค.
- ์ ๋นํ ์ปค๋ฅ์ ์ ๊ฐ์๋ฅผ ์ค์ ํ๊ณ , ์์์ ํจ์จ์ ์ผ๋ก ์จ์ผํ๋ค!
-
- DB ์๋ฒ ์ ์์ ์ํด JDBC ๋๋ผ์ด๋ฒ ๋ก๋
-
- DB ์ ์ ์ ๋ณด์ DriverManager.getConnection()์ ํตํด DB Connection ๊ฐ์ฒด ์ป๊ธฐ
-
- Connection ๊ฐ์ฒด๋ก ๋ถํฐ ์ฟผ๋ฆฌ ์ํํ๊ธฐ ์ํด PreparedStatement ๊ฐ์ฒด ๋ฐ๊ธฐ
-
- executeQuery๋ฅผ ์ํํ์ฌ ๊ทธ๊ฒฐ๊ณ ๋ก ResultSet ๊ฐ์ฒด ๋ฐ์์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ
-
- ์ฒ๋ฆฌ ์๋ฃํ ์ฌ์ฉํ ๋ฆฌ์์ค๋ฅผ close ํ์ฌ ๋ฐํ
| DBCP |
|---|
![]() |
- WAS๊ฐ ์คํ๋๋ฉด์ ๋ฏธ๋ฆฌ ์ผ์ ๋์ DB Connection ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ Pool์ ์ ์ฅ
- HTTP ์์ฒญ์ ๋ฐ๋ผ ํ์ํ ๋ Pool์์ Connection ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ๋ค ์ฐ๊ณ ๋ฐํ
- ์ฆ HTTP ์์ฒญ๋ง๋ค DB Driver๋ฅผ ๋ก๋ํ๊ณ ๋ฌผ๋ฆฌ์ ์ฐ๊ฒฐ์ ์ํ Connection ๊ฐ์ฒด ์์ฑ ๋น์ฉ ๊ฐ์
| Connection pool value |
|---|
![]() |
| value | description |
|---|---|
| maxActive | ๋์์ ์ฌ์ฉํ ์ ์๋ ์ต๋ ์ปค๋ฅ์ ๊ฐ์ |
| maxIdle | ์ปค๋ฅ์ ํ์ ๋ฐ๋ฉํ ๋ ์ต๋๋ก ์ ์ง๋ ์ ์๋ ์ปค๋ฅ์ ๊ฐ์ |
| minIdle | ์ต์ํ์ผ๋ก ์ ์งํ ์ปค๋ฅ์ ๊ฐ์ |
| InitialSize | ์ต์ด๋ก getConnection()์ ํตํด ์ปค๋ฅ์ ํ์ ์ฑ์ ๋ฃ์ ์ปค๋ฅ์ ๊ฐ์ |
- maxActive >= InitialSize
- ์ต๋ ์ปค๋ฅ์ ๊ฐ์๋ ์ด๊ธฐ์ ์์ฑํ ์ปค๋ฅ์ ๊ฐ์์ ๊ฐ๊ฑฐ๋ ํฌ๊ฒ ์ค์
- maxActive = maxIdle
- ์์)
- maxActive = 10
- maxIdle = 5
- ํญ์ ์ปค๋ฅ์ ์ ๋์์ 5๊ฐ ์ฌ์ฉํ๊ณ ์๋ ์ํฉ์์ 1๊ฐ์ ์ปค๋ฅ์ ์ด ์ถ๊ฐ๋ ์์ฒญ ๋ ๊ฒฝ์ฐ
- maxActive๊ฐ 10์์ผ๋ก 1๊ฐ์ ์ถ๊ฐ ์ปค๋ฅ์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐํ ํ Pool์ ๋น์ฆ๋์ค ๋ก์ง์ผ๋ก ์ปค๋ฅ์ ์ ๋ฌ
- ์ดํ ๋น์ฆ๋์ค ๋ก์ง์ด ์ปค๋ฅ์ ์ ์ฌ์ฉ ํ ํ์ ๋ฐ๋ฉํ ๊ฒฝ์ฐ, maxIdle = 5์ ์ํฅ์ ๋ฐ์
- ์ปค๋ฅ์ ์ ์ค์ ๋ก ๋ซ์๋ฒ๋ฆฌ๊ฒ ๋์ด, ์ผ๋ถ ์ปค๋ฅ์ ์ด ์์ฑ๋๊ณ ๋ซ๋ ๋น์ฉ ๋ฐ์ ๊ฐ๋ฅ
- ์์)
- ์ฌ์ฉ์์ ์์ฒญ ๋ฐ์์ Pool์์ Connection ๊ฐ์ฒด ๊ฐ์ ธ์ด
- Connection์ ์ฌ์ฉํด DB ์์ ์ํ
- ์ฌ์ฉ์ด ๋๋ Connection์ Pool์ ๋ฐํ
- Pool์ ๋น๋ ค์ค ์ ์๋ ์ปค๋ฅ์ ์ด ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ error๊ฐ ๋ฐ์ํ์ง ์๊ณ ๋ค๋ฅธ ํด๋ผ์ด์ธํธ๊ฐ ์ปค๋ฅ์ ์ ๋ฐํํ ๋๊น์ง ์์ฒญํ ํด๋ผ์ด์ธํธ๋ ๋๊ธฐ ์ํ
- ๊ทธ ํ ๋ค๋ฅธ ํด๋ผ์ด์ธํธ๊ฐ ์ปค๋ฅ์ ๋ฐํํ๋ฉด, ๋๊ธฐ ์ํ์ธ ํด๋ผ์ด์ธํธ๊ฐ ์ปค๋ฅ์ ์ ์ฌ์ฉํ๋ ๊ตฌ์กฐ
-
๋๋ฌด ๋ง์ ์ปค๋ฅ์ ์ pool์ ์ฌ์ ์ ์์ฑํ ๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๊ฐ ์๊ธธ ์ ์๋ค.
-
๋๋ฌด ์ ์ ์ปค๋ฅ์ ์ ์์ฑํ ๊ฒฝ์ฐ ๋์ ์ ์์๊ฐ ๋ง์ ๋, ํด๋ผ์ด์ธํธ์ ๋๊ธฐ์๊ฐ์ด ๊ธธ์ด์ง ์ ์๋ค.
-
Hikari Cp
- connections = (core_count) * 2) + effective_spinidle_count
- core_count * 2
- ์ปจํ ์คํธ ์ค์์นญ ๋ฐ disk I/O์ ๊ด๋ จ
- ์ปจํ ์คํธ ์ค์์นญ์ผ๋ก ์ธํ ์ค๋ฒํค๋๋ฅผ ๊ณ ๋ คํ๋๋ผ๋ DB์์ DISK/IO๋ณด๋ค CPU ์๋๊ฐ ์๋ฑํ ๋น ๋ฅด๋ค
- ๋ฐ๋ผ์ Thread๊ฐ Disk์ ๊ฐ์ ์์ ์์ ๋ธ๋ผํน ๋๋ ์๊ฐ์ ๋ฐ๋ฅธ Thread์ ์์ ์ ์ฒ๋ฆฌํ ์ ์๋ ์ฌ์ ๊ฐ ์๊ธฐ๊ณ ,
- ์ฌ์ ์ ๋์ ๋ฐ๋ผ ๋ฉํฐ ์ฐ๋ ๋ฉ ์์ ์ํ ๊ฐ๋ฅ
- effective_spinidle_count๋ DB ์๋ฒ๊ฐ ๊ด๋ฆฌํ ์ ์๋ ๋์ IO ์์ฒญ
- ํ๋ ๋์คํฌ ํ๋๋ spinidle ํ๋๋ฅผ ๊ฐ๋๋ค.
- ๋์คํฌ๊ฐ 16๊ฐ ์ผ๊ฒฝ์ฐ ์์คํ ์ ๋์์ 16๊ฐ์ io ์์ฒญ ์ฒ๋ฆฌ ๊ฐ๋ฅ
-
tomcat-jdbc-pool
- tomcat ๋ด์ฅ
- Apache Commons DBCP ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐํ์ผ๋ก ๊ตฌํ
- Spring boot 2.0.0 ํ์ ๋ฒ์ ์์ ์ฌ์ฉํ๋ ๊ธฐ๋ณธ DBCP
-
HikariCP
- Spring boot 2.0๋ถํฐ default Jdbc connection pool
- zero-overhead
- ์ด๋ค ์์ฒญ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ๋ค์ด๊ฐ๋ ๊ฐ์ ์ ์ธ ์ฒ๋ฆฌ ์๊ฐ ๋ฐ ๋ฉ๋ชจ๋ฆฌ

