Backend๐Ÿ–ฅ๏ธ/DB, SQL๐Ÿ›ข๏ธ

[SQL] Connection Pool์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€

JanuDev 2025. 11. 26. 15:11

์ด๋ฒˆ์— Supabase๋ฅผ ๊ฐœ๋ฐœํ•˜๋ฉด์„œ, connection pool์ด ์‚ฌ์šฉ๋Ÿ‰์„ ๋„˜์–ด์„œ DB๊ฐ€ ๊ณผ๋ถ€ํ•˜๋กœ ํญ๋ฐœํ•œ ์ ์ด ์žˆ์—ˆ๋‹ค. 

๊ทธ๋ž˜์„œ connection pool์„ ๊ธฐ๋ณธ 15์—์„œ 30์œผ๋กœ ๋Š˜๋ ธ๋”๋‹ˆ ๊ดœ์ฐฎ์•„ ์กŒ๋Š”๋ฐ...connection pool์ด ์ •ํ™•ํ•˜๊ฒŒ ๋ญ”์ง€ ์•Œ์•„๋ณด์ž.

(์ž๊พธ Connection Poop๋ผ๊ณ  ์“ฐ๊ฒŒ๋จ;)

1. Connection Pool์ด๋ž€

DB Connection์ด๋ž€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„๊ฐ€ ์„œ๋กœ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” '์—ฐ๊ฒฐ ํ†ต๋กœ'์ด๋‹ค. DB์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด, DriveManager ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ Connection ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค. ์ด ํ†ต๋กœ๋ฅผ ํ†ตํ•ด SQL์„ ๋ณด๋‚ด๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋„คํŠธ์›Œํฌ๋กœ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ณดํ†ต Connection ๊ฐ์ฒด ํ•˜๋‚˜๊ฐ€ ํ•˜๋‚˜์˜ ํŠธ๋ž™์žญ์…˜ ๋‹จ์œ„๋ฅผ ๋‹ด๋‹นํ•˜๊ฒŒ ๋œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ DB๋ฅผ ์—ฐ๊ฒฐํ• ๋•Œ๋งˆ๋‹ค Connection ๊ฐ์ฒด๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค๋ฉด ๋น„ํšจ์œจ์ ์ด๋ฏ€๋กœ DB Connection Pool์—์„œ ๊ด€๋ฆฌํ•˜๊ฒŒ ๋œ๋‹ค.

์ปค๋„ฅ์…˜ ํ’€(Connection Pool)์€ ์ด๋Ÿฌํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ์—ฐ๊ฒฐ์„ ๋ฏธ๋ฆฌ ์—ฌ๋Ÿฌ๊ฐœ ๋งŒ๋“ค๊ณ , ์š”์ฒญ์ด ์˜ฌ ๋•Œ ๋งˆ๋‹ค ์—ฐ๊ฒฐ๋“ค์„ ์žฌ์‚ฌ์šฉํ•˜๋„๋ก ๊ด€๋ฆฌํ•˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค. ๋”ฐ๋ผ์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ์˜ '์บ์‹œ'๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๊ฒ ๋‹ค.

 

2. Connection Pool์˜ ์›๋ฆฌ

๊ฐ ํŠธ๋žœ์žญ์…˜๋งˆ๋‹ค connection์ด ์žˆ๋‹ค

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

[์„œ๋ฒ„] --- ์š”์ฒญ ---โ–ถ [Connection Pool] --- ์—ฐ๊ฒฐ ๊บผ๋ƒ„ ---> [DB]
                                    โ”‚
                                    โ””--- ์—ฐ๊ฒฐ ๋ฐ˜ํ™˜ ---โ”˜
  1. ์„œ๋ฒ„๊ฐ€ DB์— ์ฟผ๋ฆฌ๋ฅผ ๋‚ ๋ฆฌ๊ณ  ์‹ถ์œผ๋ฉด — ํ’€์—์„œ ๋†€๊ณ  ์žˆ๋Š” ์—ฐ๊ฒฐ ๊ฐ์ฒด(=Connection) ๊ฐ์ฒด๋ฅผ ํ•˜๋‚˜ ๊ฐ€์ ธ์˜ด
  2. ์ฟผ๋ฆฌ ์‹คํ–‰ ํ›„ ๋‹ค์‹œ ๊ทธ ์—ฐ๊ฒฐ์„ Pool์— ๋ฐ˜ํ™˜
  3. ์—ฐ๊ฒฐ์ด ๋‚จ์•„ ์žˆ์œผ๋ฉด ๋‹ค์Œ ์š”์ฒญ์—๋„ ์ƒˆ ์—ฐ๊ฒฐ ์ƒ์„ฑ ์—†์ด ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ

โœ… ์ฃผ์š” ์›๋ฆฌ

  • ์ตœ์†Œ ์—ฐ๊ฒฐ(min pool size) : ์‹œ์ž‘ํ•  ๋•Œ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด๋‘๋Š” ์—ฐ๊ฒฐ ์ˆ˜
  • ์ตœ๋Œ€ ์—ฐ๊ฒฐ(max pool size) : ๋™์‹œ์— ํ’€์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์—ฐ๊ฒฐ ์ˆ˜
  • Idle timeout : ์ผ์ •์‹œ๊ฐ„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ์—ฐ๊ฒฐ์„ ์ •๋ฆฌ

์ฆ‰ ํ’€์€ ์—ฐ๊ฒฐ์„ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด๋‘๊ณ  ์žฌํ™œ์šฉํ•ด์„œ ์„ฑ๋Šฅ์„ ๋†’์ด๊ณ , ๋™์‹œ์— ๋„ˆ๋ฌด ๋งŽ์€ ์—ฐ๊ฒฐ์ด ์ƒ๊ธฐ๋Š” ๊ฒƒ์„ ์ตœ๋Œ€๊ฐ’์œผ๋กœ ์ œํ•œํ•œ๋‹ค. 

์„ค๋ช…์„ ๋“ค์„์ˆ˜๋ก ์ด ๊ทธ๋ฆผ์ด ๊ทธ๋ ค์ง€๋Š”๋ฐ...?

โœ… ๊ฐœ๋ฐœ ์ค‘ ๋‚œ ์™œ ์˜ค๋ฅ˜๊ฐ€ ๋‚ฌ์—ˆ๋Š”๊ฐ€

๊ฐœ๋ฐœ์„ ํ•  ๋•Œ backend์„œ๋ฒ„๋ฅผ ์ข…๋ฃŒํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ API๋ฅผ ์š”์ฒญํ•˜๋Š” ๋กœ์ง์„ ์ฃผ์„์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๊ณ  ๋ฐ˜๋ณตํ•˜๋ฉด ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋‹ค์‹œ ๋ Œ๋”๋ง ๋  ๋•Œ ๋งˆ๋‹ค API์š”์ฒญ์ด ์ž๋™์œผ๋กœ ๋‚ ์•„๊ฐˆ ๊ฒƒ์ด๋‹ค. ์š”์ฒญ์ด ๊ณ„์† ์Œ“์ด๋ฉด, ๊ธฐ์กด ์ธ์Šคํ„ด์Šค๊ฐ€ ์ •๋ฆฌ๋˜์ง€ ์•Š์€ ์ฑ„ ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ฐœ์ƒํ•ด์„œ ์„œ๋ฒ„์—์„œ DB์—ฐ๊ฒฐ์„ ๊ฐ€์ ธ์˜ค๋Š” ๊ณผ์ •๋„ ๋ฐ˜๋ณต + ์ƒˆ DB ์ปค๋„ฅ์…˜๋งŒ ์ƒ์„ฑํ•ด์„œ ๋ฐ˜ํ™˜• ์ข…๋ฃŒ๊ฐ€ ์ œ๋Œ€๋กœ ๋˜์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค.

ํ’€์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์—ฐ๊ฒฐ์ˆ˜ ์ตœ๋Œ€๊ฐ’(max pool size)๋งŒํผ๋งŒ ๋™์‹œ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•œ๋ฐ, ๋งŒ์•ฝ ๋™์‹œ ์š”์ฒญ์ด ๋ชฐ๋ฆฌ๊ฑฐ๋‚˜ ์—ฐ๊ฒฐ์„ releaseํ•˜์ง€ ์•Š๊ณ  ๊ณ„์† ์Œ“์œผ๋ฉด ํ’€ ์ตœ๋Œ€๊ฐ’์ด ์ดˆ๊ณผํ•˜์—ฌ Connection Pool Maximize ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. 

๋”ฐ๋ผ์„œ ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ ์กฐ๊ฑด์„ ๋ฐ˜๋“œ์‹œ ๋‹ฌ์•„์ค˜์•ผ ํ•œ๋‹ค. 

โœ… ๊ฐœ์ˆ˜๋ฅผ ๋Š˜๋ ธ์„ ๋•Œ ์„œ๋ฒ„ ์˜ค๋ฅ˜๊ฐ€ ํ•ด๊ฒฐ๋˜๋Š” ์ด์œ 

๊ธฐ์กด์— 15 → 30์œผ๋กœ ๋Š˜๋ ธ์„ ๋•Œ ์˜ค๋ฅ˜๊ฐ€ ํ•ด๊ฒฐ๋ฌ์—ˆ๋Š”๋ฐ, ํŠน์ • ์ˆœ๊ฐ„์— 15๊ฐœ์˜ ์š”์ฒญ์ด ๋ชฐ๋ฆฌ๋‹ค๊ฐ€ 16๋ฒˆ์งธ ์š”์ฒญ๋ถ€ํ„ฐ ์—ฐ๊ฒฐ์ด ํ’€์— ๋ฐ˜๋‚ฉ๋  ๋•Œ ๊นŒ์ง€ ๋Œ€๊ธฐํ•˜๊ฒŒ ๋œ๋‹ค. ์ด ๋Œ€๊ธฐ์‹œ๊ฐ„์ด ์„ค์ •๋œ ์ œํ•œ ์‹œ๊ฐ„(Timeout)์„ ์ดˆ๊ณผํ•˜๊ฒŒ ๋˜๋ฉด ์ •์ƒ์ ์ธ ์‘๋‹ต์„ ํ•˜์ง€ ๋ชปํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ 30๊ฐœ๋กœ ๋Š˜๋ฆฌ๋ฉด์„œ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” DB์˜ ํ•œ๊ณ„๊ฐ€ ๋Š˜์–ด๋‚˜๊ฒŒ ๋˜์–ด ๋Œ€๊ธฐ ์—†์ด ์—ฐ๊ฒฐ์„ ์ฆ‰์‹œ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฌ๊ณ , ์—ฐ๊ฒฐ ๋ถ€์กฑ์œผ๋กœ ์ธํ•œ ์˜ค๋ฅ˜๊ฐ€ ์‚ฌ๋ผ์ง€๊ฒŒ ๋œ ๊ฒƒ์ด๋‹ค.

 

3. Connection Pool์˜ ์žฅ๋‹จ์ 

1๏ธโƒฃ ์žฅ์ 

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

2๏ธโƒฃ ๋‹จ์ 

  • ํŠœ๋‹ ํ•„์š” : ํ’€ ํฌ๊ธฐ(์ตœ์†Œ, ์ตœ๋Œ€), ํƒ€์ž„์•„์›ƒ ๋“ฑ์„ ์„œ๋น„์Šค ํŠน์„ฑ์— ๋งž๊ฒŒ ์กฐ์ •ํ•ด์•ผ ํ•˜๋ฉฐ, ๋„ˆ๋ฌด ํฌ๋ฉด DB ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€ํ•˜, ๋„ˆ๋ฌด ์ž‘์œผ๋ฉด ๋Œ€๊ธฐ์‹œ๊ฐ„์ด ๋Š˜์–ด๋‚œ๋‹ค.
  • ๋ณต์žก์„ฑ ์ฆ๊ฐ€ : ํ’€ ๊ด€๋ฆฌ ๋กœ์ง์ด ์ถ”๊ฐ€๋˜์–ด ์ž˜๋ชป ์„ค์ •ํ•˜๊ฑฐ๋‚˜ Connection๊ฐ์ฒด๋ฅผ ๋ฐ˜๋‚ฉํ•˜์ง€ ์•Š์œผ๋ฉด ํ’€ ๊ณ ๊ฐˆ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋”ฐ.

[์ฐธ๊ณ  ์ž๋ฃŒ]

https://shuu.tistory.com/130

 

์ปค๋„ฅ์…˜ ํ’€์ด๋ž€ (Connection Pool)

1) ์ปค๋„ฅ์…˜ ํ’€ (Connection Pool) (1) ์ปค๋„ฅ์…˜ ํ’€์ด๋ž€ JDBC API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Connection ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ž‘์—…์€ ๋น„์šฉ์ด ๊ต‰์žฅํžˆ ๋งŽ์ด ๋“œ๋Š” ์ž‘์—… ์ค‘ ํ•˜๋‚˜์ด๋‹ค. Connection ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ

shuu.tistory.com

https://velog.io/@lilychoi/DB-Connection-Pool-%EC%9D%B4%EB%9E%80

 

DB Connection Pool ์ด๋ž€

DB Connection ๊ณผ DB Connection Pool

velog.io

https://steady-coding.tistory.com/564

 

[๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค] Connection Pool์ด๋ž€?

cs-study์—์„œ ์Šคํ„ฐ๋””๋ฅผ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. DB Connection DB๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด DB์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ„ ํ†ต์‹ ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋‹จ DB Connection์€ Database Driver์™€ Database ์—ฐ๊ฒฐ ์ •๋ณด๋ฅผ ๋‹ด์€ URL์ด ํ•„์š”ํ•จ Java์˜ DB Con

steady-coding.tistory.com