Skip to content

Latest commit

ย 

History

History
122 lines (88 loc) ยท 4.99 KB

File metadata and controls

122 lines (88 loc) ยท 4.99 KB
Title DBCP
Category DB
Author Jung

๋ฏธ๋ฆฌ ์ผ์ • ๊ฐฏ์ˆ˜์˜ Connection์„ ๋งŒ๋“ค์–ด Pool์— ์ €์žฅ ํ•˜๊ณ ,
์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์ด ๋ฐœ์ƒํ•˜๋ฉด Connection์„ ์ œ๊ณต ํ•œ ๋’ค
์‚ฌ์šฉ์ž์˜ ์—ฐ๊ฒฐ์ด ์ข…๋ฃŒ๋œ๋‹ค๋ฉด Pool์— ๋‹ค์‹œ ๋ฐ˜ํ™˜ํ•˜์—ฌ ๋ณด๊ด€ํ•ฉ๋‹ˆ๋‹ค.


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

Connection Pool์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ 
์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์— ๋”ฐ๋ผ Connection์ด ์ƒ์„ฑ๋˜๊ณ  ์—ฐ๊ฒฐ์„ ํ•ด์ œ ํ•œ๋‹ค๋ฉด
์ˆ˜ ๋งŽ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญํ•  ๊ฒฝ์šฐ ์„œ๋ฒ„์— ๊ณผ๋ถ€ํ•˜๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค.


DBCP๋ฅผ ๋ฌด์กฐ๊ฑด ๋งŽ์ด ๋งŒ๋“ค๋ฉด?


  • Connection์€ ๊ฐ์ฒด์ž„์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•œ๋‹ค.
  • ์ฆ‰, ์š”์ฒญ๋Œ€๋น„ ๋„ˆ๋ฌด ๋งŽ์€ ๊ฐœ์ˆ˜๋ฅผ ์„ค์ •ํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์ ๋‹นํ•œ ์ปค๋„ฅ์…˜์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ค์ •ํ•˜๊ณ , ์ž์›์„ ํšจ์œจ์ ์œผ๋กœ ์จ์•ผํ•œ๋‹ค!

Connection Pool ์—†์ด ์—ฐ๊ฒฐํ•˜๊ธฐ


    1. DB ์„œ๋ฒ„ ์ ‘์†์„ ์œ„ํ•ด JDBC ๋“œ๋ผ์ด๋ฒ„ ๋กœ๋“œ
    1. DB ์ ‘์† ์ •๋ณด์™€ DriverManager.getConnection()์„ ํ†ตํ•ด DB Connection ๊ฐ์ฒด ์–ป๊ธฐ
    1. Connection ๊ฐ์ฒด๋กœ ๋ถ€ํ„ฐ ์ฟผ๋ฆฌ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด PreparedStatement ๊ฐ์ฒด ๋ฐ›๊ธฐ
    1. executeQuery๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ ๊ทธ๊ฒฐ๊ณ ๋กœ ResultSet ๊ฐ์ฒด ๋ฐ›์•„์„œ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ
    1. ์ฒ˜๋ฆฌ ์™„๋ฃŒํ›„ ์‚ฌ์šฉํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ close ํ•˜์—ฌ ๋ฐ˜ํ™˜

Connetion Pool์˜ ๊ตฌํ˜„์ฒด์˜ ์—ญํ• 

DBCP
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์— ์˜ํ–ฅ์„ ๋ฐ›์•„
        • ์ปค๋„ฅ์…˜์„ ์‹ค์ œ๋กœ ๋‹ซ์•„๋ฒ„๋ฆฌ๊ฒŒ ๋˜์–ด, ์ผ๋ถ€ ์ปค๋„ฅ์…˜์ด ์ƒ์„ฑ๋˜๊ณ  ๋‹ซ๋Š” ๋น„์šฉ ๋ฐœ์ƒ ๊ฐ€๋Šฅ

DBCP ๋™์ž‘์›๋ฆฌ

  • ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ ๋ฐœ์ƒ์‹œ Pool์—์„œ Connection ๊ฐ์ฒด ๊ฐ€์ ธ์˜ด
  • Connection์„ ์‚ฌ์šฉํ•ด DB ์ž‘์—… ์ˆ˜ํ–‰
  • ์‚ฌ์šฉ์ด ๋๋‚œ Connection์„ Pool์— ๋ฐ˜ํ™˜
  • Pool์— ๋นŒ๋ ค์ค„ ์ˆ˜ ์žˆ๋Š” ์ปค๋„ฅ์…˜์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ error๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ปค๋„ฅ์…˜์„ ๋ฐ˜ํ™˜ํ•  ๋•Œ๊นŒ์ง€ ์š”์ฒญํ•œ ํด๋ผ์ด์–ธํŠธ๋Š” ๋Œ€๊ธฐ ์ƒํƒœ
  • ๊ทธ ํ›„ ๋‹ค๋ฅธ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ปค๋„ฅ์…˜ ๋ฐ˜ํ™˜ํ•˜๋ฉด, ๋Œ€๊ธฐ ์ƒํƒœ์ธ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ปค๋„ฅ์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ์กฐ

์ ์ ˆํ•œ Connection์˜ ๊ฐœ์ˆ˜

  • ๋„ˆ๋ฌด ๋งŽ์€ ์ปค๋„ฅ์…˜์„ 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 ์š”์ฒญ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ

DBCP ์ข…๋ฅ˜

  • tomcat-jdbc-pool

    • tomcat ๋‚ด์žฅ
    • Apache Commons DBCP ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ”ํƒ•์œผ๋กœ ๊ตฌํ˜„
    • Spring boot 2.0.0 ํ•˜์œ„ ๋ฒ„์ „์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ณธ DBCP
  • HikariCP

    • Spring boot 2.0๋ถ€ํ„ฐ default Jdbc connection pool
    • zero-overhead
      • ์–ด๋–ค ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋“ค์–ด๊ฐ€๋Š” ๊ฐ„์ ‘์ ์ธ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„ ๋ฐ ๋ฉ”๋ชจ๋ฆฌ