๋ฉ‹์‚ฌ Backend Plus 7์ผ์ฐจ ๐Ÿฆ

์‹ ์žฌ์›ยท2023๋…„ 10์›” 31์ผ

์˜ค๋Š˜์€ ์–ด์ œ ์ž ๊น ๋ฐฐ์› ๋˜ HikariCP ์— ๋Œ€ํ•ด ์„ค์ •์„ ํ•˜์˜€๋‹ค.

HikariCP์˜ ๊ฐœ๋…์€ ์–ด์ œ ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ  ํ•˜์‹œ๋ฉด ์ข‹์„๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

HikariCP ์„ค์ •

HikariCP ์„ค์ •์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ œ์ผ ๋จผ์ € ์˜์กด์„ฑ ์„ค์ • ๋ฐ yml ์„ค์ •์„ ํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์˜์กด์„ฑ ์„ค์ •

dependencies {
....
    implementation 'org.springframework.boot:spring-boot-starter-data-jdbc'
    runtimeOnly 'mysql:mysql-connector-java'
....
}
  • jdbc ์˜์กด์„ฑ์„ ์„ค์ •ํ•˜๋ฉด HikariCP ๋ฅผ ์‚ฌ์šฉํ• ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

yml ํŒŒ์ผ ์„ค์ •

spring:
  datasource:
    url: jdbc:mysql://localhost:{ํฌํŠธ๋ฒˆํ˜ธ}/{DB ์Šคํ‚ค๋งˆ}?useSSL=false&autoReconnect=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Seoul
    username: {USERNAME}
    password: {PASSWORD}
    driver-class-name: com.mysql.jdbc.Driver
    
    # hikari ์„ค์ • ์ •๋ณด
# connection-timeout: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์—ฐ๊ฒฐ์ด ์ด์‹œ๊ฐ„๋‚ด์— ์„ค์ • ๋˜์ง€ ์•Š์œผ๋ฉด ์˜ค๋ฅ˜ (๋ฐ€๋ฆฌ์ดˆ)
# validation-timeout: ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ์‹œ๊ฐ„
# minimum-idle: ์ตœ์†Œ ์œ ํœด ์—ฐ๊ฒฐ์ˆ˜
# max-lifetime: ์œ ์ง€ ๋ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€์‹œ๊ฐ„
# maximum-pool-size: ์ตœ๋Œ€ poll ์‚ฌ์ด์ฆˆ (default๋Š” 10)-> ์ด๋ถ€๋ถ„์—์„œ ๋ฐ๋“œ๋ฝ ๋ฐœ์ƒํ• ์ˆ˜ ์žˆ์Œ
    hikari:
      connection-timeout: 3000
      validation-timeout: 3000
      minimum-idle: 5
      max-lifetime: 240000
      maximum-pool-size: 20
      

์˜์กด์„ฑ๊ณผ yml์„ค์ •์„ ํ•ด์ฃผ์—ˆ์œผ๋ฉด @Configuration ์–ด๋…ธํ…Œ์ด์…˜์„ ํ†ตํ•ด @Bean ๋“ฑ๋ก์„ ํ•ด์ค˜์•ผํ•ฉ๋‹ˆ๋‹ค.

@Configuration
public class HikariConfig {
    @Bean
    @Primary
    @ConfigurationProperties("spring.datasource")
    public DataSourceProperties dataSourceProperties() {
        return new DataSourceProperties();
    }

	// yml์— ์žˆ๋Š” hikari ์„ค์ • ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
    @Bean
    @ConfigurationProperties("spring.datasource.hikari")
    public HikariDataSource dataSource(DataSourceProperties properties) {
        return properties.initializeDataSourceBuilder()
        				.type(HikariDataSource.class).build();
    }
}

Hikari๊ฐ€ ์‹คํ–‰๊ฒฐ๊ณผ๋กœ ๋‚˜์˜ค๋Š”๊ฑธ ์•Œ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ๋“œ๋ฝ ํ”ผํ•˜๊ธฐ

์—ฌ๊ธฐ์„œ ๋ฐ๋“œ๋ฝ (๊ต์ฐฉ์ƒํƒœ ) ์ด๋ž€ ?

๊ฐ„๋‹จํ•˜๊ฒŒ ์ƒ๊ฐํ•˜์—ฌ ๋‘ ๊ฐœ ์ด์ƒ์˜ ์ž‘์—…์ด ์„œ๋กœ ์ƒ๋Œ€๋ฐฉ์˜ ์ž‘์—…์ด ๋๋‚˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋ฉฐ ๋ฌดํ•œ ๋Œ€๊ธฐ ์ƒํƒœ์— ๋น ์ง€๊ฒŒ ๋˜๋Š”๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

โžก HikariCp๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ๋˜๋ฉด์€ ๋ฐ๋“œ๋ฝ์— ๋Œ€ํ•ด ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ปค๋„ฅ์…˜ ํ’€์˜ ํฌ๊ธฐ๋ฅผ ์ž˜ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ ์€ ์•„๋ž˜์˜ ์ฐธ์กฐ (Reference) ๋ธ”๋กœ๊ทธ๋ฅผ ํ™•์ธ ํ•˜๋ฉด ์ข‹์„๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

REFERENCE

https://velog.io/@dongvelop/Spring-Boot-Hikari-CP-%EC%BB%A4%EC%8A%A4%ED%85%80%EC%9C%BC%EB%A1%9C-%EC%84%B1%EB%8A%A5-%EC%B5%9C%EC%A0%81%ED%99%94%ED%95%98%EA%B8%B0

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