📌 데이터베이스 커넥션?

🔌 데이터베이스 커넥션 획득 과정
- 애플리케이션 로직이 DB 드라이버를 통해 커넥션 조회
- DB 드라이버가 DB와
TCP/IP 커넥션 연결(3 way handshake 발생)
TCP/IP 커넥션이 연결되면 ID, PW 같은 부가정보를 DB에 전송
- DB는 ID, PW를 통해 인증을 완료한 후 내부에 DB 세션을 생성
- DB가 커넥션 생성 완료 응답 반환
- DB 드라이버가 커넥션 객체를 생성하여 반환
🤯 과정의 복잡함과 비효율
- 커넥션을 새로 만드는 것은 과정도 복잡하고 많은 시간 소모
- DB와 애플리케이션 서버에서
TCP/IP 커넥션을 새로 생성하기 위한 리소스 소모
- SQL을 실행할 때마다 커넥션을 새로 만드는 추가 시간 소요
⚠️ 이러한 영향으로 애플리케이션의 응답 속도에 영향을 주고, 이는 사용자에게 좋지 않은 경험을 줄 수 있다.
📌 커넥션 풀
위에 문제를 해결하기 위해 등장한 방법이 커넥션을 미리 생성하고 사용하는 방식인 커넥션 풀(connection pool)이다.

- 애플리케이션이 시작되면 커넥션 풀은 필요한 만큼 커넥션을 미리 확보하여 풀에 보관(보통 10개)
- 커넥션 풀에 들어 있는 커넥션은
TCP/IP로 DB와 커넥션이 연결되어 있어 SQL을 DB에 전달 가능

- 애플리케이션은 DB 드라이버를 통하지 않고 커넥션 풀에 이미 생성된 커넥션을 객체 참조로 사용
- 커넥션 풀에 커넥션을 요청하면 커넥션 풀이 가진 커넥션 중 하나를 반환

- 커넥션 풀에서 받은 커넥션으로 SQL을 DB로 전달하고 결과를 받아 처리
- 작업이 끝나면 커넥션을 종료하지 않고 재사용할 수 있도록 살아있는 상태로 커넥션 풀에 반납
✅ 정리
- 커넥션 풀은 서버당 최대 커넥션 개수를 제한할 수 있기에 DB에 무한정 연결이 생성되는 것을 막아주어 DB를 보호
- 커넥션 풀로 얻는 이점이 매우 크기 때문에 실무에선 항상 기본으로 사용
- 대표적인 커넥션 풀 오픈소스
commons-dbcp2 tomcat-jdbc pool HikariCP가 있고 Spring Boot 2.0 부터 기본 커넥션 풀로 HikariCP를 사용(성능, 편리함, 안정성이 이미 검증)
참고자료
스프링 DB 1편 - 데이터 접근 핵심 원리(인프런 김영한 강사님)