DBCP란?

DBCP는 DataBase Connection Pool이다.

connection을 여러개 미리 만들어 놓고 필요할 때 마다 가져다 쓰는 것이다.

몇 개를 만들어놓을지, 얼마나 응답이 없으면 error를 던질지 등의 여러가지 설정을 할 수 있다.

DBCP가 애플리케이션 성능에 아주 핵심적인 역할을 한다.

스프링부트는 기본적으로 HikariCP라는 DBCP를 선택했다.

스프링부트 DBCP 설정

application.properties에 spring.datasource.사용하는DBCP이름.설정값=으로 설정한다.

MySQL

pom.xml에 mysql에 접속할 수 있는 connector(jdbc 구현체) 의존성을 추가해줘야한다.

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

그 다음에 MySQL을 설치해줘야한다.

도커를 사용하면 MySQL을 쉽게 설치할 수 있다.

*도커란? 컨테이너 솔루션이다. 커널을 공유하여, 가상머신보다 훨씬 빠르게 설치할 수 있다.

터미널로 아래의 명령어를 입력한다.

docker run -p 3306:3306 --name mysql_boot -e MYSQL_ROOT_PASSWORD=1 -e MYSQL_DATABASE=springboot -e MYSQL_USER=junseo -e MYSQL_PASSWORD=pass -d mysql

컨테이너에 있는 3306포트를 localhost의 3306포트로 연결해달라는 뜻. mysql_boot는 이 컨테이너의 이름이고, MySQL 설정들을 해준 것이다.

그리고 docker ps를 실행해보면 mysql 인스턴스를 확인할 수 있다.

mysql에 접속하려면 application.properties에 다음 설정을 적어준다.(아까 mysql 설치때 설정해준 값들)

터미널로 mysql에 접속하려면,

아래의 명령어를 입력한다. 컨테이너 안에 들어가서 bash를 실행하라는 명령어이다.
docker exec -i -t mysql_boot bash

mysql -u mysql계정 -p 으로 접속한다.

그 다음 MySQL 러너를 만들어 mysql에 쿼리를 던져보겠다.

(러너 코드)

package com.junseo.springbootjdbc;

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;
import java.sql.Statement;

@Component
public class MySQLRunner implements ApplicationRunner {

    @Autowired
    DataSource dataSource;

    @Autowired
    JdbcTemplate jdbcTemplate;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        // 기본 jdbc api
        try(Connection connection = dataSource.getConnection()) { // connection이라는 리소스를 try안에서 사용하고, 정리를해준다.

            // db 정보 출력
            System.out.println(dataSource.getClass()); // DBCP 정보
            System.out.println(connection.getMetaData().getURL());
            System.out.println(connection.getMetaData().getUserName());

            // USER 테이블 생성
            Statement statement = connection.createStatement();
            String sql = "CREATE TABLE USER(ID INTEGER NOT NULL, name VARCHAR(255), PRIMARY KEY (id))";
            statement.executeUpdate(sql);
        }

        // 기본적인 jdbc api 사용보다 좀 더 편하다.
        jdbcTemplate.execute("INSERT INTO USER VALUES (1, 'junseo')");
    }
}

USER 테이블이 만들어져있고, junseo라는 값이 들어가있는 것을 볼 수 있다.

profile
이전 블로그: https://blog.naver.com/max9106

0개의 댓글