[TIL] 11월 2일: DB Connection Pool

Jung·2021년 11월 2일
0

TIL

목록 보기
41/77
post-thumbnail

RDS Proxy를 사용하는 이유 중 하나는 애플리케이션이 데이터베이스 연결을 풀링하고 공유하도록 허용하여 확장 기능을 향상시킬 수 있다는 점이다. 여기서 데이터베이스 연결을 풀링한다는 것이 무엇인지 궁금해서 찾아보게 되었다.

DB Connection

데이터베이스 서버와 해당 클라이언트 소프트웨어가 서로 통신하는 수단

Connection Pool

사용자의 요청에 따라 Connection을 생성하다 보면 많은 수의 연결이 발생했을 때 서버에 과부하가 걸리게 된다. 이러한 상황을 방지하기 위해 WAS가 실행 될 때 미리 일정 수의 Connection 객체를 만들어 Pool에 담아 두었다가 사용자의 요청이 발생하면 연결해주고 연결 종료 시 Pool에 다시 반환하여 보관하는 것이다.

DB Connection Pool 매니저가 일정의 Connection을 연결하고 있다가 요청이 들어오면 Connection을 할당해주고 없으면 기다리게 한다. 클라이언트는 Connection을 다 쓰면 다시 반납하는 구조로 이루어진다. 따라서 속도나 성능이 향상된다.

보통의 경우에는 DB에 연결하고 결과를 가져온 후에 끊는다 . DB에 연결하는 과정은 시간이 많이 소요되고 비용이 비싼 연산이며 성능도 많이 떨어진다. 이러한 문제점을 해결하기 위해 DB Connection pool을 사용한다. 한번 맺은 DB Connection을 바로 끊지 않고 Pool에 저장한 뒤 동일한 Connection 요청이 오면 바로 Pool에서 꺼내 제공함으로써 빠른 DB 연결 시간을 보장해 준다 .

Connection Pool의 구조

DBMS로의 연결이 오래 걸리며 DB 작업을 할 때마다 Connection ~ Close까지의 반복 작업이 비효율적이기 때문에 Connection pool에 Connection 객체를 생성해 놓고 DB 작업 시 pool에서 빌려 사용 후 다시 반납하는 구조로 되어 있다. Connection pool을 구현하기 위해 스펙을 정해놓은 인터페이스인 DataSource를 사용하여 구현할 수 있다.

DataSource: 데이터베이스에 대한 연결을 제공하는 서비스다. 다양한 방식의 데이터베이스 연결을 제공하고, 이에 대한 추상화 계층을 제공함으로써, 업무 로직과 데이터베이스 연결 방식 간의 종속성을 배제한다.

Connection Pool 처리 과정

  1. 미리 Connectoin을 일정 수만큼 생성시킨 뒤 Connection을 빌려주고 다시 반환 받는 형식으로 Connection을 관리한다.
  2. Connection Pool 에서 필요한 만큼 Connection을 미리 생성한다.
  3. Connection이 필요할 때 Connection Pool에서 빌려서 사용한다.
  4. 사용이 끝난 다음에는 Connection을 Connection Pool에 반환한다.

Connection Pool 장점

  1. DB 접속 설정 객체를 미리 만들어 연결하고 메모리 상에 등록해 클라이언트가 빠르게 DB에 접속할 수 있다.
  2. DB Connection 수를 제한할 수 있어 과다한 접속으로 인한 서버의 자원 고갈을 막을 수 있다.
  3. DB 접속 모듈을 공통화해 DB 서버의 환경이 바뀔 경우 유지보수를 쉽게 할 수 있다.
  4. 연결이 끝난 Connection을 재사용함으로써 새로 객체를 만드는 비용을 줄일 수 있다.

Connection Pool 유의 사항

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.

profile
97kim.github.io

0개의 댓글