커넥션풀
데이터 베이스 커넥션 획득 과정
- 애플리케이션 로직은 DB 드라이버를 통해 커넥션을 조회
- DB 드라이버는 DB와 TCP/IP 커넥션 연결 -> 3 wayHandShake 같은 TCP/IP 연결 을통한 네트워크 동작 발생
- DB 드라이버는 TCP/IP 커넥션이 연결되면 ID,PW 와 기타 부가정보를 DB에 전달.
- DB 는 ID,PW 를 통해 내부 인증을 완료 -> 내부에 DB 세션을 생성
- DB는 커넥션이 완료됬다고 응답을 보냄.
- DB 드라이버는 커넥션 객체를 생성해서 클라언트 반환해준다.
- 고객이 애플리케이션을 사용할 때 , SQL을 실행하는 시간 뿐만 아니라 커넥션을 새로 만드는 시간이 추가 되기 때문에 결과적으로 응답속도에 영향을 준다.
이 문제를 해결하는 아이디어가 커넥션을 미리 생성해두고 사용하는 커넥션 풀 방법이다.
- 애플리케이션 시작하는 시점에 커넥션 풀은 필요한 만큼 커넥션을 미리 확보해서 풀에 보관
- 기본 값으로 보통 10 개정도 이지만 서비스의 특징과 서버 스펙에 따라서 다를 수 있다.
커넥션 풀에 있는 커넥션의 경우 TCP/IP로 DB와 커넥션이 연결되어 있는 상태이기 때문에 언제든지 즉시 SQL을 DB에 전달 가능.
- 이미 연결되어있는 걸 사용하기 때문에 DB 드라이버를 통해서 새로운 커넥션을 획득하는 것이 아니다.
- 커넥션 풀을 통해 이미 생성되어 있는 커넥션을 객체 참조로 그냥 가져다 쓰기만 하면된다.
- 커넥션 풀에 커넥션 요칭시 커넥션 풀은 자신이 가지고 있는 커넥션 중 하나를 반환해줌.
- 최대 커넥션 수를 제한 할 수 있기 때문에. DB에 무한정 연결이 생성되는 것을 막아주어서 DB를 보호하는 효과도 있다.
커넥션 풀은 개념적으로 단순해서 직접 구현을 할수도 있지만, 사용도 편리하고 뛰어난 오픈소스 커넥션 풀이 많기 때문에 오픈소수를 사용하는 것이 좋다.
- 대표적인 오픈소스 tomcat-jdbc pool,commons-dbcp2,HikariCP 등이 존재
- 스프링 부트 2.0 부터 기본 커넥트 풀로 hikariCP를 제공
- 성능, 사용의 편리함 , 안전성 측면으로 이미 검증 되었기 때문에 그냥 이거 쓰면되긴하다.
- 실무에서도 레거시 프로젝트가 아닌 이상 대부분 이걸 사용.