connection pool이란?

꼴쥐마스타·2021년 10월 1일

Tip

목록 보기
1/1

Connection Pool의 탄생 배경

앱 사용자가 데이터베이스와의 연동에 해당하는 작업(Database Interaction)을 하기 위해, 앱의 백엔드 서버는 데이터베이스에 접근하기 위해 connection을 생성한다.
이때 서버는 동시에 사용할 수 있는 사람의 수라는 개념이 존재한다.
일반적인 connection을 사용시, 동시에 허용 가능한 사용자의 수가 초과될 경우 에러가 발생한다.
이 문제를 해결하기 위해 탄생한 것이 connection pool이다.

Connection Pool의 생성 원리

웹 프로그램에서는 데이터베이스의 환경설정과 연결관리 등을 따로 xml파일 등과 같이 속성파일등을 생성하여 관리한다.
생성한 연결 파일을 활용하여 웹컨테이너가 생성되는 시점에 connection객체들을 미리 connection pool에 생성한다.
때문에 데이터베이스의 부화를 줄이고, 유동적으로 데이터베이스와의 연결을 관리할 수 있다.

Connection Pool 사용 형태

connection pool은 안에 여러개의 connection객체를 보유하고있으며,
접속한 사용자에게 각각의 connection을 할당하는 구조이다.
pool에서 보유한 connection객체의 수가 모자를 만큼 너무 많은 사용자가 있을 경우, 해당 클라이언트는 대기 상태에있다가 connection이 확보되면 그때 제공받는다.

Connection Pool 사용 예시

한명의 접속자가 웹사이트에 접속하여 게시판에 게시물을 작성하는 액션이 있다.
1️⃣ 첫번째 DB상호작용 : 데이터 취득(게시물 정보 조회)
2️⃣ 두번째 DB상호작용 : 검색 후 데이터 취득(검색 옵션 적용 게시물 정보 조회)
3️⃣ 세번째 DB상호작용 : 데이터 등록(직접 게시물 작성)
4️⃣ 네번째 DB상호작용 : 데이터 갱신(변경된 게시물 정보 조회)
한명의 작업이 위와 같이 4번의 DB Connection을 필요로 한다.
하지만 동시 접속자 1000명이 동시에 같은 작업을 한다면?
이러한 오버헤드를 방지하기 위해 미리 Connection객체들을 생성하여 Connection Pool에 할당하여 관리하는 것이다.
사용자들은 DB연동 작업이 필요할 때 마다 Connection Pool에서 Connection객체를 꺼내어 사용하고 반납한다.

Connection Pool 사용 장점

1️⃣ Pool에 미리 Connection객체들이 생성되어 있어 Connection을 생성하는 시간이 소요되지 않는다.
이는 앱의 속도와 연관된다.
2️⃣ 한번에 사용될 수 있는 Connection객체들의 수를 직접 제어할 수 있기 때문에 동시 접속자 수가 크게 몰려도 앱이 쉽게 다운되지 않는다.

Connection Pool 사용시 주의사항

Connection Pool을 너무 크게 생성하면 당연히 메모리 소모가 크다.
너무 적게 해 놓으면 대기상태에 있는 사용자의 수가 많아진다.
때문에 앱 사용자 수를 고려하여 적당한 크기의 Connection Pool생성이 요구된다.

profile
백엔드 엔지니어 꼴쥐입니다.

0개의 댓글