wrkbrs

자카르타 DBCP API를 이용한 커넥션 풀 사용 본문

JSP

자카르타 DBCP API를 이용한 커넥션 풀 사용

zcarc 2018. 10. 27. 04:12
개요

DB에 연결하기 위한 커넥션(Connection)은 객체이다. 
이 객체는 만들어 질때 마다 많은 시스템 자원이 필요하다.
메모리에 객체 할당할 자리 마련 --> 객체가 사용할 여러 자원에 대한 초기화 --> 더이상 사용되지 않을때 거둬들이는 작업 까지...
이런 작업때문에 Connection 객체를 생성 작업은 많은 비용을 요구한다.
Connection은 연결에 대한 요청에 한번씩은 꼭 실행해야 되므로 많은 부담이 된다.
이런 문제를 해결하는게 커넥션 풀 이다.
커넥션 풀에 커넥션 객체들을 미리 만들어 놓은후, 커넥션 객체가 필요한 경우 작성한 객체를 할당, 사용이 끝나면 다시 커넥션 풀로 회수하는 방법.
반드시 컨테이너에 1개만 만들어지도록 해야 하고, 컨테이너가 자동 지원을 못할 경우 커넥션 객체를 저장하고 있는 저장소인 커넥션 풀은 벡터와 같은 컬랙션을 사용해서 구현한다.

자카르타 프로젝트의 DBCP API를 이용해서 커넥션 풀을 사용하려면 다음과 같은 단계를 거쳐야 한다.
1. DBCP API 관련jar파일 설치
--> http://commons.apache.org/  이동후 Collenction, DBCP, Pool 다운로드
-->압축을 해제한 상태에서 톰캣[홈]\lib 파일에 집어넣기, mysql-connector-java-버전-bin.jar도 넣기
-->프로젝트에 [WebContent]-[WEB-INF]-[lib] 폴더에 넣어주기

2. DBCP에 관한 정보 설정 - server.xml

<GlobalNamingResources> --> 톰캣에서 전체 서버를 위한 글로벌 리소스들을 정의함 <Resource name="jdbc/jsptest" --> 임의로 지정 auth="Container" --> 컨테이너를 자원 관리자로 기술 type="javax.sql.DataSource" --> 웹에서 이리소스를 사용했을때 Datasorce타입으로 리턴된다. driverClassName="com.mysql.jdbc.Driver" --> JDBC드라이버 username="jspid" password="jsppass" url="jdbc:mysql://localhost:3306/jsptest" maxWait="5000"--> 커넥션 풀에 사용 가능한 커넥션이 없을때 커넥션의 회수를 기다리는 시간 ></Resource> </GlobalNamingResources>
<!-- 수정전 --> <Context docBase="studyJSP" path="/studyJSP" reloadable="true" source="org.eclipse.jst.jee.server:studyJSP"/></Host> <!-- 수정후 --> <Context docBase="studyJSP" path="/studyJSP" reloadable="true" source="org.eclipse.jst.jee.server:studyJSP"> <Resource name="jdbc/jsptest" auth="Container" type="javax.sql.DataSource" driverClassName="com.mysql.jdbc.Driver" username="jspid" password="jsppass" url="jdbc:mysql://localhost:3306/jsptest" maxWait="5000"> </Resource> </Context></Host>

3. JNDI 리소스 사용 설정 - Web.xml
server.xml에 저장된 JNDI 리소스를 자바빈 또는 JSP 페이지에서 사용하려면 web.xml에 
</web-app>태그 바로위에 <resource-ref> 엘리먼트를 기술해야함.

<resource-ref> <description>jsptest db</description> --> 리소스의 설명 <res-ref-name>jdbc/jsptest</res-ref-name> --> server.xml의 <Resource> 의 name속성 <res-type>javax.sql.DataSource</res-type> --> server.xml의 <Resource> 의 type속성 <res-auth>Container</res-auth> --> server.xml의 <Resource> 의 auth속성 </resource-ref>


4. JSP 페이지에서 커넥션 풀 사용

<%@page import = "java.sql.*, javax.sql.*, javax.naming.*"%> ..중략.. try{ Context initCtx = new IntialContext(); Context envCtx = (Context) initCtx.lookup("java:comp/env"); //initCtx의 lookup메서드를 이용해서 "java:comp/env" 에 해당하는 객체를 찾아서 evnCtx에 삽입 DataSource ds = (DataSource)envCtx.lookup("jdbc/jsptest"); //envCtx의 lookup메서드를 이용해서 "jdbc/jsptest"에 해당하는 객체를 찾아서 ds에 삽입 Conneciton con = ds.getConnection(); //getConnection메서드를 이용해서 커넥션 풀로 부터 커넥션 객체를 얻어내어 conn변수에 저장 ..중략..