커넥션 풀은 왜 필요할까?
웹 애플리케이션이 데이터베이스(DB)에 연결해 작업하려면 매번 연결을 새로 만들어야 합니다. 하지만 이 과정은 시간과 자원을 많이 소모합니다.
그래서 "커넥션 풀"이라는 개념이 등장했습니다.
커넥션 풀(Connection Pool) 은 데이터베이스와의 연결(커넥션)을 미리 여러 개 열어 놓고 관리하며, 애플리케이션에서 요청이 들어올 때마다 이 미리 만들어진 커넥션을 재사용하는 방식입니다.
커넥션 풀의 장점
- 커넥션 생성/종료 비용 절약
- 연결된 커넥션의 수 관리 (리소스 최적화)
- DB 성능 및 애플리케이션 응답 속도 향상
커넥션 풀은 어떻게 동작하나?
커넥션 풀의 기본 동작 방식은 다음과 같습니다:
- 초기화: 미리 정해둔 수(min)의 커넥션을 열고 대기 상태로 유지합니다.
- 할당(acquire): 요청이 들어오면 idle 상태(대기 상태)의 커넥션을 할당해줍니다.
- 반납(release): 작업이 끝나면 풀로 다시 반납하여 재사용합니다.
- 관리: 오랫동안 사용되지 않은 idle 커넥션은 풀에서 정리됩니다.
Idle 커넥션 vs Leased 커넥션
- Idle 커넥션: 현재 사용되지 않고 풀에 대기 중인 커넥션.
- Leased 커넥션: 현재 쿼리를 실행 중인 커넥션으로, 다른 요청에서 사용할 수 없습니다.
커넥션이 leased 상태에서 idle 상태로 돌아가지 않으면, 새로운 요청이 계속 들어와 결국 풀은 가득 차게 되고 타임아웃 에러가 발생하게 됩니다.
MikroORM과 커넥션 풀 관리
MikroORM은 내부적으로 Knex와 Tarn이라는 라이브러리를 사용하여 커넥션 풀을 관리합니다.