๐Ÿ“š ์ปค๋„ฅ์…˜ ํ’€(Connection Pool) ๊ณผ ๋ฐ์ดํ„ฐ ์†Œ์Šค(DataSource)

CodeByHanยท2025๋…„ 4์›” 4์ผ

์Šคํ”„๋ง

๋ชฉ๋ก ๋ณด๊ธฐ
17/33

์ปค๋„ฅ์…˜ ํ’€(Connection Pool)์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

DB ์ปค๋„ฅ์…˜์„ ํš๋“ํ•  ๋•Œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ณต์žกํ•œ ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค.

  1. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง์€ DB ๋“œ๋ผ์ด๋ฒ„๋ฅผ ํ†ตํ•ด ์ปค๋„ฅ์…˜ ์กฐํšŒ
  2. DB ๋“œ๋ผ์ด๋ฒ„๋Š” DB ์™€ TCP/IP ์ปค๋„ฅ์…˜์„ ์—ฐ๊ฒฐ(3-way-handShaking)
  3. DB ๋“œ๋ผ์ด๋ฒ„๋Š” TCP/IP ์ปค๋„ฅ์…˜์ด ์—ฐ๊ฒฐ๋˜๋ฉด, ID,PW์™€ ๊ธฐํƒ€ ๋ถ€๊ฐ€์ •๋ณด๋ฅผ DB์— ์ „๋‹ฌ
  4. DB๋Š” ID,PW๋ฅผ ํ†ตํ•ด ๋‚ด๋ถ€ ์ธ์ฆ์„ ์™„๋ฃŒํ•˜๊ณ ,๋‚ด๋ถ€์— DB ์„ธ์…˜ ์ƒ์„ฑ
  5. DB๋Š” ์ปค๋„ฅ์…˜ ์ƒ์„ฑ ์™„๋ฃŒ ์‘๋‹ต ์ „์†ก
  6. DB ๋“œ๋ผ์ด๋ฒ„๋Š” ์ปค๋„ฅ์…˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์„œ ํด๋ผ์ด์–ธํŠธ์— ๋ฐ˜ํ™˜

๐Ÿ’ข ์ƒ๋‹นํžˆ ๋ณต์žกํ•˜๊ณ  ์‹œ๊ฐ„๋„ ์˜ค๋ž˜๊ฑธ๋ฆฐ๋‹ค. ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์•„์ด๋””์–ด๊ฐ€ ๋ฐ”๋กœ ์ปค๋„ฅ์…˜์„ ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•ด๋‘๊ณ  ์‚ฌ์šฉํ•˜๋Š” ์ปค๋„ฅ์…˜ ํ’€(Connection Pool)!! ์ปค๋„ฅ์…˜ ํ’€์€ ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ์ปค๋„ฅ์…˜(Connection)์„ ๊ด€๋ฆฌํ•˜๋Š” ํ’€(Pool)์„ ์ƒ์ƒ!!ํ•˜๋ฉด ๋œ๋‹ค.

DB ์ปค๋„ฅ์…˜์„ ๊ณ„์† ์ƒ์„ฑํ•˜๋Š” ์ด์œ ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ์—ฐ๊ฒฐ์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ปค๋„ฅ์…˜ ํ’€(Connection Pool) ์‚ฌ์šฉ

1) ์ปค๋„ฅ์…˜ ํ’€(Connection Pool) ์ดˆ๊ธฐํ™”

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹œ์ž‘ํ•˜๋Š” ์‹œ์ ์—, ์ปค๋„ฅ์…˜ ํ’€(Connection Pool)์€ ํ•„์š”ํ•œ ๋งŒํผ ์ปค๋„ฅ์…˜์„ ๋ฏธ๋ฆฌ ํ™•๋ณดํ•ด์„œ ํ’€์— ๋ณด๊ด€(๊ธฐ๋ณธ๊ฐ’์€ ๋ณดํ†ต 10๊ฐœ)

2) ์ปค๋„ฅ์…˜ ํ’€์˜ ์—ฐ๊ฒฐ ์ƒํƒœ

  • ์ปค๋„ฅ์…˜ ํ’€์— ๋“ค์–ด ์žˆ๋Š” ์ปค๋„ฅ์…˜์€ TCP/IP๋กœ DB์™€ ์ปค๋„ฅ์…˜์ด ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ์ƒํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์— ์–ธ์ œ๋“ ์ง€ ์ฆ‰์‹œ SQL์„ DB์— ์ „๋‹ฌ ๊ฐ€๋Šฅ

3) ์ปค๋„ฅ์…˜ ํ’€ ์‚ฌ์šฉ1

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง์—์„œ ์ด์ œ๋Š” DB ๋“œ๋ผ์ด๋ฒ„๋ฅผ ํ†ตํ•ด์„œ ์ƒˆ๋กœ์šด ์ปค๋„ฅ์…˜์„ ํš๋“ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹˜
  • ์ด์ œ ์ปค๋„ฅ์…˜ ํ’€(Connection Pool)์„ ํ†ตํ•ด ์ด๋ฏธ ์ƒ์„ฑ๋˜์–ด์žˆ๋Š” ์ปค๋„ฅ์…˜์„ ๊ฐ€์ ธ๋‹ค ์“ด๋‹ค.
  • ์ปค๋„ฅ์…˜์„ ์š”์ฒญํ•˜๋ฉด ์ปค๋„ฅ์…˜ ํ’€์€ ์ž์‹ ์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ปค๋„ฅ์…˜ ์ค‘์— ํ•˜๋‚˜๋ฅผ ๋ฐ˜ํ™˜

4) ์ปค๋„ฅ์…˜ ํ’€ ์‚ฌ์šฉ2

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง์€ ์ปค๋„ฅ์…˜ ํ’€์—์„œ ๋ฐ›์€ ์ปค๋„ฅ์…˜์„ ์‚ฌ์šฉํ•ด์„œ SQL์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ „๋‹ฌํ•˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌ
  • ์ปค๋„ฅ์…˜์„ ๋ชจ๋‘ ์‚ฌ์šฉํ•˜๋ฉด ์ปค๋„ฅ์…˜์„ ์ข…๋ฃŒํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ๋‹ค์‹œ ์ปค๋„ฅ์…˜ ํ’€์— ๋ฐ˜ํ™˜, ์ปค๋„ฅ์…˜์„ ์ข…๋ฃŒํ•˜๋ฉด ์•ˆ๋˜๊ณ  ์ปค๋„ฅ์…˜์ด ์‚ด์•„์žˆ๋Š” ์ƒํƒœ๋กœ ๋ฐ˜ํ™˜

๋Œ€ํ‘œ์ ์ธ ์ปค๋„ฅ์…˜ ํ’€ ์˜คํ”ˆ์†Œ์Šค๋Š” commons-dbcp2 ,tomcat-jdbc pool ,HikariCP ๋“ฑ์ด ์žˆ๊ณ  ์ฃผ๋กœ HikariCP ์‚ฌ์šฉ

์Šคํ”„๋ง์—์„œ๋Š” spring-boot-starter-jdbc ๋˜๋Š” spring-boot-starter-data-jpa ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ HikariCP์— ๋Œ€ํ•œ ์˜์กด์„ฑ์ด ์ž๋™์œผ๋กœ ์ถ”๊ฐ€

๋ฐ์ดํ„ฐ์†Œ์Šค(DataSource)

์ปค๋„ฅ์…˜์„ ์–ป๋Š” ๋ฐฉ๋ฒ•์€ JDBC DriverManager๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ์ปค๋„ฅ์…˜ ํ’€์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ• ์กด์žฌ

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง์—์„œ DriverManager ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ปค๋„ฅ์…˜์„ ํš๋“ํ•˜๋‹ค๊ฐ€ HikariCP ๊ฐ™์€ ์ปค๋„ฅ
    ์…˜ ํ’€์„ ์‚ฌ์šฉํ•˜๋„๋ก ๋ณ€๊ฒฝํ•˜๋ฉด ์ปค๋„ฅ์…˜์„ ํš๋“ํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ๋„ ํ•จ๊ป˜ ๋ณ€๊ฒฝ ํ•ด์•ผํ•œ๋‹ค๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

  • ๊ทธ๋Ÿฌํ•˜์—ฌ javax.sql.DataSource ๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ž๋ฐ”์—์„œ ์ œ๊ณตํ•ด์ค€๋‹ค.
  • DataSource ๋Š” ์ปค๋„ฅ์…˜์„ ํš๋“ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ถ”์ƒํ™” ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค
  • ์ด ์ธํ„ฐํŽ˜์ด์Šค์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์€ ์ปค๋„ฅ์…˜ ์กฐํšŒ
public interface DataSource {
Connection getConnection() throws SQLException;

๋Œ€๋ถ€๋ถ„์˜ ์ปค๋„ฅ์…˜ ํ’€ ๊ตฌํ˜„์ฒด๋“ค์€ javax.sql.DataSource ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ, ์ปค๋„ฅ์…˜ ํ’€์„ ํ†ตํ•ด ์ปค๋„ฅ์…˜์„ ์ œ๊ณต

์ฐธ๊ณ  :

profile
๋…ธ๋ ฅ์€ ๋ฐฐ์‹ ํ•˜์ง€ ์•Š์•„ ๐Ÿ”ฅ

0๊ฐœ์˜ ๋Œ“๊ธ€