Java/Spring Boot

[Spring Boot] MySQL 설정하기

hh_lin 2022. 4. 10. 18:51

1. DBCP

  • DataBase Connection Pool
  • 커넥션을 만드는 과정이 오래 걸리기 때문에, 미리 여러 개의 커넥션을 만들어놓고
    어플리케이션이 필요로 할 때 만들어져있는 커넥션을 가져다 쓰는 방법
  • 몇 개를 만들 것인지, 얼마동안 안쓰이면 없앨 것인지, 최소 몇 개를 유지할 것인지,
    얼마동안 커넥션을 어플리케이션에 던지지 못하면 에러를 던질 것인지 등 여러 설정 가능
  • 어플리케이션 성능에 핵심적인 역할

 

 

 

 

 

 

2. Spring Boot가 지원하는 DBCP

  • HikariCP (기본)
  • Tomcat CP
  • Commons DBCP2

-> 세 가지 DBCP가 클래스패스에 있는 경우, HikariCP를 사용

 

 

 

 

 

 

3. HikariCP 

  • https://github.com/brettwooldridge/HikariCP#frequently-used
  • HikariConfig에서 확인 가능 (자세한 설명은 JDBC 문서에서 확인할 것)
  • autoCommit
    Default : true
  • connectionTimeout
    DBCP 풀에서 어느 기간동안 커넥션 객체를 어플리케이션에 전달을 하지 못하면 에러를 낼 것인지
    Default : 30000 (30 seconds)
  • maximumPoolSize
    커넥션 객체를 몇 개 유지할 것인지
    Default : 10

 

 

 

 

 

4. DBCP 설정

  • spring.datasource.hikari.*
  • spring.datasource.tomcat.*
  • spring.datasource.dbcp2.*

 

spring.datasource.hikari.maximum-pool-size=4

 

 

 

 

 

 

 

5. MySQL 커넥터 의존성 추가

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

-> mysql을 추가한 게 아니라 mysql에 접속할 수 있는 커넥터를 추가한 것

-> datasource 구현체

 

 

 

 

 

 

 

 

 

6. MySQL 추가 (도커 사용)

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

-> 컨테이너 안에 있는 3306 포트를 localhost의 3306 포트에 연결해달라

-> mysql_boot : 컨테이너 이름

 

-> mysql 인스턴스가 떠있음

 

docker exec -i -t mysql_boot bash

-> mysql_boot 컨테이너에 들어가서 bash를 실행해라

 

mysql -u root -p

-> root로 접속

 

 

 

어떤 DBCP를 사용하고 있는지 확인 가능

System.out.println(dataSource.getClass());

 

 

 

 

 

 

 

 

 

7. MySQL용 Datasource 설정

spring.datasource.url=jdbc:mysql://localhost:3306/springboot
spring.datasource.username=hhlin
spring.datasource.password=pass

 

# MySQL 8 이상에서 오류 발생 시

spring.datasource.url=jdbc:mysql://localhost:3306/springboot?useSSL=false&allowPublicKeyRetrieval=true

-> useSSL=true로 주고, truststore를 줘서 SSL로 접속을 할 수 있게끔 하는 것이 더 좋음

 

 

 

 

 

 

 

 

 

8. MySQL 라이센스 (GPL) 주의

  • MySQL 대신 MariaDB 사용 검토
  • 소스 코드 공개 의무 여부 확인
docker run -p 3306:3306 --name mysql_boot -e MYSQL_ROOT_PASSWORD=1 -e MYSQL_DATABASE=springboot -e MYSQL_USER=hhlin -e MYSQL_PASSWORD=pass -d mariadb

-> 소스 코드 공개 의무도 없고, 상용화도 가능한 PostgreSQL 사용하는 것이 좋음

 

 

 

 

 

 

 

 

 

 

 

 


https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/dashboard

 

스프링 부트 개념과 활용 - 인프런 | 강의

스프링 부트의 원리 및 여러 기능을 코딩을 통해 쉽게 이해하고 보다 적극적으로 사용할 수 있는 방법을 학습합니다., - 강의 소개 | 인프런...

www.inflearn.com

https://github.com/brettwooldridge/HikariCP#frequently-used

 

GitHub - brettwooldridge/HikariCP: 光 HikariCP・A solid, high-performance, JDBC connection pool at last.

光 HikariCP・A solid, high-performance, JDBC connection pool at last. - GitHub - brettwooldridge/HikariCP: 光 HikariCP・A solid, high-performance, JDBC connection pool at last.

github.com

https://www.yawintutor.com/communications-link-failure/