HikariCP Connection Pool ์ด๋ž€?

2026. 3. 16. 20:16ใ†Infra

๋ฐ˜์‘ํ˜•

 

 

๋ฌธ์„œ ๊ฐœ์š”

๐Ÿ’ก spring-boot-starter-data-jpa๋ฅผ ์˜์กด์„ฑ์— ์ถ”๊ฐ€ํ•˜๋ฉด HikariCP๊ฐ€ ์ž๋™์œผ๋กœ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

Spring Boot ๊ธฐ๋ณธ Connection Pool์ธ HikariCP์˜ ํ•ต์‹ฌ ์„ค์ •์„ ์ดํ•ดํ•˜๊ณ ,

AWS RDS Multi-AZ failover ์ƒํ™ฉ์—์„œ ์•ˆ์ •์ ์œผ๋กœ ๋ณต๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

 

 

1. Connection Pool์ด๋ž€?

DB์— ์ฟผ๋ฆฌ๋ฅผ ๋ณด๋‚ด๋ ค๋ฉด ๋จผ์ € ์—ฐ๊ฒฐ(Connection)์„ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์ด ์—ฐ๊ฒฐ์„ ๋งŒ๋“œ๋Š” ๋ฐ ์•ฝ 50ms๊ฐ€ ๊ฑธ๋ฆฌ๋Š”๋ฐ, ์š”์ฒญ๋งˆ๋‹ค ๋งŒ๋“ค๊ณ  ๋Š์œผ๋ฉด ๋‚ญ๋น„์ž…๋‹ˆ๋‹ค.

[Pool ์—†์ด] โ€” ์š”์ฒญ๋งˆ๋‹ค ์—ฐ๊ฒฐ์„ ์ƒˆ๋กœ ๋งŒ๋“ค๊ณ  ๋Š์Œ (๋А๋ฆผ)

์š”์ฒญ1 โ†’ ์—ฐ๊ฒฐ ์ƒ์„ฑ(50ms) โ†’ ์ฟผ๋ฆฌ โ†’ ์—ฐ๊ฒฐ ์ข…๋ฃŒ 
์š”์ฒญ2 โ†’ ์—ฐ๊ฒฐ ์ƒ์„ฑ(50ms) โ†’ ์ฟผ๋ฆฌ โ†’ ์—ฐ๊ฒฐ ์ข…๋ฃŒ 
์š”์ฒญ3 โ†’ ์—ฐ๊ฒฐ ์ƒ์„ฑ(50ms) โ†’ ์ฟผ๋ฆฌ โ†’ ์—ฐ๊ฒฐ ์ข…๋ฃŒ
[Pool ์žˆ์œผ๋ฉด] โ€” ๋ฏธ๋ฆฌ ์—ฐ๊ฒฐ์„ ๋งŒ๋“ค์–ด๋†“๊ณ  ๋นŒ๋ ค์“ฐ๊ณ  ๋ฐ˜๋‚ฉ (๋น ๋ฆ„)

Pool: [์—ฐ๊ฒฐ1, ์—ฐ๊ฒฐ2, ์—ฐ๊ฒฐ3, ... ์—ฐ๊ฒฐ10] โ† ์•ฑ ์‹œ์ž‘ ์‹œ ๋ฏธ๋ฆฌ ์ƒ์„ฑ

์š”์ฒญ1 โ†’ ์—ฐ๊ฒฐ1 ๋นŒ๋ฆผ โ†’ ์ฟผ๋ฆฌ โ†’ ๋ฐ˜๋‚ฉ 
์š”์ฒญ2 โ†’ ์—ฐ๊ฒฐ2 ๋นŒ๋ฆผ โ†’ ์ฟผ๋ฆฌ โ†’ ๋ฐ˜๋‚ฉ 
์š”์ฒญ3 โ†’ ์—ฐ๊ฒฐ1 ๋นŒ๋ฆผ โ†’ ์ฟผ๋ฆฌ โ†’ ๋ฐ˜๋‚ฉ โ† ๋ฐ˜๋‚ฉ๋œ ์—ฐ๊ฒฐ ์žฌ์‚ฌ์šฉ!

 
HikariCP๋Š” Spring Boot๊ฐ€ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” Connection Pool ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.
๊ฐ€์žฅ ๋น ๋ฅด๊ณ  ๊ฐ€๋ฒผ์šด ๊ฒƒ์œผ๋กœ ์œ ๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ˜Š๐Ÿ˜Š
 
 

2. ํ•ต์‹ฌ ์„ค์ •๊ฐ’ ํ•˜๋‚˜์”ฉ ์ดํ•ดํ•˜๊ธฐ

2-1. connection-timeout โ€” "์—ฐ๊ฒฐ ๋นŒ๋ฆฌ๋ ค๊ณ  ์–ผ๋งˆ๋‚˜ ๊ธฐ๋‹ค๋ฆด๊นŒ?"

connection-timeout: 3000  # 3์ดˆ

 
Pool์— ๋‚จ์€ ์—ฐ๊ฒฐ์ด ์—†์„ ๋•Œ, ์ƒˆ ์—ฐ๊ฒฐ์„ ๋ฐ›์„ ๋•Œ๊นŒ์ง€ ์ตœ๋Œ€ ๋Œ€๊ธฐ ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค.

์š”์ฒญ โ†’ Pool์— ๋‚จ์€ ์—ฐ๊ฒฐ ์žˆ์–ด?
         โ”œโ”€ ์žˆ์Œ โ†’ ๋ฐ”๋กœ ์‚ฌ์šฉ
         โ””โ”€ ์—†์Œ โ†’ 3์ดˆ ๊ธฐ๋‹ค๋ฆผ...
                    โ”œโ”€ 3์ดˆ ์•ˆ์— ๋ฐ˜๋‚ฉ๋œ ์—ฐ๊ฒฐ ์ƒ๊น€ โ†’ ์‚ฌ์šฉ
                    โ””โ”€ 3์ดˆ ์ง€๋‚จ โ†’ SQLTransientConnectionException ์—๋Ÿฌ!

 
๊ธฐ๋ณธ๊ฐ’์€ 30์ดˆ์ธ๋ฐ, failover ์ƒํ™ฉ์—์„œ 30์ดˆ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋ฉด ์‚ฌ์šฉ์ž์—๊ฒŒ 30์ดˆ๊ฐ„ ๋กœ๋”ฉ์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.
3์ดˆ๋กœ ์ค„์ด๋ฉด ๋นจ๋ฆฌ ์‹คํŒจํ•˜๊ณ  ๋นจ๋ฆฌ ์žฌ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

2-2. keepalive-time โ€” "๋†€๊ณ  ์žˆ๋Š” ์—ฐ๊ฒฐ, ์‚ด์•„์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ"

keepalive-time: 60000  # 1๋ถ„

Pool์—์„œ ์‚ฌ์šฉ๋˜์ง€ ์•Š๊ณ  ๋†€๊ณ  ์žˆ๋Š”(idle) ์—ฐ๊ฒฐ์— ์ฃผ๊ธฐ์ ์œผ๋กœ ping์„ ๋ณด๋‚ด์„œ ์‚ด์•„์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
 

Pool: [์—ฐ๊ฒฐ1(์‚ฌ์šฉ์ค‘), ์—ฐ๊ฒฐ2(๋Œ€๊ธฐ์ค‘), ์—ฐ๊ฒฐ3(๋Œ€๊ธฐ์ค‘)]
                          โ”‚               โ”‚
                   1๋ถ„๋งˆ๋‹ค "์•ผ ์‚ด์•„์žˆ์–ด?" ํ•‘
                          โ”‚               โ”‚
                   "์‘!" โ† ์ •์ƒ          "..." โ† ์ฃฝ์—ˆ๋„ค
                                                 โ†’ ๋ฒ„๋ฆฌ๊ณ  ์ƒˆ ์—ฐ๊ฒฐ ์ƒ์„ฑ

 

์™œ ํ•„์š”ํ•œ๊ฐ€?

Multi-AZ failover๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด:

1. Primary DB๊ฐ€ ์ฃฝ์Œ

2. AWS๊ฐ€ Standby๋ฅผ ์ƒˆ Primary๋กœ ์Šน๊ฒฉ (DNS ๋ณ€๊ฒฝ)

3. ํ•˜์ง€๋งŒ Pool์— ์žˆ๋Š” ์—ฐ๊ฒฐ๋“ค์€ ์•„์ง "์ฃฝ์€ Primary"๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ์Œ!
   Pool: [์—ฐ๊ฒฐ1โ†’์ฃฝ์€DB, ์—ฐ๊ฒฐ2โ†’์ฃฝ์€DB, ์—ฐ๊ฒฐ3โ†’์ฃฝ์€DB]

4. keepalive๊ฐ€ ping์„ ๋ณด๋ƒ„ โ†’ "๋‹ค ์ฃฝ์—ˆ๋„ค!" โ†’ ์ „๋ถ€ ์ œ๊ฑฐ

5. ์ƒˆ ์—ฐ๊ฒฐ ์ƒ์„ฑ โ†’ DNS๊ฐ€ ์ƒˆ Primary๋ฅผ ๊ฐ€๋ฆฌํ‚ด
   Pool: [์—ฐ๊ฒฐ4โ†’์ƒˆDB, ์—ฐ๊ฒฐ5โ†’์ƒˆDB, ์—ฐ๊ฒฐ6โ†’์ƒˆDB]

6. ์„œ๋น„์Šค ๋ณต๊ตฌ!

 
์ด ์„ค์ •์ด ์—†์œผ๋ฉด ์ฃฝ์€ ์—ฐ๊ฒฐ์„ max-lifetime(30๋ถ„)๊นŒ์ง€ ๊ณ„์† ์‚ฌ์šฉํ•˜๋ ค๊ณ  ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ 30๋ถ„ ๋™์•ˆ ๋ชจ๋“  DB ์š”์ฒญ์ด ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ๐Ÿฅฒ๐Ÿฅฒ

 

 

2-3. max-lifetime โ€” "์—ฐ๊ฒฐ์˜ ์ˆ˜๋ช…"

max-lifetime: 1800000  # 30๋ถ„

ํ•˜๋‚˜์˜ ์—ฐ๊ฒฐ์„ ์ตœ๋Œ€ 30๋ถ„๋งŒ ์‚ฌ์šฉํ•˜๊ณ , ํ๊ธฐ ํ›„ ์ƒˆ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
 

์—ฐ๊ฒฐ1 ์ƒ์„ฑ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ 30๋ถ„ ๊ฒฝ๊ณผ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ ํ๊ธฐ โ†’ ์ƒˆ ์—ฐ๊ฒฐ ์ƒ์„ฑ

 
์™œ ๊ณ„์† ์“ฐ์ง€ ์•Š๋Š” ๊ฑธ๊นŒ?

  • ๋„คํŠธ์›Œํฌ ์žฅ๋น„(๋ฐฉํ™”๋ฒฝ, ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ)๊ฐ€ ์˜ค๋ž˜๋œ ์—ฐ๊ฒฐ์„ ๋Š์„ ์ˆ˜ ์žˆ์Œ
  • DB ์„ค์ • ๋ณ€๊ฒฝ ์‹œ ๊ธฐ์กด ์—ฐ๊ฒฐ์— ๋ฐ˜์˜์ด ์•ˆ ๋  ์ˆ˜ ์žˆ์Œ
  • ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ๊ฐ™์€ ๋ฏธ๋ฌ˜ํ•œ ๋ฌธ์ œ๊ฐ€ ๋ˆ„์ ๋  ์ˆ˜ ์žˆ์Œ

 
์ฃผ๊ธฐ์ ์œผ๋กœ ๊ต์ฒดํ•ด์„œ ํ•ญ์ƒ ๊ฑด๊ฐ•ํ•œ ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

AWS RDS๋Š” idle connection์„ ๊ธฐ๋ณธ ์•ฝ 30๋ถ„ ํ›„ ๋Š์Šต๋‹ˆ๋‹ค.

max-lifetime์„ 30๋ถ„์œผ๋กœ ๋งž์ถ”๋ฉด RDS๊ฐ€ ๋Š๊ธฐ ์ „์— ์šฐ๋ฆฌ๊ฐ€ ๋จผ์ € ๊ต์ฒดํ•ฉ๋‹ˆ๋‹ค.

 

 

 

2-4. validation-timeout โ€” "์—ฐ๊ฒฐ์ด ์œ ํšจํ•œ์ง€ ํ™•์ธํ•˜๋Š” ์‹œ๊ฐ„"

validation-timeout: 2000  # 2์ดˆ

Pool์—์„œ ์—ฐ๊ฒฐ์„ ๊บผ๋‚ผ ๋•Œ, ์ด ์—ฐ๊ฒฐ์ด ์•„์ง ์“ธ ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
๊ทธ ํ™•์ธ์— ์ตœ๋Œ€ 2์ดˆ๋ฅผ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค.
 

Pool์—์„œ ์—ฐ๊ฒฐ ๊บผ๋ƒ„ โ†’ "์ด ์—ฐ๊ฒฐ ์•„์ง ์“ธ ์ˆ˜ ์žˆ์–ด?" (SELECT 1 ์‹คํ–‰)
                       โ”œโ”€ 2์ดˆ ์•ˆ์— ์‘๋‹ต โ†’ ์‚ฌ์šฉ
                       โ””โ”€ 2์ดˆ ์ดˆ๊ณผ     โ†’ ์ด ์—ฐ๊ฒฐ ๋ฒ„๋ฆฌ๊ณ  ๋‹ค๋ฅธ ์—ฐ๊ฒฐ ์‚ฌ์šฉ

 

2-5. minimum-idle / maximum-pool-size โ€” "Pool ํฌ๊ธฐ"

minimum-idle: 5         # ์ตœ์†Œ 5๊ฐœ๋Š” ํ•ญ์ƒ ๋Œ€๊ธฐ
maximum-pool-size: 20   # ์ตœ๋Œ€ 20๊ฐœ๊นŒ์ง€ ํ™•์žฅ
ํŠธ๋ž˜ํ”ฝ ์ ์„ ๋•Œ:
  Pool: [์—ฐ๊ฒฐ1, ์—ฐ๊ฒฐ2, ์—ฐ๊ฒฐ3, ์—ฐ๊ฒฐ4, ์—ฐ๊ฒฐ5]
         โ””โ”€โ”€โ”€โ”€ ์ตœ์†Œ 5๊ฐœ๋Š” ํ•ญ์ƒ ์œ ์ง€ โ”€โ”€โ”€โ”€โ”˜

ํŠธ๋ž˜ํ”ฝ ๋งŽ์„ ๋•Œ:
  Pool: [์—ฐ๊ฒฐ1, ์—ฐ๊ฒฐ2, ... ์—ฐ๊ฒฐ15, ... ์—ฐ๊ฒฐ20]
         โ””โ”€โ”€โ”€โ”€โ”€โ”€ ํ•„์š”์— ๋”ฐ๋ผ ์ตœ๋Œ€ 20๊ฐœ๊นŒ์ง€ ์ž๋™ ํ™•์žฅ โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

20๊ฐœ ๋‹ค ์‚ฌ์šฉ ์ค‘์ด๋ฉด:
  โ†’ connection-timeout(3์ดˆ) ๋™์•ˆ ๋Œ€๊ธฐ
  โ†’ 3์ดˆ ๋‚ด์— ๋ฐ˜๋‚ฉ๋œ ์—ฐ๊ฒฐ์ด ์—†์œผ๋ฉด ์—๋Ÿฌ

 
 
์ ์ • Pool ํฌ๊ธฐ ๊ณต์‹ (์ฐธ๊ณ ):

connections = (CPU ์ฝ”์–ด ์ˆ˜ * 2) + ์œ ํšจ ๋””์Šคํฌ ์ˆ˜

์˜ˆ: 2 vCPU ์„œ๋ฒ„
  โ†’ (2 * 2) + 1 = 5 ~ 10๊ฐœ๊ฐ€ ์ ์ •
  โ†’ 20๊ฐœ๋Š” ์—ฌ์œ ๋ฅผ ๋‘” ์„ค์ •

Pool์ด ๋„ˆ๋ฌด ํฌ๋ฉด DB์— ๋ถ€๋‹ด์ด ๋ฉ๋‹ˆ๋‹ค. db.t4g.micro๋Š” ์ตœ๋Œ€ ์•ฝ 20๊ฐœ ์—ฐ๊ฒฐ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

 

 

3. ์„ค์ • ์˜ˆ์‹œ (YAML)

application-prod.yml (Multi-AZ ํ™˜๊ฒฝ)

spring:
  datasource:
    master:
      jdbc-url: ${SPRING_DATASOURCE_MASTER_JDBC_URL}
      username: ${SPRING_DATASOURCE_MASTER_USERNAME}
      password: ${SPRING_DATASOURCE_MASTER_PASSWORD}
      driver-class-name: org.postgresql.Driver
      # HikariCP ์„ค์ •
      connection-timeout: 3000       # 3์ดˆ โ€” ๋น ๋ฅธ ์‹คํŒจ/์žฌ์‹œ๋„
      validation-timeout: 2000       # 2์ดˆ โ€” ์—ฐ๊ฒฐ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ
      max-lifetime: 1800000          # 30๋ถ„ โ€” RDS idle timeout์— ๋งž์ถค
      keepalive-time: 60000          # 1๋ถ„ โ€” ์ฃฝ์€ ์—ฐ๊ฒฐ ๊ฐ์ง€
      minimum-idle: 5                # ์ตœ์†Œ ์œ ์ง€ ์—ฐ๊ฒฐ ์ˆ˜
      maximum-pool-size: 20          # ์ตœ๋Œ€ ์—ฐ๊ฒฐ ์ˆ˜

 

application-dev.yml (๋‹จ์ผ ์ธ์Šคํ„ด์Šค ํ™˜๊ฒฝ)

spring:
  datasource:
    master:
      jdbc-url: ${SPRING_DATASOURCE_MASTER_JDBC_URL}
      username: ${SPRING_DATASOURCE_MASTER_USERNAME}
      password: ${SPRING_DATASOURCE_MASTER_PASSWORD}
      driver-class-name: org.postgresql.Driver
      # HikariCP ์„ค์ • (Dev๋Š” ๋ณด์ˆ˜์ ์œผ๋กœ)
      connection-timeout: 3000
      validation-timeout: 2000
      max-lifetime: 1800000
      minimum-idle: 5
      maximum-pool-size: 10          # Dev๋Š” ๋” ์ž‘๊ฒŒ

 

Devํ™˜๊ฒฝ์ฒ˜๋Ÿผ Multi-AZ failover๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ keepalive-time์„ ๋„ฃ์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.

 

 

 

4. Failover ์‹œ ์ „์ฒด ํ๋ฆ„

Multi-AZ failover๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ, HikariCP ์„ค์ •์ด ์–ด๋–ป๊ฒŒ ์„œ๋น„์Šค๋ฅผ ๋ณต๊ตฌํ•˜๋Š”์ง€ ์ „์ฒด ํ๋ฆ„์ž…๋‹ˆ๋‹ค. ๐Ÿค“

[์ •์ƒ ์ƒํƒœ]
  Pool: [์—ฐ๊ฒฐ1โ†’Primary, ์—ฐ๊ฒฐ2โ†’Primary, ์—ฐ๊ฒฐ3โ†’Primary]
  ๋ชจ๋“  ์š”์ฒญ ์ •์ƒ ์ฒ˜๋ฆฌ ์ค‘

          โ†“ Primary ์žฅ์•  ๋ฐœ์ƒ!

[0์ดˆ] AWS๊ฐ€ failover ์‹œ์ž‘
  - Primary ์ธ์Šคํ„ด์Šค ๋น„์ •์ƒ ๊ฐ์ง€
  - Standby๋ฅผ ์ƒˆ Primary๋กœ ์Šน๊ฒฉ ์‹œ์ž‘
  - DNS ๋ณ€๊ฒฝ ์ง„ํ–‰ ์ค‘

          โ†“

[0~60์ดˆ] ์š”์ฒญ ์‹คํŒจ ๊ตฌ๊ฐ„
  - Pool์˜ ๊ธฐ์กด ์—ฐ๊ฒฐ๋กœ ์ฟผ๋ฆฌ ์‹œ๋„ โ†’ ์‹คํŒจ
  - connection-timeout(3์ดˆ) ํ›„ ๋น ๋ฅด๊ฒŒ ์—๋Ÿฌ ๋ฐ˜ํ™˜
  - ํด๋ผ์ด์–ธํŠธ๋Š” ์žฌ์‹œ๋„ ๊ฐ€๋Šฅ

          โ†“

[~60์ดˆ] keepalive๊ฐ€ ๊ฐ์ง€
  - 1๋ถ„ ์ฃผ๊ธฐ๋กœ idle ์—ฐ๊ฒฐ์— ping โ†’ ์‘๋‹ต ์—†์Œ
  - ์ฃฝ์€ ์—ฐ๊ฒฐ ์ „๋ถ€ Pool์—์„œ ์ œ๊ฑฐ
  - DNS๊ฐ€ ์ƒˆ Primary๋ฅผ ๊ฐ€๋ฆฌํ‚ด

          โ†“

[60~120์ดˆ] ๋ณต๊ตฌ
  - ์ƒˆ ์š”์ฒญ์ด ๋“ค์–ด์˜ด โ†’ Pool์— ์—ฐ๊ฒฐ ์—†์Œ
  - HikariCP๊ฐ€ ์ƒˆ ์—ฐ๊ฒฐ ์ƒ์„ฑ ์‹œ๋„
  - DNS๊ฐ€ ์ƒˆ Primary๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋ฏ€๋กœ โ†’ ์ƒˆ Primary์— ์—ฐ๊ฒฐ ์„ฑ๊ณต!
  - Pool: [์—ฐ๊ฒฐ4โ†’์ƒˆPrimary, ์—ฐ๊ฒฐ5โ†’์ƒˆPrimary]

          โ†“

[~120์ดˆ] ์„œ๋น„์Šค ์ •์ƒํ™”
  - ๋ชจ๋“  ์š”์ฒญ ์ •์ƒ ์ฒ˜๋ฆฌ
  - Pool์ด minimum-idle(5๊ฐœ)๊นŒ์ง€ ์ž๋™ ์ฑ„์›€

 

 

 

5. ์„ค์ •๊ฐ’ ์š”์•ฝ ํ‘œ

์„ค์ • ๊ธฐ๋ณธ๊ฐ’ ๊ถŒ์žฅ๊ฐ’ ์—ญํ• 

connection-timeout30์ดˆ3์ดˆPool์—์„œ ์—ฐ๊ฒฐ ๋Œ€๊ธฐ ์‹œ๊ฐ„
keepalive-time0 (๋น„ํ™œ์„ฑ)60์ดˆ์œ ํœด ์—ฐ๊ฒฐ ์ƒ์กด ํ™•์ธ ์ฃผ๊ธฐ
max-lifetime30๋ถ„30๋ถ„์—ฐ๊ฒฐ ์ตœ๋Œ€ ์ˆ˜๋ช…
validation-timeout5์ดˆ2์ดˆ์—ฐ๊ฒฐ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์‹œ๊ฐ„
minimum-idlepool size์™€ ๋™์ผ5์ตœ์†Œ ์œ ์ง€ ์—ฐ๊ฒฐ ์ˆ˜
maximum-pool-size1010~20์ตœ๋Œ€ ์—ฐ๊ฒฐ ์ˆ˜

 

 

6. ์ฃผ์˜์‚ฌํ•ญ

Pool ํฌ๊ธฐ์™€ DB ์—ฐ๊ฒฐ ํ•œ๊ณ„

DB๊ฐ€ ํ—ˆ์šฉํ•˜๋Š” ์ตœ๋Œ€ ์—ฐ๊ฒฐ ์ˆ˜ โ‰ฅ (์„œ๋น„์Šค ์ˆ˜ ร— maximum-pool-size)

์˜ˆ: db.t4g.micro (์ตœ๋Œ€ ~20 ์—ฐ๊ฒฐ)
  - Event ์„œ๋น„์Šค Pool: 10๊ฐœ
  - Partner ์„œ๋น„์Šค Pool: 5๊ฐœ
  - ๊ธฐํƒ€: 5๊ฐœ
  โ†’ ํ•ฉ๊ณ„ 20๊ฐœ โ†’ ํ•œ๊ณ„์— ๊ฐ€๊นŒ์›€

  Pool ํฌ๊ธฐ๋ฅผ ๋Š˜๋ฆฌ๋ ค๋ฉด DB ์ธ์Šคํ„ด์Šค ์‚ฌ์–‘๋„ ํ•จ๊ป˜ ์˜ฌ๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

HikariCP ์„ค์ • ์œ„์น˜ (Spring Boot)

@ConfigurationProperties(prefix = "spring.datasource.master")๋กœ ๋ฐ”์ธ๋”ฉํ•˜๋Š” ๊ฒฝ์šฐ,
HikariCP ์†์„ฑ์€ prefix ๋ฐ”๋กœ ์•„๋ž˜์— ์œ„์น˜ํ•ฉ๋‹ˆ๋‹ค:

# ์˜ฌ๋ฐ”๋ฅธ ์œ„์น˜
spring.datasource.master:
  jdbc-url: ...
  connection-timeout: 3000     # โ† ์—ฌ๊ธฐ (prefix ๋ฐ”๋กœ ์•„๋ž˜)

# ์ž˜๋ชป๋œ ์œ„์น˜ (๋™์ž‘ ์•ˆ ํ•จ)
spring.datasource.master:
  hikari:                       # โ† ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์•ˆ ๋จ
    connection-timeout: 3000

 
 
 
 
 
 

๋ฐ˜์‘ํ˜•