2. [JDBC] ConnectionPool을 사용한 데이터베이스 연결 기능 향상
웹은 그 자체로 이미 많은 사용자를 위한 것이라고 생각할 수 있다. 웹은 많은 사용자에게 빠른 시간에 응답을 제공할 수 있어야 한다. 웹 프로그램은 실질적으로 데이터베이스에 연결하고, 질의를 던지고, 결과를 받아오는 부분에서 많은 시간으로 소요하게 된다. 많은 시간을 소요한다는 것은 서버 쪽에 많은 부하를 안겨준다는 사실을 뜻하기도 한다. 결국 데이터베이스 연동과 관련되는 시간이 사용자에게 응답을 제공하기까지 전체적으로 걸린 시간에 많은 연관이 되어 있다. 이에 따라 보다 빠르고, 부하가 적게 걸리기 위한 방법이 요구되는데, Connection Pool을 사용해서 보다 효율적으로 데이터베이스에 연동할 수 있다. 이번에는 Connection Pool에 대해서 알아보자.
2-1. Pooling 기법
데이터베이스에 연결하기 위한 Connection은 객체이다. 이 객체는 새롭게 만들어질 때 많은 시스템 자원을 요구한다. 객체는 메모리에 적재가 되는데, 메모리에 객체를 할당할 자리를 만들고 또 객체가 사용할 여러 자원들에 대한 초기화 작업을 한다. 그리고 이 객체가 필요 없게 되면 객체를 거두어들여야 하는 작업 등이 요구된다. 이렇듯 객체의 생성 작업은 많은 비용을 요구한다.
데이터베이스에 한 번 연결하기 위한 작업이 매번 새로운 데이터베이스 연결에 대한 요청이 들어올 때마다 수행해야 한다면, 많은 부담이 될 것이라는 것은 느낌으로도 알 수 있을 것이다. 결론부터 말하자면, 사용하기 위해 생성한 객체를 일회용으로 하지 않고 재사용한다는 것이다.
많은 비용이 드는 데이터베이스 연결 객체를 매번 생성, 사용, 해제하는 단계를 밟지 말고 처음 만들어둔 데이터베이스 연결 객체를 계속 사용하자는 것이다. 또한 데이터베이스는 웹 서버와 같이 복수의 클라이언트를 위한 것이다. 즉 한 사람의 업무를 위해 존재하는 것이 아니고 복수의 사용자에게 만족을 줘야 한다. 보다 효율적으로 복수의 사용자에게 서비스하기 위해 미리 데이터베이스 연결을 위한 객체들을 만들어 둔다는 것이다.
예를 들어보자. 물을 가득 담은 풀장 안에 튜브를 일정 개수 만들어 띄워둔다. 그리고 필요한 사람은 하나를 건져서 사용하도록 하고, 사용이 끝나면 다시 풀에 튜브를 반납한다. 미리 여러 개를 만들어 두었기 때문에 여러 사람이 한 번에 입장해서 튜브를 필요로 한다고 해도 하나씩 바람을 집어넣을 필요가 없다. 만약 미리 만들어 둔 튜브가 모두 다 대여됐다고 하면 그때 필요한 개수만큼 새롭게 바람을 불어서 대여를 한다. 만약 미리 만들어둔 튜브가 없다고 하면 튜브를 대여하는 관리자는 튜브가 필요한 사람이 올 때마다 힘겹게 바람을 불어넣어서 대여를 해야 한다. 하지만 이미 튜브를 만들어 두었으니 많은 사람에게 대여하기가 용이하다. 이렇게 함으로써 사용자에게 필요한 응답을 주는 데 걸리는 시간을 단축하고 시스템에 있어서는 부하를 줄이는 것이 되겠다.
물론, 이용자가 극히 적은 경우라면 미리 만들어둔 튜브가 필요하지 않을 수도 있다. 이용자가 극히 적다면 풀에 튜브를 만들어 둔다는 것이 비효율적일 수 있기 때문이다. 하지만 웹 어플리케이션에 있어서 다중사용의 문제는 그 상황에 있어서 최선책을 따라야 한다. ConnectionPool을 사용하느냐 마냐에 따른 실질적인 비용을 따져 그 사용여부를 알아보기보다는 여기서는 ConnectionPool의 사용으로 보다 효율적일 수도 있는 방법을 소개하는 것이다.
'IT || 개발공부' 카테고리의 다른 글
[JDBC] ConnectionPool을 이용한 데이터베이스 연결 (0) | 2023.03.01 |
---|---|
[JDBC] JDBC 드라이버 타입 / JDBC API (0) | 2023.02.19 |
[JDBC] JDBC (0) | 2023.02.19 |
[JSP] 자바 빈즈에 대한 궁금증 (자바빈즈) (0) | 2023.02.18 |
[Java/JSP] 빈을 이용한 JSP 파일 예제 (자바 빈즈 / 자바 빈즈 id, name) (0) | 2023.02.16 |
댓글