본문 바로가기

분노=프로그래밍/Java

jdbc, dbcp 차이?

오늘 일과중에 예전에 학원에서 같이 교육받았던 동생한테서 연락이 와서

이런 저런 얘기를 나누다가 요즘은 뭐 배우고 있냐고 물었더니, JDBC랑 DBCP를 배웠는데

갑자기 DBCP가 더 빠르다고 말한다.

 

 왠지 어감이 JDBC와 DBCP의 관계를 오해하는 것 같아, 이 글을 포스팅 하게 되었다.


JDBC와 DBCP의 정의

JDBC

 : Java Data Base Connectivity. 한글로 번역하면, 자바 데이터 베이스 연결.

  정의는 DataBase와 연결하기 위한 Java Interface이다.

DBCP

 : DataBase Connection Pool. 역시 간단하게 정리하면 DataBase와 Connection을 맺고 있는 객체를 관리하기 위한

  Connection Pool

 


일반적인 JDBC의 프로세스는 다음과 같이 추릴 수 있다.

일반적인 JDBC의 프로세스

1.DriverManager를 통한 DB Connection 객체 생성(DataBase와 Connection 생성)

2.Connection 객체에서 statement 객체 생성 및 쿼리 실행

3.ResultSet 가지고 놀기

4.Connection Close


 

여기서 문제가 되는 부분은 1번 4번이다.

Java에서 DataBase에 커넥션을 생성(1번)하는 것은 오랜 시간을 필요로 하게 된다.

(여담: 회사 선임분의 말을 인용하자면, jdbc 작업에서 리소스/시간을 가장 많이 잡아먹는 부분은 Connection을 맺는 부분이라고 한다. 이 부분은 추후 자료 조사를 통해 보강하도록 하겠다.)


예를 하나 들어 설명해보겠다.

어떤 가게엔 출입문이 1개가 있으며 한번에 한명씩만 들어갈 수 있으며, 가게에서 용무를 보기 위해 10명의 사람들이 대기하고 있다고 가정해보자.

사람 1명이 가게에서 용무를 보는데 걸리는 시간

1.가게 문(Connection)을 연다.(Open) - 1초

2.가게에서 용무를 보는데 (Statement 객체 생성 및 쿼리 실행 & ResultSet 조작) - 2초

3.용무를 마치고 나가서 가게문을 닫음 (Connection close) - 1초


위와 같은 절차를 융통성 없이 그대로 수행한다면 10명이 용무를 보는데 총 걸리는 시간은 40초이다.


생각해보자.

어차피 손님은 기다리는데 가게문을 굳이 열고 닫는 프로세스가 필요할까.

문을 처음에만 열어주고(Connection Open), 10명의 손님이 용무를 마칠때까지 문을 계속 연 상태로 유지한 후

마지막 손님이 나가고 난 후 문을 닫아주면 걸리는 시간은

초기 문 Open 1초 + 10명의 손님 용무(20초) + 마지막 손님 나간 후 문 Close(1초)로 18초의 시간을 절약할 수 있다.



위 상황에서 가게를 Connection Pool과 유사하게 생각하면 되겠다.

1초 사이에도 수많은 사람들이 방문하는 대형 포털 사이트(Naver, Daum 기타 등등)에서 사람들이 검색할 때마다 

Connection을 열고 닫는 것을 반복하는 것보단, Connection을 닫지 않고 가지고 있다가, 다른 용무가 필요한 사람에게 

할당해준다면 커넥션을 열고 닫는 절차의 생략으로 기존보다 시스템에도 부하가 덜 감은 물론이고, 사용자에게 응답할 수

있는 시간도 더 빨라질 것이다.

(쿼리가 빨라진다는 것이 아니라 Connection Open/Close 절차가 줄어듬으로써 속도가 빨라진다는 이야기이다.)


 이렇게 긴 이야기를 쓴 이유는 DBCP 설명하기 위함이다. 위 내용을 이해했다면 DBCP를 이해하는 것도 어렵지 않을 것

이다. 한번 오픈한 커넥션을 Close하지 않고 Pool이라 칭해지는 Connection을 관리하는 곳에서 오픈된 상태의 커넥션을 가

지고 있다가 Connection이 필요한 곳에 이미 오픈된 Connection을 사용할 수 있도록 할당해주고, 작업이 끝나면 다시 Pool

에서 관리하는 것을 Connection Pool이라 한다.


 줄이자면 DBCP는 JDBC(Java Database Connectivity)를 관리하기 위한 기법이라고 생각하면 된다.

 

 

글의 요지

 JDBC와 DBCP의 관계를 오해하는 분들을 위해 정리하자면, Java에서 Database와 연결하기 위해선 JDBC를

필요로 하며, JDBC를 이용해 생성한 Connection을 효율적으로 활용하기 위해 Connection 객체를 관리하는 것을 

DBCP의 개념으로 보면 된다.


'분노=프로그래밍 > Java' 카테고리의 다른 글

배치와 DB, WAS의 시간이 맞지 않음.  (0) 2012.07.03