JDBC
란 JAVA 프로그램에서 DB에 접근하게 해주는 API다. JAVA는 JDBC가 없다고 DB와 커넥션을 못 맺는건 아니다. 하지만 JDBC는 많은 편의성으르 제공하고 특히 개발자 입장에서 DB를 좀 더 유연하게 접근하도록 도와준다.
유연하게 접근한다라는 말은 DB의 종류를 신경쓰지 않아도 된다는 말이다. mysql, oracle 어떤 DB를 써도 JDBC의 Driver만 설정해주면 일관되게 연결해준다.
크게 보면
JDBC를 통해 연결할 DB드라이버 로딩 -> connection 생성 -> Query 실행 -> 결과 리턴
커넥션 풀은 DB를 연결할 Connenction객체를 미리 만들어 놓고 한 곳에서 관리하는 하는 것이다. DB 요청이 있을 때마다 이 Pool에 있는 Connection 객체를 할당해서 사용한다.
그렇다면 왜 Connection을 미리 만들어서 사용할까?
이렇게 Connection을 하나 맺는데 많은 비용이 들기 때문에 요청이 들어올 때마다 하나씩 Connection을 맺어주는 것은 비효율적이다.
이런 문제를 Connection Pool을 통해 해결한 것이다.
HikariCP는 JDBC Connection Pool의 프레임 워크다. Spring boot 2버전부터 default로 HiariCP를 사용한다.
HikariCP는 가벼운 용량과 빠른 속도가 장점이다.
먼저 Pool에 사용가능한 Connection이 있을 때 상황이다.
가장 최근에 사용한 Connection이 있는지 확인하고 없으면 사용했었던 Connection이 있는지 확인하고 없으면 전체 Connection중 사용할 수 있는걸 찾는다.
다음은 모든 Connection이 사용 중일 때 상황이다.
사용가능한 Connection이 없다면 HandOffQueue에 계속 Polling하여 다른 요청이 끝나고 반납한 Connection이 있는지 체크한다. Connection이 반납되었다면 오래 기다린 요청순서대로 할당한다.
한 줄평 : JDBC는 스펙이기 때문에 스펙에 맞는 DB라면 DB 종류를 바꿔도 유연하게 대처가 가능하다.
참고 -
https://ittrue.tistory.com/250
https://code-lab1.tistory.com/209