부트 개념과 활용-23.DBCP와 MySQL(스프링 데이터)
부트 개념과 활용-23.DBCP와 MySQL(스프링 데이터)
DBCP(데이터베이스 커넥션 풀)
데이터베이스의 커넥션을 만들고 하는 작업들은 과정이 많은 작업이 이루어지기 때문에 짧지 않고 복잡하다.
커넥션을 미리 만들어 놓고, 미리 만들어 놓은 커넥션을 가져다 쓰는 방법.
얼마나 만들어 놓을 것이냐. 얼마나 유지할 것이냐. 얼마동안 안쓰이면 없앨 것이냐. 최소한 몇개를 유지할 것이냐 최소한 얼마동안 이 커넥션을 애플리케이선에 전달을 못하면 에러를 던질 것이냐. 등등..
어플리케이션 성능에 아주 핵심적인 역할.
지원하는 DBCP
- HikariCP (기본)
https://github.com/brettwooldridge/HikariCP#frequently-used- autoCommit 기본 값 true : 커밋 명시 안해도 자동으로 적용
- connectionTimeout 기본 값 30초 : 30초 동안 응답 못하면(커넥션 객체 전달 못하면) 에러
- maximumPoolSize 기본 10개 : 커넥션 몇 개나 유지할 것이냐. CPU 코어 개수만큼만 동시에 실행 가능.(많다고 많은 걸 동시에 실행 가능한 건 아니다)
Tomcat CP
- Commons DBCP2
DBCP 설정
- spring.datasource.hikari.*
- spring.datasource.tomcat.*
- spring.datasource.dbcp2.* ex.
spring.datasource.hikari.auto-commit=true spring.datasource.hikari.maximum-pool-size=4
MySQL(스프링 데이터) 사용
MySQL 커넥터 의존성 추가
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
MySQL 추가 (도커 사용)
도커 설치 참조: https://docs.docker.com/docker-for-mac/
MYSQL 컨테이너 생성, user=jaeuk / pw=pass
docker run -p 3306:3306 --name mysql_boot -e MYSQL_ROOT_PASSWORD=1 -e MYSQL_DATABASE=springboot -e MYSQL_USER=jaeuk -e MYSQL_PASSWORD=pass -d mysql
docker exec -i -t mysql_boot bash
mysql -u root -p
MySQL용 Datasource 설정 application.properties
#spring.datasource.url=jdbc:mysql://localhost:3306/springboot
spring.datasource.url=jdbc:mysql://localhost:3306/springboot?useSSL=false
spring.datasource.username=jaeuk
spring.datasource.password=pass
MySQL 접속시 에러
MySQL 5.* 최신 버전 사용할 때
문제 Sat Jul 21 11:17:59 PDT 2018 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
해결 jdbc:mysql:/localhost:3306/springboot?useSSL=falseMySQL
8.* 최신 버전 사용할 때
문제 com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Public Key Retrieval is not allowed
해결 jdbc:mysql:/localhost:3306/springboot?useSSL=false&allowPublicKeyRetrieval=trueMySQL 라이센스 (GPL) 주의
MySQL 대신 MariaDB 사용 검토
소스 코드 공개 의무 여부 확인
참고 도커 실행 명령어.
02:17:29 jaeuk@JUui-MacBook-Pro15 ~ 42s
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
eb66148aa003 mysql "docker-entrypoint.s…" 28 minutes ago Up 28 minutes 0.0.0.0:3306->3306/tcp, 33060/tcp mysql_boot
02:17:32 jaeuk@JUui-MacBook-Pro15 ~
$ docker exec -i -t mysql_boot bash
root@eb66148aa003:/# mysql -u jaeuk -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 16
Server version: 8.0.18 MySQL Community Server - GPL
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| springboot |
+--------------------+
2 rows in set (0.00 sec)
mysql> use springboot
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+----------------------+
| Tables_in_springboot |
+----------------------+
| USER |
+----------------------+
1 row in set (0.01 sec)
mysql> select * from USER;
+----+-------+
| ID | name |
+----+-------+
| 1 | jaeuk |
+----+-------+
1 row in set (0.00 sec)
mysql>exit