Java

[Spring Boot] DBCP와 MySQL 개념 및 사용 방법

cob 2023. 7. 1. 13:42

 

 

 

 

1. MySQL 설정

1-1) Spring Boot가 지원하는 DBCP HikariCP(기본 DBPC)

DBCP는 데이터 베이스 커넥션 풀을 의미한다. 데이터 베이스의 커넥션을 만드는 과정이 많은 작업이 일어나는데 커넥션을 미리 여러개 만들어 필요에따라 사용하는 기능이다.(커넥션의 개수, 사용 기간, 최소 유지 개수 등 설정)
* HiKariCP 문서
https://github.com/brettwooldridge/HikariCP#frequently-used
  • 커넥션 개수를 많다고 전부 실행할 수 있는게 아니라 CPU Core 개수와 동일하다. 나머지는 대기한다.

 

# application.properties 
spring.datasource.hikari.maximum-pool-size=4
  • 커넥션의 개수를 지정한다.

 

1-2) MySQL 커넥터 의존성 추가

JDBC(DataSource) 구현체
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

 

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

 

1-3) MySQL 설치 (Docker 사용)

Docker란?
컨테이너 솔루션으로 터널을 공유하기 때문에 가상머신보다 빠르고, 손쉽게 설치할 수 있다.

Docker 다운로드
https://www.docker.com/
  • Window, Mac 등 환경에 맞게 다운로드한다.

 

 

// MYSQL 설정
$ docker run -p 3306:3306 --name mysql_boot -e MYSQL_ROOT_PASSWORD=pass -e MYSQL_DATABASE=springboot -e MYSQL_USER=coco -e MYSQL_PASSWORD=pass -d mysql

// Docker 인스턴스 확인
$ docker ps

// 해당 컨테이너에 접속하여 bash 실행
$ docker exec -i -t mysql_boot bash

// MySQL 접속
# mysql -u coco -p

// 이후 암호 pass 입력
# pass

// Database 선택
mysql> use springboot
  • 명령 프롬프트 창에서 해당 명령어를 입력한다.
  • 3306:3306  :  컨테이너 안에있는 3306포트를 로컬환경의 3306포트에 연결
  • mysql_boot : 해당 컨테이너의 이름
  • MYSQL_ROOT_PASSWORD : ROOT 패스워드 설정
  • MYSQL_DATABASE : DATABASE 생성
  • MYSQL_USER : USER 생성
  • MYSQL_PASSWORD : USER 패스워드 설정
  • MariaDB를 사용하고 싶으면 명령어의 마지막 mysql 대신 mariadb를 입력하면 된다.

 

// 도커 컨테이너 멈춤
$ docker stop mysql_boot

// 도커 컨테이너 삭제
$ docker rm mysql_boot

 

1-4) Spring Boot MySQL 설정

# application.properties 

# 커넥션 개수 설정
spring.datasource.hikari.maximum-pool-size=4

# MySQL 설정
# 특정 버전 이상부터 SSL를 추천하는 오류 발생
spring.datasource.url=jdbc:mysql://localhost:3306/springboot?useSSL=false
spring.datasource.username=coco
spring.datasource.password=pass

 

 

 

2. 코드 작성

package com.example.demo;

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

public class MySQLRunner implements ApplicationRunner {

    @Autowired
    JdbcTemplate jdbcTemplate;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        String createTableQuery = "CREATE TABLE USER(ID INTEGER NOT NULL, name VARCHAR(255), PRIMARY KEY(id))";
        jdbcTemplate.execute(createTableQuery);

        jdbcTemplate.execute("INSERT INTO USER VALUES (1, 'COCO')");
    }
}

 

반응형