통합(Integration) 티어 안티 패턴 - Not Pooling Connections
2007/05/27 16:47
1. 문제점
Not Pooling Connections 패턴은 데이터베이스에 쿼리를 할 때마다 데이터베이스 커넥션을 생성.파괴함으로써 생기는 비용을 지적하는 패턴으로, Not Pooling Connections 안태 패턴이 지적하고 있는 문점을 보면 다음과 같음.
데이터베이스와 커넥션을 생성하고 파괴하는 작업은 비용이 많이 드는 작업으로, 어떤 경우에는 간단한 쿼리를 실행하는 것보다 데이터베이스와의 커넥션을 생성하는 작업이 10배나 더 오래검림.
따라서. 필요할 때마다 매번 데이터베이스와의 커넥션을 생성하고 파괴하는 작업을 하지 말하야 함. 대신, 커넥션이 계속해서 많은 쿼리에서 사용될 수 있도록 해야함. 그러나, 데이터베이스와 커넥션할 수 있는 갯수가 제한되어 있기 때문에, 각 콤포넌트가 커넥션을 계속 소유하고 있지 말아야 함.
2. 징후 및 결과 (Symptoms and Consequences)
3. 리팩토링된 해결방안 (Refactoed Solutions)
데이터베이스와의 커넥션을 여러 개 오픈하고 있고, 개개의 콤포넌트에게 가지고 있는 커넥션을 빌려주는 커넥션 풀을 사용.
4. 관련 패턴 (Related Pattern)
Not Pooling Connections 패턴은 데이터베이스에 쿼리를 할 때마다 데이터베이스 커넥션을 생성.파괴함으로써 생기는 비용을 지적하는 패턴으로, Not Pooling Connections 안태 패턴이 지적하고 있는 문점을 보면 다음과 같음.
데이터베이스와 커넥션을 생성하고 파괴하는 작업은 비용이 많이 드는 작업으로, 어떤 경우에는 간단한 쿼리를 실행하는 것보다 데이터베이스와의 커넥션을 생성하는 작업이 10배나 더 오래검림.
따라서. 필요할 때마다 매번 데이터베이스와의 커넥션을 생성하고 파괴하는 작업을 하지 말하야 함. 대신, 커넥션이 계속해서 많은 쿼리에서 사용될 수 있도록 해야함. 그러나, 데이터베이스와 커넥션할 수 있는 갯수가 제한되어 있기 때문에, 각 콤포넌트가 커넥션을 계속 소유하고 있지 말아야 함.
2. 징후 및 결과 (Symptoms and Consequences)
- 데이터베이스와의 커넥션을 생성하고 파괴함으로써 퍼포먼스가 늦어짐.
- 커넥션을 너무 오랫동안 소유하고 있기 때문에 확장성이 제한적.
- 각 콤포넌트가 자신이 직접 커넥션을 오픈할 경우, 사용해야 할 데이터베이스 드라이버와 데이터베이스 서버 위치 정보를 각 콤포넌트에 직접 하드코딩해야 함. 따라서, 데이터베이스 정보가 변경될 경우 이를 관리하기가 어려움.
3. 리팩토링된 해결방안 (Refactoed Solutions)
데이터베이스와의 커넥션을 여러 개 오픈하고 있고, 개개의 콤포넌트에게 가지고 있는 커넥션을 빌려주는 커넥션 풀을 사용.
4. 관련 패턴 (Related Pattern)
- Data Access Object
이 패턴은 DAO 클래스에 데이터베이스 억세스 코드를 놓는 방법에 대해 기술하고 있음. DAO 클래스는 커넥션 풀을 사용함으로써 Not Pooling Connections 안티 패턴의 발생을 피할 수 있음.
