Spring Boot - DBCP와 MySQL 설정

업데이트:


스프링 부트 활용

Spring Data 3부 : MySQL

스프링 부트가 지원하는 DBCP와 설정법에 대해 알아보자.

DBCP

  • DBCP(Data Base Connection Pool)
    • 애플리케이션과 DB를 연결하는 과정은 간단한 작업이 아니다.
    • 그렇기 때문에 연결전에 미리 커넥션을 몇개 만들어 놓는다. (Connection Pool)
    • DPCP에서 이러한 커넥션을 얼마나 만들어놓고, 최소 몇개의 커넥션을 유지하고 DB 커넥션 객체를 애플리케이션에 얼마의 시간동안 전달하지 못하면 에러를 발생시키고 하는 설정들을 관리한다.
    • 이와 같이 DBCP는 애플리케이션 성능아 아주 핵심적인 역할을 하고 문제가 발생하면 디버깅도 까다롭기때문에 선택과 학습을 잘하고 사용 및 관리를 해야한다.
  • 스프링 부트에서 지원하는 DBCPHikariCP, Tomcat CP, Commons DBCP2가 있고, 기본적으로 HikariCP를 사용한다.

HikariCP

  • https://github.com/brettwooldridge/HikariCP

  • autoCommit : default - true

    • SQL을 실행하고 커밋이라고 명시를 하지 않아도, 커넥션을 리턴할 때 자동으로 커밋한다. (변경사항 저장)
  • connectionTimeout : default - 30000

    • DBCP에서 애플리케이션에 커넥션 객체를 전달하는데 얼마나 기다리고 예외를 발생시킬 것인지를 말한다.
    • 당연히 시간이 짧을 수록 에러가 발생할 확률이 높아진다.
  • maximumPoolSize : default - 10

    • 커넥션 객체를 몇 개를 유지할 것인지 기본값은 10개이다.
    • 많다고 좋은 것도 아니다.
    • 애플리케이션이 동시에 한번에 일을 할 수 있는 실행할 수 있는 cpu 코어 겟수와 같다.
    • 초과된 커넥션(쓰레드)들은 대기한다.
  • propertiesDBCP를 설정할 수 있다.

    // hikari
    spring.datasource.hikari.connection-timeout=10000
    spring.datasource.hikari.maximum-pool-size=6
        
    // tomcat, dbcp2도 동일하다.
    spring.datasource.tomcat.*
    spring.datasource.dbcp2.*
    

MySQL

  • MySQL에 접속할 수 있는 커넥터 의존성을 추가한다. (dataSource 구현체)

    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
    </dependency>
    
  • Docker containerMySQL을 실행하고 Database를 생성한다.

    - docker run -p 3306:3306 --name mysql_boot -e MYSQL_ROOT_PASSWORD=1 -e
    MYSQL_DATABASE=mydb -e MYSQL_USER=henry -e
    MYSQL_PASSWORD=1234 -d mysql
    - docker exec -i -t mysql_boot bash
    - mysql -u root -p
    
  • properties에 생성한 DB로 접속한다.

    spring.datasource.url=jdbc:mysql://localhost:3306/mydb
    spring.datasource.username=henry
    spring.datasource.password=1234
    


Spring Data 4부 : PostgreSQL

PostgreSQL

  • 의존성 추가

    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>42.2.12</version>
    </dependency>
    
  • Docker containerPostgreSQL을 실행하고 Database를 생성한다.

    - docker run -p 5432:5432 -e POSTGRES_PASSWORD=1234 -e POSTGRES_USER=henry -e POSTGRES_DB=mydb --name postgres_boot -d postgres
    - docker exec -i -t postgres_boot bash
    - su - postgres
    - psql springboot
    - \list (데이터베이스 조회)
    - \dt (테이블 조회)
    
  • properties에 생성한 DB로 접속한다.

    spring.datasource.url=jdbc:postgresql://localhost:3306/mydb
    spring.datasource.username=henry
    spring.datasource.password=1234
    

댓글남기기