JDBC

Fox·2024년 1월 12일
0
post-thumbnail

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)은 데이터베이스 연결을 재사용할 수 있도록 관리하는 기술이다.
  • 커넥션 풀은 미리 여러 개의 데이터베이스 연결을 생성해 두고, 필요할 때마다 이를 제공하고 반환 받는 방식으로 작동한다.
  • 이를 통해 연결과 종료에 필요한 시간을 절약하고, 동시에 여러 요청을 더 효율적으로 처리할 수 있다.

커넥션 풀 작동 방식

  1. 초기화 단계에서 커넥션 풀은 설정된 수만큼의 커넥션을 생성한다.
  2. 애플리케이션이 데이터베이스 연결을 요청하면, 커넥션 풀은 이를 제공한다.
  3. 애플리케이션이 연결을 종료하면, 실제로 연결을 종료하는 대신 커넥션 풀은 이를 재사용 대기열에 반환한다.
  4. 모든 연결이 사용 중일 때 새로운 연결 요청이 들어오면, 커넥션 풀은 새로운 커넥션을 생성하거나 대기 상태로 전환할 수 있다.(설정에 따라 다름)

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

profile
주니어개발자 Fox 입니다 🦊

0개의 댓글