커넥션 풀은 왜 필요할까?

웹 애플리케이션이 데이터베이스(DB)에 연결해 작업하려면 매번 연결을 새로 만들어야 합니다. 하지만 이 과정은 시간과 자원을 많이 소모합니다.

그래서 "커넥션 풀"이라는 개념이 등장했습니다.

커넥션 풀(Connection Pool) 은 데이터베이스와의 연결(커넥션)을 미리 여러 개 열어 놓고 관리하며, 애플리케이션에서 요청이 들어올 때마다 이 미리 만들어진 커넥션을 재사용하는 방식입니다.

커넥션 풀의 장점

커넥션 풀은 어떻게 동작하나?

커넥션 풀의 기본 동작 방식은 다음과 같습니다:

  1. 초기화: 미리 정해둔 수(min)의 커넥션을 열고 대기 상태로 유지합니다.
  2. 할당(acquire): 요청이 들어오면 idle 상태(대기 상태)의 커넥션을 할당해줍니다.
  3. 반납(release): 작업이 끝나면 풀로 다시 반납하여 재사용합니다.
  4. 관리: 오랫동안 사용되지 않은 idle 커넥션은 풀에서 정리됩니다.

Idle 커넥션 vs Leased 커넥션

커넥션이 leased 상태에서 idle 상태로 돌아가지 않으면, 새로운 요청이 계속 들어와 결국 풀은 가득 차게 되고 타임아웃 에러가 발생하게 됩니다.

MikroORM과 커넥션 풀 관리

MikroORM은 내부적으로 Knex와 Tarn이라는 라이브러리를 사용하여 커넥션 풀을 관리합니다.