RDS Proxy를 사용하는 이유 중 하나는 애플리케이션이 데이터베이스 연결을 풀링하고 공유하도록 허용하여 확장 기능을 향상시킬 수 있다는 점이다. 여기서 데이터베이스 연결을 풀링한다는 것이 무엇인지 궁금해서 찾아보게 되었다.
데이터베이스 서버와 해당 클라이언트 소프트웨어가 서로 통신하는 수단
사용자의 요청에 따라 Connection을 생성하다 보면 많은 수의 연결이 발생했을 때 서버에 과부하가 걸리게 된다. 이러한 상황을 방지하기 위해 WAS가 실행 될 때 미리 일정 수의 Connection 객체를 만들어 Pool에 담아 두었다가 사용자의 요청이 발생하면 연결해주고 연결 종료 시 Pool에 다시 반환하여 보관하는 것이다.
DB Connection Pool 매니저가 일정의 Connection을 연결하고 있다가 요청이 들어오면 Connection을 할당해주고 없으면 기다리게 한다. 클라이언트는 Connection을 다 쓰면 다시 반납하는 구조로 이루어진다. 따라서 속도나 성능이 향상된다.
보통의 경우에는 DB에 연결하고 결과를 가져온 후에 끊는다 . DB에 연결하는 과정은 시간이 많이 소요되고 비용이 비싼 연산이며 성능도 많이 떨어진다. 이러한 문제점을 해결하기 위해 DB Connection pool을 사용한다. 한번 맺은 DB Connection을 바로 끊지 않고 Pool에 저장한 뒤 동일한 Connection 요청이 오면 바로 Pool에서 꺼내 제공함으로써 빠른 DB 연결 시간을 보장해 준다 .
DBMS로의 연결이 오래 걸리며 DB 작업을 할 때마다 Connection ~ Close까지의 반복 작업이 비효율적이기 때문에 Connection pool에 Connection 객체를 생성해 놓고 DB 작업 시 pool에서 빌려 사용 후 다시 반납하는 구조로 되어 있다. Connection pool을 구현하기 위해 스펙을 정해놓은 인터페이스인 DataSource를 사용하여 구현할 수 있다.
DataSource: 데이터베이스에 대한 연결을 제공하는 서비스다. 다양한 방식의 데이터베이스 연결을 제공하고, 이에 대한 추상화 계층을 제공함으로써, 업무 로직과 데이터베이스 연결 방식 간의 종속성을 배제한다.
Connection Pool을 이용할 때 Connection Pool의 수와 쓰레드의 수, Connection Pool의 재사용시 초기화가 제대로 되는지 등을 확인해야 한다. 그렇지 않으면 메모리 부족 또는 응답 시간 초과로 인한 에러가 발생하거나 입력한 값이 제대로 나오지 않을 수 있기 때문이다.
참조
“What Is Database Connection? What Does Database Connection Mean? Database Connection Meaning.” YouTube, YouTube, 6 Mar. 2017, https://www.youtube.com/watch?v=zGcPXcYVB5A.
kdata, ㈜엑셈, https://www.kdata.or.kr/info/info_04_view.html?field=&keyword=&type=techreport&page=18&dbnum=183740&mode=detail.