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
'DataBase' 카테고리의 다른 글
[SQL] Inner Join에서 조인 조건이 같을 시, 테이블 순서의 영향이 있을까? (0) | 2023.07.10 |
---|---|
[Database] ACID(원자성, 일관성, 고립성, 지속성) (0) | 2023.05.21 |
[Database] UPSERT에 대해 (1) | 2022.11.15 |
[Database] ORM에 대해 (0) | 2022.08.20 |
SQLD(SQL Developer) 자격증이란? / 자격증 취득 후기 (0) | 2022.04.15 |