주의) 2010. 5. 6. 15:43 네이버 블로그에 작성한글 이사

 

커넥션 풀

(Connection Pool)

 

db를 연동하기 위해서는 Connection이라는 객체를 매번 생성하여 연결을 해왔습니다.

하지만 이렇게 한번 객체를 생성할때마다 시스템의 리소스를 요구합니다. 개인적으로 사용하면야

별다른 문제가 없겠지만 프로젝트 규모가 커지고 수십, 수백명이 들어와서 커넥션 객체를생성한다면

 

허이고.......혼자 게시판 만들면서 테스트할때가 편했구나...ㅠ_ㅠ

 

라고 생각하시게 될겁니다.  이점을 보완하기 위해서 나온게 커넥션풀입니다. 커넥션 풀을 이용하게 되면 데이터 베이스와 연결된 커넥션 객체를 미리 생성하여 풀(pool)에 넣어뒀다가 필요할때마다 이 풀장에 들어가서 커넥션 객체를 사용하고 사용 다한 후에 다시 반환할수 있습니다.

 

정리해서 말하자면

 

매번 사용자가 웹사이트에 접속할때마다 Connection객체를 생성해야 하는데 이는 비효율적입니다

때문에 Connection Pool을 이용하면 풀장(수영장 풀 아시죠?)속에 커넥션 객체가 이미 생성되어 대기타고 있기 때문에 기존에 커넥션객체를 생성하는데 드는 연결 시간이 소비되지 않습니다 또한 재사용이 가능하기 때문에 접속할때마다 객체를 생성할 필요가 없습니다.

 

결국 커넥션 풀을 사용하게 되면 전체적으로 성능이 빨라진다는 거죠.

 

우선 이 글에서 사용할 커넥션풀은 널리 쓰이고있는 자카르타를 써보도록하겠습니다

 

1.관련 JAR파일을 다운로드 해야합니다

다운로드는 HTTP://commons.apache.org/에서 받으실수있습니다

zip파일로 받아주세요

commons-collection-3.2.1-bin.zip(http://commons.apache.org/downloads/download_collections.cgi)

commons-dbcp-1.2.3.zip(http://commons.apache.org/downloads/download_dbcp.cgi)

commons-pool-1.5.4.zip(http://commons.apache.org/downloads/download_pool.cgi)

 

2. 위 3개의 파일의 압축을 푸시고 각 jar 파일만 뽑아서 톰캣 lib폴더에 넣어 줍니다

 

혹은 프로젝트 lib폴더에 넣어주셔도 됩니다. 가끔안될때가 있어서 안정빵으로 톰캣에 넣어주세요

 

3.이클립스 기준으로

webcontent -> META-INF폴더안에 Context.xml이라는 파일을 만들어주시고

메모장으로 열어서 편집해봅니다

 

//오라클의 경우(오라클10gXE버전)

<Context>

  <Resource name="jdbc/OracleDB" //OracleDB은 리소스네임이므로 임의지정이 가능

   auth="Container"

   type="javax.sql.DataSource"

   username="jung"  //오라클계정

   password="1234" //오라클비번

   driverClassName="oracle.jdbc.driver.OracleDriver"

   factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"

   url="jdbc:oracle:thin:@localhost:1521:xe" //요부분은 자신의 아이피와 xe의 경우  sid제외해도됨

   maxActive="500"

   maxIdle="100"/> 

</Context>

 

//mysql경우

 

<Context>
  <Resource name="jdbc/myDB"
   auth="Container"
   type="javax.sql.DataSource"
   username="root"
   password="1234"
   driverClassName="org.gjt.mm.mysql.Driver"
   factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
   url="jdbc:mysql://localhost:3306/shap"
   maxActive="500"
   maxIdle="100"/> 
</Context>

 

그다음

 

 webContent -> WEB-INF폴더에 위치한 Web.xml파일을 메모장으로 편집합니다

 

 

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
 

 <display-name>myDBtest</display-name>
 

<welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
 

//추가할부분

<resource-ref>
    <description>Connection</description>
    <res-ref-name>jdbc/myDB</res-ref-name> //네임은 위  context.xml에서 지저해준 리소스네임과 일치해야 합니다
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
  </resource-ref>

</web-app>

 

하고 저장하시면 연동작업이 끝납니다

 

*주의사항

이클립스에서 다이나믹웹프로젝트를 생성하시면 자동으로 Web.xml파일이 생깁니다

왠만하면 이 생성된 파일에서 해결을 보셔야할듯합니다. 맨위쪽에 적혀있는

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>myDBtest</display-name> 요부분을 건들면 이상하게 안먹히더라구요;

제가 이제막 하는초짜라 버전이유인가;; 아무튼 이것때문에 삽질 좀했습니다 ㅡ,.ㅡ;

 

 

그럼 연결이 잘되었는지 테스트를 해보겠습니다

 

 

dbtest.jsp

 

<%@ page language="java" contentType="text/html; charset=EUC-KR"%>
<%@ page import="java.sql.*"%>
<%@ page import="javax.sql.*" %>
<%@ page import="javax.naming.*" %>
<%
  Connection conn = null;
 
 try {
    Context init = new InitialContext();
    DataSource ds = (DataSource) init.lookup("java:comp/env/jdbc/myDB"); //리소스네임입니다
    conn = ds.getConnection();
    
    out.println("연결되었습니다!!");
 }catch(Exception e){
  out.println("연결실패!!");
  e.printStackTrace();
  }
%>

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기