아래와 같이 spring boot에서 mysql 연동을 위해 datasource 설정을 하는 과정에서 하나의 궁금증이 생겼다.
바로 datasoure 설정 경로에 있는 hikari이다. 이 경로에서 hikari는 무엇이고 무슨 역할을 하는지 찾아 정리해 보았다.
spring.datasource.hikari.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.hikari.jdbc-url=jdbc:mysql://localhost:3306/board?serverTimezone=Asia/Seoul&useUnicode=true&characterEncoding=utf8
spring.datasource.hikari.username=username
spring.datasource.hikari.password=password
우선 간략하게 hikari에 대해 설명하자면 hikari는 hikariCP(hikari connection pool)의 사용을 뜻하고
hikariCP는 데이터베이스의 connection pool을 관리한다.
그렇다면 connection pool이란 무엇일까?
connection pool이란 데이터베이스와 연결된 connection을 관리해 주는 기능인데 이의 가장 큰 장점은
서버 자원의 고갈 방지 및 쉬운 유지보수(DB의 서버환경이 바뀔 경우 유지보수 용이)이다.
(위 사진은 App에서 connection 접근을 위한 connection pool과 DB 사이의 동작 과정을 나타낸다.)
만약 connection pool 없이 DB와 connection을 하게 되면 어떻게 될까?
Thread는 connection 요청을 받은 후 데이터베이스와 직접적으로 connection을 맺을 것이고
이렇게 직접적으로 연결된 데이터베이스는 요청받은 만큼 connection을 제공하기 위해 부하가 발생하게 될 것이다.
하지만 connection pool을 사용하게 되면 connection 요청을 받은 Thread는 pool을 요청하고
이를 요청받은 pool이 connection을 담아 관리하게 된다. 이렇게 관리된 connection을 사용하게 되면
전반적인 connection 관리가 용이해지고 생성 비용이 감소된다는 장점을 가지게 된다.
(서버에서 데이터베이스로 connecting 하는 데에 높은 비용이 소모된다.)
특히 hikariCP는 이러한 connection pool의 기능을 관리하며 미리 정해놓은 수만큼의 connection을
pool에 담아 관리하기 때문에 유용하게 사용되며 현재는 JDBC의 connection pool framework로
spring boot 2.0부터 default DBCP로 사용되고 있다.
Reference
https://medium.com/javarevisited/choosing-the-right-jdbc-connection-pool-c9ef90588d55
https://code-lab1.tistory.com/209
https://brunch.co.kr/@jehovah/24
https://gongbu-ing.tistory.com/103
https://masssal.tistory.com/16
'study > database' 카테고리의 다른 글
MySql - SQLIntegrityConstraintViolationException 에러 (0) | 2023.05.14 |
---|
댓글