이번 포스팅에서는 DBCP를 알아보고, 스프링부트에서 MySQL을 연동하는 과정을 담았습니다.

DBCP?

  • 먼저 DBCP 를 알아보기 전에 JDBC 에 살펴보겠습니다.
  • JDBCJava Database Connectivity 의 약자로 자바에서 데이터베이스에 접속할 수 있도록 도와주는 자바 API 입니다.
  • JDBC 의 효율성을 높이기 위해 나온 것이 DBCP 입니다.
  • DBCPDatabase Connection Pool 의 약자로 DB와 커넥션을 맺고 있는 객체를 관리합니다.
  • 스프링부트는 기본적으로 HikariCP를 사용하고 있어 실습도 이걸 이용해 진행할 예정입니다.

DBCP 역할

  • DBCP 의 역할을 간단하게나마 정리해보면 다음과 같습니다.
    • WAS 실행 시, 미리 개발자가 지정한 DB Connection 객체를 생성하여 Pool이라는 공간에 저장
    • DB 연결 요청이 들어오면, 이 Pool에서 Connection 객체를 불러와 사용하고 반환
    • 즉, 미리 만들어 놓은 커넥션 객체를 요청이 들어올때마다 꺼내 쓰는 형식입니다.
    • 그런데 커넥션 객체를 미리 만들어 놓을때, "몇개를 만들어 놓을 것이냐", "얼마동안 안쓰이면 없앨 것이냐", "최소한 몇개를 유지할 것이냐" 등 여러 설정을 할 수 있습니다.
    • 단, 커넥션 객체는 동시에 일 할 수 있는 개수는 cpu 코어 개수에 비례합니다.

스프링부트에서 MySQL 사용하기

  • maven 사용과 mysql이 설치 되었다는 가정하에 진행합니다.
  • intellij springboot initializer를 이용하여 프로젝트를 생성했습니다.
  • 전체 소스 보기
  • DB로 AWS RDS(mariadb)를 이용했습니다.
  • 프로젝트 구조는 다음과 같습니다.(필요한 것만 적었습니다)
src
    main
        java
            com.corini
                MySQLRunner.java
                SpringbootApplication.java
        resources
            static
            templates
            application.properies

1. 먼저 mysql 접속에 필요한 라이브러리를 pom.xml 파일에 의존성을 추가 합니다.

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

2. application.properties 파일에서 db 정보를 입력합니다.

spring.datasource.hikari.maximum-pool-size=4
spring.datasource.url=디비주소
spring.datasource.username=디비접속아이디
spring.datasource.password=디비비밀번호

디비 주소 입력할 때, jdbc:mysql://스킴을 앞에 붙이는 것을 잊지마세요 ㅎㅎ;
예를 들면 jdbc:mysql://localhost:3306이런 식으로요!

3. 접속이 잘되는 지 MySQLRunner.java 작성합니다.

package org.lym.springbootmysql;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;

import javax.sql.DataSource;
import java.sql.Connection;

@Component
public class MySQLRunner implements ApplicationRunner {

    @Autowired
    DataSource dataSource;

    @Autowired
    JdbcTemplate jdbcTemplate;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        try(Connection connection = dataSource.getConnection()) {
            System.out.println(connection.getClass());
            System.out.println(connection.getMetaData().getURL());
            System.out.println(connection.getMetaData().getUserName());
        }
    }

}

4. 스프링부트 실행하면 커넥션 클래스, 디비 url, 디비사용자가 콘솔에 찍히면 성공입니다!

Reference