DB 드라이버를 통한 기존의 연결
일반적으로 사용자가 DB에 접근할 때, DB와 TCP/IP연결을 한 Connection 이라는 객체가 생성되고
이를 이용해 DB에 접근할 수 있게 된다. 사용 후에는 Connection을 반납받고, 연결을 종료한다.
이로 인해 다시 연결 요청시, Connection 객체를 또 생성을 해야 한다.
이 Conncetion 객체를 생성하는 과정, 즉 DB에 재연결 하는 과정은 시간이 많이 들고 Cost가 높은 연산이기 때문에,
이를 해결하기 위한 개념인 DB Connection pool이 등장했다.
DB Connection pool
서버 시작시 pool 매니저가 일정 개수의 DB Connection 객체를 미리 만들어 pool에 보관한다.
DB 연결 요청이 들어오면 Connection 객체를 꺼내서 사용하게 하고, 사용 후 다시 반납 받는다.
이 때, Connection 객체는 DB와 연결을 끊지 않는다. 이후 요청이 다시 들어오면 Connection 객체를 재사용한다.
Connection 객체를 재사용 함으로써 요청 처리 속도가 빨라지고, DB 리소스 낭비를 줄일 수 있다.
Connection pool 의 종류 및 연결 과정
직접 구현을 해도 되지만, 성능이 좋은 오픈 소스들이 존재한다.
대표적으로 'common-dbcp2', 'HicariCp' 등이 있다.
DB 커넥션을 획득할 때 그림을 보면 이해가 편하다.
DB 드라이버만을 사용할 때와 DB pool을 사용할 때 기본적으로 Connection이 존재하는 위치를 쉽게 알 수 있다.
DB Connection pool 사용시 주의사항
커넥션 풀을 사용하면 무조건 성능이 좋아질까? 그렇지 않다.
만약 다른 이용자들이 DB Connection을 사용하고 있어서 pool에 남은 Connection이 없다고 하자.
이 때 한 이용자가 Connection을 요청하면, 다른 이용자가 Connection을 반납하기를 기다리게 되고, 일정 시간이 지나면 예외처리를 한다.
그렇기 때문에 pool에 미리 만들어 두는 Connection 객체의 개수가 얼마나 적절한지가 성능을 좌우한다.
잉여 Connection이 많다면 낭비되는 메모리 공간이 많을 것이고, 그 반대라면 이용 대기 시간이 길어질 것이다.
때문에 Connection 객체 생성 수를 적절하게 조절해야 최적의 효율을 낼 수 있다.
공부 참고 : https://shuu.tistory.com/130
'WEB > 개념' 카테고리의 다른 글
SSRF(Server Side Request Forgery) 공격 기법 (0) | 2025.05.26 |
---|---|
파일업로드 취약점(File Upload Vulnerability) (0) | 2025.05.19 |
SQL Query(DDL, DCL, DML, DQL) (0) | 2025.05.15 |
CSRF 공격 기법 (1) | 2025.05.14 |
DB, DBMS 란? (0) | 2025.05.14 |