DataBase

DB Connection Pool (데이터베이스 연결 풀) 개념

범데이 2025. 1. 25. 13:28
728x90

DB Connection Pool은 애플리케이션이 데이터베이스와의 연결(Connection)을 효율적으로 관리하기 위한 기술이다.

 

 

 

 

1. 왜 Connection Pool이 필요한가?

애플리케이션이 데이터베이스와 통신하려면 DB연결이 필요하다.

 

- 매번 새로운 연결을 생성하고 해제하는 것은 성능 저하와 자원 낭비를 초래한다.

- 특히, 대량의 요청이 발생하면 연결 생성/해제 오버헤드로 인해 응답속도가 느려지고 시스템 부하가 증가한다.

 

따라서 Connection Pool을 사용하여 DB 연결을 미리 생성하두고 필요할 때 재사용하여 성능을 향상시킨다.

 

 

 

2. Connection Pool의 동작 방식

1. 초기 연결 생성

- 애플리케이션이 시작될 떄, 설정된 개수만큼 DB 연결을 생성하여 "풀(Pool)"에 저장한다.

 

2. 연결 제공(Connection Borrowing)

- 애플리케이션이 DB 연결이 필요할 떄, 새로운 연결을 만드는 대신 풀에서 기존 연결을 가져와 사용한다.

 

3. 연결 반환(Connection Returning)

- 사용이 끝난 연결은 닫지 않고 다시 풀에 반환하여 다른 요청이 재사용할 수 있도록 한다.

 

4. 최소/쵀대 연결 개수 유지

- 풀은 설정된 최소(Min Pool Size)최대(Max Pool Size) 개수를 유지하며, 필요에 따라 동적으로 연결을 추가하거나 해제한다.

 

 

 

3. Connection Pool의 장점

- 성능 향상

  - 매번 연결을 새로 생성하는 비용을 줄여 DB 성능을 최적화한다.

 

- 리소스 효율성

  - 불필요한 연결 생성-해제를 방지하여 서버 및 DB 부하를 줄인다.

 

- 빠른 응답 속도

  - 미리 생성된 연결을 사용하므로, 클라이언트 요청에 빠르게 응답할 수 있다.

 

- 동시성 지원

  - 여러 요청을 효과적으로 처리할 수 있어 대규모 트래픽 환경에서도 유용하다.

 

 

 

4. Conenction Pool의 단점 및 유의할 점

- 연결 누수(Leak) 발생 가능

  - Close() 또는 Dispose()를 호출하지 않으면 연결이 풀로 반환되지 않아 연결이 고갈될 위험이 있다.

  - 따라서 사용이 끝나면 반드시 연결을 반환해야 한다.

 

- 풀 크기 설정이 중요

  - 너무 작은 크기로 설정하면 연결이 부족하여 대기 시간이 증가할 수 있다.

  - 너무 큰 크기로 설정하면 불필요한 연결이 유지되어 DB 리소스를 낭비할 수 있다.

 

- 동일한 Connection String을 사용해야 재사용됨

  - Connection Pool은 동일한 Connection String을 사용하는 경우에만 기존 연결을 재사용한다.

  - Connection String이 다르면 새로운 풀이 생성되므로 불필요한 연결 풀이 증가할 수 있다.

 

 

 

5. .NET 4.6.1 + MSSQL에서 Connection Pool 예제

.NET의 SqlConnection은 기본적으로 Connection Pool을 자동으로 사용한다.

using System;
using System.Data.SqlClient;

class Program
{
    static void Main()
    {
        string connectionString = "Server=myServer;Database=myDB;User Id=myUser;Password=myPassword;";

        for (int i = 0; i < 5; i++)
        {
            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                conn.Open();
                Console.WriteLine($"Connection {i + 1} opened.");

                using (SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM Users", conn))
                {
                    int count = (int)cmd.ExecuteScalar();
                    Console.WriteLine($"User Count: {count}");
                }

                conn.Close(); // Close()를 호출하면 연결이 풀로 반환됨
            }
        }
    }
}

 

 

 

6. Connection Pool 설정 및 튜닝

.NET에서는 Connection String에서 Connection Pool을 설정할 수 있다.

string connectionString = "Server=myServer;Database=myDB;User Id=myUser;Password=myPassword;Min Pool Size=5;Max Pool Size=100;Pooling=true;";

 

옵션 설명
Pooling=true Connection Pool 사용 여부 (기본값: true)
Min Pool Size=5 최소 5개의 연결을 유지
Max Pool Size=100 최대 100개의 연결 허용
Connection Timeout=30 연결 시도 제한 시간 (초)
Connection Lifetime=60 특정 시간이 지나면 연결을 폐기 후 새 연결 생성

 

 

7. 정리

- DB Connection Pool은 기존 연결을 재사용하여 성능을 최적화하는 기술이다.

- 불필요한 연결 생성/해제를 줄여 DB 부하를 낮추고 응답 속도를 향상시킨다.

- Close() 또는 Dispose()를 반드시 호출하여 연결 누수를 방지해야 한다.

- Connection String이 동일한 경우에만 풀을 공유하여 기존 연결을 재사용한다.

- 적절한 Pool 크기 설정이 중요하며, .NET에서는 Connection String 옵션으로 튜닝할 수 있다.

 

 

즉, Connection Pool을 활용하면 DB 연결을 보다 효율적으로 관리할 수 있다.

 

 

 


#References

https://shuu.tistory.com/130

https://learn.microsoft.com/ko-kr/dotnet/api/system.data.sqlclient.sqlconnection.connectionstring?view=net-9.0-pp

https://velog.io/@mooh2jj/%EC%BB%A4%EB%84%A5%EC%85%98-%ED%92%80Connection-pool%EC%9D%80-%EC%99%9C-%EC%93%B0%EB%8A%94%EA%B0%80

https://steady-coding.tistory.com/564

https://www.connectionstrings.com/sql-server/

반응형