[Spring] 스프링 db
2. 커넥션풀과 데이터소스 이해
데이터베이스 커넥션 획득 과정
- 애플리케이션 로직이 DB 드라이버를 통해서 커넥션을 조회한다.
- DB 드라이버는 DB와 TCP/IP 커넥션을 연결한다. (TCP/IP 연결을 위한 네트워크 동작 발생)
- DB 드라이버는 TCP/IP 커넥션이 연결되면, ID, PW와 기타 부가정보를 DB에 전달한다.
- DB는 ID, PW를 통해 내부 인증을 완료하고, 내부에 DB 세션을 생성한다.
- DB는 커넥션 생성이 완료되었다는 응답을 보낸다.
- DB 드라이버는 커넥션 객체를 생성해서 클라이언트에 반환한다.
- 문제점 : 커넥션을 새로 만드는 과정이 복잡하고 시간이 많이 소모되어 응답 속도에 영향을 미친다.
커넥션 풀
- 애플리케이션 시작 시점에서 커넥션 풀은 필요한 만큼 커넥션을 미리 확보해서 풀에 보관한다.
- 커넥션 풀은 서버당 최대 커넥션 수를 제한할 수 있다.
- 기본값은 보통 10개이다.
- 애플리케이션 로직이 커넥션 풀에 커넥션을 요청하면 풀은 커넥션 중 하나를 반환한다.
- 애플리케이션 로직은 커넥션을 사용해서 SQL을 DB에 전달하고 그 결과를 받아서 처리한다.
- 커넥션 풀에 있는 커넥션은 TCP/IP로 DB와 커넥션이 연결되있는 상태이다.
- 커넥션 사용 후에는 해당 커넥션을 다음에도 사용할 수 있도록 커넥션이 살아있는 상태로 커넥션 풀에 반환한다.
- 커넥션 풀 오픈소스 중 주로
HikariCP
를 사용한다.
DataSource
- 커넥션을 얻는 방법에는
DriverManager
직접 사용HikariCP
와 같은 커넥션 풀을 사용
- 커넥션을 획득하는 방법이 변경된다면 커넥션을 획득하는 애플리케이션 코드도 함께 변경해야 한다.
javax.sql.DataSource
인터페이스 : 커넥션 획득하는 방법을 추상화하는 인터페이스public interface DataSource { Connection getConnection() throws SQLException; }
- 커넥션 조회 기능을 한다.
- 커넥션 풀에 직접 의존하지 않고,
DataSource
인터페이스에만 의존하도록 애플리케이션 로직을 작성해야 한다. DriverManager
은DataSource
인터페이스 사용 불가 ->DriverManagerDataSource
라는DataSource
를 구현한 클래스를 사용하면 된다.
##
김영한의 스프링 DB 1편 - 데이터 접근 핵심 원리을 참고하였습니다