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/
'Java > Spring Boot' 카테고리의 다른 글
[Spring Boot] Spring-Data-JPA (0) | 2022.04.17 |
---|---|
[Spring Boot] Postgre SQL (0) | 2022.04.10 |
[Spring Boot] 인-메모리 데이터베이스 (0) | 2022.04.10 |
[Spring Boot] CORS (0) | 2022.04.03 |
[Spring Boot] Spring HATEOAS (0) | 2022.04.03 |