JDBC의 필요성
- TCP/IP를 사용해 DB와 커넥션을 연결한다.
- Server는 DB로 SQL을 전달하는데, DB마다 커넥션 연결/ SQL 통신 방법이 모두 다르다는데 문제가 있다.
JDBC
JDBC(Java Database Connectivity)
는 자바에서 DB에 접속할 수 있도록 하는 자바 API이다.
JDBC
는 여러 개의 DB Driver를 추상화한 Layer를 제공하는 방법으로 위와 같은 문제를 해결한다.
- 좀 더 자세히 들어가면 이 사이에는
DriverManager
가 존재한다. 아래를 보자
커넥션 풀
- 지금까지의 내용만 본다면, DB에 접근하기 위해서는 위 그림과 같이 커넥션을 매번 획득해야 한다는 문제가 존재한다. 게다가 커넥션을 획득하는 과정은 다음과 같이 복잡한 과정을 거쳐야만 한다. 그렇기 때문에 성능상으로도 많은 문제가 존재한다.
- 어플리케이션 로직이 DB 드라이버를 통해 커넥션을 조회한다.
- DB 드라이버는 DB와
TCP/IP
연결을 맺는다
TCP/IP
연결이 맺어지면 DB 드라이버가 DB로 ID/PW와 같은 부가정보를 DB에 전달한다.
- 인증이 완료되면 DB는 내부에 세션을 생성한다.
- DB는 커넥션 생성이 완료되었다는 응답을 보내고 DB 드라이버는 커넥션 객체를 생성해서 이를 클라이언트에게 반환해준다.
커넥션 풀
은 위와 같은 단점을 해결하기 위해 여러 개의 커넥션을 미리 받아두는 작업을 한다.
- 스프링 부트에서는 기본 커넥션 풀로
hikariCP
를 제공하고 실무에서도 대부분 hikariCP
를 사용한다.
DataSource
- 지금까지의 내용으로 따지면 DB 커넥션을 획득하는 방법은 위와 같이 다양하다. 만약,
hikariCP
를 사용하다가 DBCP2
로 변경해야 하는 상황이 발생하면 모든 의존관계와 코드의 많은 부분도 수정을 해야할 것이다.
DataSource
는 커넥션을 획득하는 방법을 추상화한 Layer를 제공한다.
출처: 스프링 DB 1편 - 데이터 접근 핵심 원리