JDBC란?
- JDBC(Java Database Connectivity)는 자바에서 DB 프로그래밍을 하기 위해 사용되는 API다.
- SQL과 DBMS 간의 통신을 가능하게 해 주며, 다양한 종류의 데이터베이스에 접근할 수 있다.
즉, JDBC를 사용하면 Java Application에서 DB에 접근하여 데이터 검색, 삽입, 갱신, 삭제를 할 수 있다.
JDBC Architecture
- DriverManager:
- DriverManager는 JDBC 드라이버를 관리하는 클래스이다.
- 이 클래스는 등록된 드라이버들 중에서 DB 연결을 위한 적절한 드라이버를 선택하는 역할을 수행한다.
- Driver:
- Driver 인터페이스는 DB에 연결하고, SQL 문을 실행하는데 필요한 메서드를 제공한다.
- 각 데이터베이스 벤더는 이 Driver 인터페이스를 구현한 클래스를 제공하며, 이 클래스가 바로 JDBC 드라이버이다.
- Connection:
- Connection 인터페이스는 특정 DB에 대한 연결을 표현한다.
- 이 연결을 통해 SQL 문을 실행하는데 필요한 Statement, PreparedStatement, CallableStatement 객체를 생성할 수 있다.
- Statement:
- Statement 인터페이스는 SQL 문을 DB에 보내기 위한 메서드를 제공한다.
- 이 인터페이스를 구현한 클래스의 객체를 통해 SQL 문을 실행하고 그 결과를 받아올 수 있다.
- Statement는 일반적인 SQL 문을 실행하는 데 사용되며, PreparedStatement는 매개변수화된 SQL 문을 실행하는 데 사용되고, CallableStatement는 DB 내의 저장 프로시저를 실행하는 데 사용된다.
- ResultSet:
- ResultSet 인터페이스는 DB에서 검색된 데이터를 표현하는 객체이다.
- SELECT 문을 실행한 결과는 ResultSet 객체로 반환되며, 이 객체를 통해 결과로 받은 데이터를 순회하고 조회할 수 있다
커넥션 풀(Connection Pool)
커넥션 풀?
데이터베이스 연결은 생성하고 종료하는 데 상당한 시간과 리소스가 소요되므로,
이를 재사용하면 성능을 크게 향상시킬 수 있다.
- JDBC 커넥션 풀(Connection Pool)은 데이터베이스 연결을 재사용할 수 있도록 관리하는 기술이다.
- 커넥션 풀은 미리 여러 개의 데이터베이스 연결을 생성해 두고, 필요할 때마다 이를 제공하고 반환 받는 방식으로 작동한다.
- 이를 통해 연결과 종료에 필요한 시간을 절약하고, 동시에 여러 요청을 더 효율적으로 처리할 수 있다.
커넥션 풀 작동 방식
- 초기화 단계에서 커넥션 풀은 설정된 수만큼의 커넥션을 생성한다.
- 애플리케이션이 데이터베이스 연결을 요청하면, 커넥션 풀은 이를 제공한다.
- 애플리케이션이 연결을 종료하면, 실제로 연결을 종료하는 대신 커넥션 풀은 이를 재사용 대기열에 반환한다.
- 모든 연결이 사용 중일 때 새로운 연결 요청이 들어오면, 커넥션 풀은 새로운 커넥션을 생성하거나 대기 상태로 전환할 수 있다.(설정에 따라 다름)
JDBC 커넥션 풀은 데이터베이스 작업의 성능과 효율성을 크게 향상시키는 중요한 기술이지만,
너무 많은 커넥션을 생성하면 불필요한 리소스 사용을 늘리고 시스템 성능을 저하시킬 수 있다.
HikariCP란?
HikariCP는 자바(JDBC) 데이터베이스 연결 풀링 라이브러리다.
이 라이브러리는 데이터베이스 연결에 대한 효율적인 관리를 가능하게 하여,
데이터베이스 작업의 성능을 향상시키는데 큰 역할을 한다.
위 사진은 JDBC와 HikariCP 벤츠마크를 수행한 결과이다.
- Connection Cycle ops/ms:
- 연결을 얻고, 사용하고, 반환하는 전체 사이클을 측정한 것이다.
- 밀리초당 연산 수를 의미하며, 이 값이 클 수록 성능이 좋다.
- Constrained는 연결 풀의 크기가 제한되어 있음을 나타내는데 동시에 수행할 수 있는 연산의 수가 제한된다. 이러한 환경에서도 높은 성능을 유지한다.
- Unconstrained는 제한되어 있지 않음을 나타내는데 이 경우, 동시 수행할 수 있는 연산의 수는 서버의 성능에만 의존하지만 이러한 환경에서도 높은 성능을 유지한다.
- Statement Cycle ops/ms:
- SQL문을 실행하는 전체 사이클을 측정한 것이다.
- 밀리초당 연산 수를 의미하며, 이 값이 클 수록 성능이 좋다.
- HikariCP는 다른 연결 풀 라이브러리들보다 높은 점수를 보여주는데 SQL문을 빠르게 실행할 수 있음을 나타낸다.
위 벤치마크 결과 상으로도 CP 프레임워크 시장에서 HikariCP는 압도적으로 점유하고 있다.
HikariCP 특징
- 빠른 성능:
- HikariCP는 성능에 중점을 둔 설계로 알려져 있다.
- 다른 많은 JDBC 커넥션 풀 라이브러리들과 비교하여 더 빠른 성능을 제공한다.
- 간단한 구성:
- HikariCP는 최소한의 설정만으로도 사용이 가능하며, 이를 통해 빠르게 시작할 수 있다.
- 또한, 세세한 부분까지 설정을 커스터마이징 할 수 있다.
- 안정성:
- HikariCP는 연결이 끊어졌을 때나 문제가 발생했을 때 잘 처리하는 능력에 중점을 둔다.
- 이를 통해 데이터베이스 작업의 안정성을 높일 수 있다.
HikariCP를 사용하면, 데이터베이스 연결에 대한 관리를 효율적으로 할 수 있으며,
이를 통해 데이터베이스 작업의 성능을 크게 향상시킬 수 있고, 데이터베이스에 대한 부하를 줄일 수 있다.
참고 : https://flylib.com/books/en/2.177.1.75/1/
참고 : https://medium.com/javarevisited/choosing-the-right-jdbc-connection-pool-c9ef90588d55