λ°μν
λ°μ΄ν°λ² μ΄μ€ 컀λ₯μ μ μ»λ κ³Όμ
- DB λλΌμ΄λ²λ₯Ό ν΅ν΄ 컀λ₯μ μ μ‘°ννλ€.
- DBμ TCP/IP 컀λ₯μ μ μ°κ²°νλ€.
- DBμ λΆκ°μ 보 μ λ¬νλ€.
- λ΄λΆμ DB μΈμ μμ±νλ€.
- DBλ 컀λ₯μ μμ±μ΄ μλ£λμλ€λ μλ΅μ 보λΈλ€
- DB λλΌμ΄λ²λ 컀λ₯μ κ°μ²΄ μμ±ν΄μ ν΄λΌμ΄μΈνΈμ λ°ννλ€.
μ΄λ¬ν κ³Όμ μ 볡μ‘νκ³ μκ°λ λ§μ΄ μμλλ€.
컀λ₯μ ν
- μ΄ν리μΌμ΄μ μμ μμ μ 컀λ₯μ νμ νμν λ§νΌ 컀λ₯μ μ ν보ν΄μ νμ 보κ΄νλ€.
- λ³΄ν΅ κΈ°λ³Έκ°μ 10κ°μ΄λ€.
- μ μ ν 컀λ₯μ ν μ«μλ μ±λ₯ ν μ€νΈλ₯Ό ν΅ν΄ μ ν΄μΌ νλ€.
- 컀λ₯μ νμ μλ²λΉ μ΅λ 컀λ₯μ μλ₯Ό μ ννλ ν¨κ³Όλ μλ€(DB 보νΈ)
- μ€νλ§λΆνΈλ κΈ°λ³Έμ μΌλ‘
hikariCP
λ₯Ό μ¬μ©νλ€. (μ±λ₯, μμ μ±, νΈλ¦¬ν¨ λͺ¨λ κ²μ¦ λ¨) - μ°Έκ³ λ‘, 컀λ₯μ νμμ 컀λ₯μ μ μμ±νλ μμ μ λ³λ μ°λ λλ‘ λμνλ€. (컀λ₯μ μμ±μ΄ μ€λ걸리λ μμ μ΄κΈ° λλ¬Έμ)
- 컀λ₯μ
νμ΄ λ¬΄μ νμΌλ‘ λ§μΌλ©΄ μ’μκΉ?
- Threadμλ³΄λ€ μ»€λ₯μ μ΄ λ§μΌλ©΄ μμ μ νμ§ λͺ»νκ³ κ·Έλ₯ λκ²λ¨. λ©λͺ¨λ¦¬λ§ μ°¨μ§
- 리μμ€ μλͺ¨: κ°κ°μ 컀λ₯μ μ λ©λͺ¨λ¦¬μ μμ€ν 리μμ€λ₯Ό μ¬μ©. μλ²μ 리μμ€λ₯Ό κ³Όλνκ² μλͺ¨
- λ€νΈμν¬ λΆν: λ§μ 컀λ₯μ μ μ μ§νλ©΄ μλ²μμ λ€νΈμν¬ νΈλν½μ΄ λμ΄λ μ μλ€. TCP μμΌ κ³μ μ΄μ΄ λκ³ μκΈ° λλ¬Έμ
- Tn x (Cm - 1) + 1
- Tn : Thread κ°μ
- Cm : νλμ Taskμμ λμμ νμν 컀λ₯μ μ
- λ°λλ½μ νΌνκ² μ§λ§, μ¬μ 컀λ₯μ νμ΄ νλλΌ μ±λ₯μ μ’μ§ λͺ»ν¨
- Tn Γ ( Cm - 1 ) + ( Tn / 2 )
DataSource
- 컀λ₯μ μ νλνλ λ°©λ²μ μΆμνν μΈν°νμ΄μ€
- ν΅μ¬ κΈ°λ₯μ 컀λ₯μ
μ‘°νμ΄λ€ ->
getConnection()
- μ€μ κ³Ό μ¬μ©μ λΆλ¦¬ μΌμ΄μ€
- μ΅μ΄μ μμ±ν λλ§ URL, USERNAME, PASSWORDμ κ°μ νλΌλ―Έν°λ₯Ό μ λ¬ν΄ μ€μ νκ³
- μ€μ λ‘ μ¬μ©ν λλ μ€μ μ μ κ²½μ°μ§ μκ³ getConnection()λ§ νΈμΆνλ©΄ λλ€.
hikariCP
maxLifetime
: 컀λ₯μ μ μΌλ§λ μ μ§ν μ§μ λν μ€μ μ΄λ€.- maxLifetimeμ μ€μ ν μκ°μ΄ μ§λλ©΄ 컀λ₯μ μ μ¬μ°κ²°νλ€.
- 컀λ₯μ νμμ κΊΌλ΄μ μ¬μ©μ€μΈ 컀λ₯μ μ μ κ±°λμ§ μμ§λ§, 컀λ₯μ νμ λμμ€λ μκ° μ κ±°λλ€.
connectionTimeout
: 컀λ₯μ λ§Ίμλ κΈ°λ€λ¦¬λ μκ°minimumIdle
: μ ν΄ μ»€λ₯μ μ μ μ§ν μ΅μ μ°κ²° μ- κΈ°λ³Έμ μΌλ‘ maximumPoolSizeκ³Ό κ°μ κ°μ κ°μ§λ€
maximumPoolSize
: νμμ μ μ§ κ°λ₯ν μ΅λ μ°κ²° μreadOnly
: μ½κΈ° μ μ© λͺ¨λλ‘ μ°κ²°μ κ°μ Έμ¬ κ²μΈμ§ μ μ΄connectionInitSql
: μ 컀λ₯μ μ΄ νμ μΆκ°λκΈ°μ μ λ§€λ² μ€νλ SQLtransactionIsolation
: 컀λ₯μ μ κΈ°λ³Έ νΈλμμ 격리 μμ€idleTimeout
: 컀λ₯μ μ΄ idleTimeoutμκ° λμ λκ³ μμΌλ©΄ μ°κ²° ν΄μ νλ€.- minimumIdle < maximumPoolSize
- idleTimeoutμ μ ν΄ μνλ‘ λκ³ μλ 컀λ₯μ λ€μ μ κ±°νλ μν μΈλ°, νμ μ΅μ κ°―μκΉμ§ λ¨μ΄μ§λ©΄ λ μ΄μ μ κ±°νμ§ μλλ€
- maxLifetime -1 > idleTimeout
- minimumIdle < maximumPoolSize
λ°μν
λ°μν
λ°μ΄ν°λ² μ΄μ€ 컀λ₯μ μ μ»λ κ³Όμ
- DB λλΌμ΄λ²λ₯Ό ν΅ν΄ 컀λ₯μ μ μ‘°ννλ€.
- DBμ TCP/IP 컀λ₯μ μ μ°κ²°νλ€.
- DBμ λΆκ°μ 보 μ λ¬νλ€.
- λ΄λΆμ DB μΈμ μμ±νλ€.
- DBλ 컀λ₯μ μμ±μ΄ μλ£λμλ€λ μλ΅μ 보λΈλ€
- DB λλΌμ΄λ²λ 컀λ₯μ κ°μ²΄ μμ±ν΄μ ν΄λΌμ΄μΈνΈμ λ°ννλ€.
μ΄λ¬ν κ³Όμ μ 볡μ‘νκ³ μκ°λ λ§μ΄ μμλλ€.
컀λ₯μ ν
- μ΄ν리μΌμ΄μ μμ μμ μ 컀λ₯μ νμ νμν λ§νΌ 컀λ₯μ μ ν보ν΄μ νμ 보κ΄νλ€.
- λ³΄ν΅ κΈ°λ³Έκ°μ 10κ°μ΄λ€.
- μ μ ν 컀λ₯μ ν μ«μλ μ±λ₯ ν μ€νΈλ₯Ό ν΅ν΄ μ ν΄μΌ νλ€.
- 컀λ₯μ νμ μλ²λΉ μ΅λ 컀λ₯μ μλ₯Ό μ ννλ ν¨κ³Όλ μλ€(DB 보νΈ)
- μ€νλ§λΆνΈλ κΈ°λ³Έμ μΌλ‘
hikariCP
λ₯Ό μ¬μ©νλ€. (μ±λ₯, μμ μ±, νΈλ¦¬ν¨ λͺ¨λ κ²μ¦ λ¨) - μ°Έκ³ λ‘, 컀λ₯μ νμμ 컀λ₯μ μ μμ±νλ μμ μ λ³λ μ°λ λλ‘ λμνλ€. (컀λ₯μ μμ±μ΄ μ€λ걸리λ μμ μ΄κΈ° λλ¬Έμ)
- 컀λ₯μ
νμ΄ λ¬΄μ νμΌλ‘ λ§μΌλ©΄ μ’μκΉ?
- Threadμλ³΄λ€ μ»€λ₯μ μ΄ λ§μΌλ©΄ μμ μ νμ§ λͺ»νκ³ κ·Έλ₯ λκ²λ¨. λ©λͺ¨λ¦¬λ§ μ°¨μ§
- 리μμ€ μλͺ¨: κ°κ°μ 컀λ₯μ μ λ©λͺ¨λ¦¬μ μμ€ν 리μμ€λ₯Ό μ¬μ©. μλ²μ 리μμ€λ₯Ό κ³Όλνκ² μλͺ¨
- λ€νΈμν¬ λΆν: λ§μ 컀λ₯μ μ μ μ§νλ©΄ μλ²μμ λ€νΈμν¬ νΈλν½μ΄ λμ΄λ μ μλ€. TCP μμΌ κ³μ μ΄μ΄ λκ³ μκΈ° λλ¬Έμ
- Tn x (Cm - 1) + 1
- Tn : Thread κ°μ
- Cm : νλμ Taskμμ λμμ νμν 컀λ₯μ μ
- λ°λλ½μ νΌνκ² μ§λ§, μ¬μ 컀λ₯μ νμ΄ νλλΌ μ±λ₯μ μ’μ§ λͺ»ν¨
- Tn Γ ( Cm - 1 ) + ( Tn / 2 )
DataSource
- 컀λ₯μ μ νλνλ λ°©λ²μ μΆμνν μΈν°νμ΄μ€
- ν΅μ¬ κΈ°λ₯μ 컀λ₯μ
μ‘°νμ΄λ€ ->
getConnection()
- μ€μ κ³Ό μ¬μ©μ λΆλ¦¬ μΌμ΄μ€
- μ΅μ΄μ μμ±ν λλ§ URL, USERNAME, PASSWORDμ κ°μ νλΌλ―Έν°λ₯Ό μ λ¬ν΄ μ€μ νκ³
- μ€μ λ‘ μ¬μ©ν λλ μ€μ μ μ κ²½μ°μ§ μκ³ getConnection()λ§ νΈμΆνλ©΄ λλ€.
hikariCP
maxLifetime
: 컀λ₯μ μ μΌλ§λ μ μ§ν μ§μ λν μ€μ μ΄λ€.- maxLifetimeμ μ€μ ν μκ°μ΄ μ§λλ©΄ 컀λ₯μ μ μ¬μ°κ²°νλ€.
- 컀λ₯μ νμμ κΊΌλ΄μ μ¬μ©μ€μΈ 컀λ₯μ μ μ κ±°λμ§ μμ§λ§, 컀λ₯μ νμ λμμ€λ μκ° μ κ±°λλ€.
connectionTimeout
: 컀λ₯μ λ§Ίμλ κΈ°λ€λ¦¬λ μκ°minimumIdle
: μ ν΄ μ»€λ₯μ μ μ μ§ν μ΅μ μ°κ²° μ- κΈ°λ³Έμ μΌλ‘ maximumPoolSizeκ³Ό κ°μ κ°μ κ°μ§λ€
maximumPoolSize
: νμμ μ μ§ κ°λ₯ν μ΅λ μ°κ²° μreadOnly
: μ½κΈ° μ μ© λͺ¨λλ‘ μ°κ²°μ κ°μ Έμ¬ κ²μΈμ§ μ μ΄connectionInitSql
: μ 컀λ₯μ μ΄ νμ μΆκ°λκΈ°μ μ λ§€λ² μ€νλ SQLtransactionIsolation
: 컀λ₯μ μ κΈ°λ³Έ νΈλμμ 격리 μμ€idleTimeout
: 컀λ₯μ μ΄ idleTimeoutμκ° λμ λκ³ μμΌλ©΄ μ°κ²° ν΄μ νλ€.- minimumIdle < maximumPoolSize
- idleTimeoutμ μ ν΄ μνλ‘ λκ³ μλ 컀λ₯μ λ€μ μ κ±°νλ μν μΈλ°, νμ μ΅μ κ°―μκΉμ§ λ¨μ΄μ§λ©΄ λ μ΄μ μ κ±°νμ§ μλλ€
- maxLifetime -1 > idleTimeout
- minimumIdle < maximumPoolSize
λ°μν