[JAVA]자바와 DB를 연결해주는 JDBC

무지성개발자·2023년 9월 4일
0

JDBC(Java Database Connectivity)

JDBC란 JAVA 프로그램에서 DB에 접근하게 해주는 API다. JAVA는 JDBC가 없다고 DB와 커넥션을 못 맺는건 아니다. 하지만 JDBC는 많은 편의성으르 제공하고 특히 개발자 입장에서 DB를 좀 더 유연하게 접근하도록 도와준다.

유연하게 접근한다라는 말은 DB의 종류를 신경쓰지 않아도 된다는 말이다. mysql, oracle 어떤 DB를 써도 JDBC의 Driver만 설정해주면 일관되게 연결해준다.

JDBC 흐름

  • JDBC 드라이버 로딩 : DriverManager를 통해 사용할 드라이버를 로딩한다.
  • Connection 객체 생성 : DB와 연결되는 Connection 생성.
  • Statement 객체 생성 : Statement 객체는 SQL 쿼리문을 실행하기 위한 객체.
  • Query 실행 : Statement 객체를 excuteQuery하여 실행.
  • ResultSet 객체로 데이터 조회 : 실행된 SQL의 결과 데이터 셋.
  • Cloase : 생성된 객체의 역순으로 cloase

크게 보면
JDBC를 통해 연결할 DB드라이버 로딩 -> connection 생성 -> Query 실행 -> 결과 리턴

커넥션 풀(Connection Pool)

커넥션 풀은 DB를 연결할 Connenction객체를 미리 만들어 놓고 한 곳에서 관리하는 하는 것이다. DB 요청이 있을 때마다 이 Pool에 있는 Connection 객체를 할당해서 사용한다.

그렇다면 왜 Connection을 미리 만들어서 사용할까?

커넥션 생성 과정

  • 애플리케이션은 DB를 사용하기 위해 Connection을 조회.
  • DB드라이버는 DB와 Connection을 맺기 위해 TCP/IP로 연결.(3-way handshake)
  • DB드라이버는 DB와 연결이 되면 id, pw 등 부가정보를 DB에 전달.
  • DB는 id, pw를 통해 내부인증을 거친 후 DB 생성.
  • DB는 Connection 생성이 완료 됐다는 응답을 보냄.
  • DB드라이버는 Connection 객체를 생성해서 클라이언트에 전달.

이렇게 Connection을 하나 맺는데 많은 비용이 들기 때문에 요청이 들어올 때마다 하나씩 Connection을 맺어주는 것은 비효율적이다.

이런 문제를 Connection Pool을 통해 해결한 것이다.

HikariCP

HikariCP는 JDBC Connection Pool의 프레임 워크다. Spring boot 2버전부터 default로 HiariCP를 사용한다.

HikariCP는 가벼운 용량과 빠른 속도가 장점이다.

HikariCP는 Connection Pool을 어떻게 관리할까

먼저 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

profile
no-intelli 개발자 입니다. 그래도 intellij는 씁니다.

0개의 댓글