본문 바로가기

Servlet&JSP

자카르타 DBCP API와 JNDI를 이용한 커넥션 풀 사용하기

반응형

자카르타 DBCP(Database Connection Pool) API와 JNDI를 이용한 커넥션 풀 사용하기

 

1. 데이터베이스 연동 프로그램의 문제점

 

데이터베이스에 연결하기 위해서 매번 커넥션(Connection) 객체를 생성할 때는 많은 시스템 자원이 요구됨.

(객체 메모리 적재시 메모리에 객체를 할당할 자리 생성, 초기화 작업, 객체 미사용시 객체를 삭제하는 작업 등등)


2. 커넥션 풀(Connection Pool) 이란?

 

데이터베이스와 연결된 커넥션을 미리 만들어서 풀(pool) 속에 저장해 두고 있다가 필요할 때에 커넥션을 풀(pool)에서 가져다 쓰고 다시 풀(pool)에 반환하는 기법을 의미

 

 

3. 커넥션 풀의 장점

 

1) 풀 속에 미리 커넥션이 생성되어 있기 때문에 커넥션을 생성하는데 시간이 소비되지 않음

2) 커넥션을 재사용하기 때문에 생성되는 커넥션 수가 많지 않음

3) 커넥션을 생성하고 제거하는데 필요한 시간이 소요되지 않기 때문에 어플리케이션의 실행 속도가 빨라지며 한번에 생성될 수 있는 커넥션 수를 제어하기 때문에 동시 접속자 수가 많아도 웹 어플리케이션이 쉽게 다운되지 않음

 

4. 자카르타 DBCP API 와 DataSource 

 

1) 컨넥션 풀을 사용하기 위해 아파치 그룹에서 제공하는 자카르타 DBCP 이용. 자카르타의 DBCP는 커넥션 풀링 기능을 제공하고 사용되지 않는 커넥션을 해제시켜주는 기능도 포함.

 

2) DataSource : javax.sql.DataSource

 

데이터베이스에 접근하기 위한 표준 인터페이스, 특히 DBCP를 이용하기 위한 표준방식

 

5 JNDI (Java Naming and Directory Interface) : 사용자가 원하는 리소스/서비스를 등록하고 찾기 위한 방법

 

DBCP API를 이용한 커넥션 풀을 구성할 때 데이터 베이스 커넥션에 대한 정보를 자바코드에 직접 하드 코딩하는 것 보다 외부파일에 실제 정보를 기록해 두고 자바코드에는 그 정보를 읽어올 수 있는 name(이름값)만을 기록해두면 데이터 베이스에 대한 정보가 변경된다 하더라도 모든 자바코드를 수정하는 것이 아니라 해당 정보를 기록해 놓은 외부파일만 수정하면 되기 때문에 간편하게 사용할 수 있다.

 

 

6. Eclipse Dynamic Web Project 에서 DBCP API를 이용한 커넥션 풀 설정

 

1) 자카르타(Jakarta) DBCP API 관련 jar 파일 설치 (jakarta.apache.org)

 

commons-collections-3.1.jar

commons-dbcp-1.2.1.jar

commons-pool-1.2.jar

 

설치 위치 :작업하고 있는 프로젝트>WEB-INF>lib 에 상기 jar파일을 설치함

 

2)  데이터베이스 설정 및 컨넥션 풀 설정 정보 기록

 

설치 위치 : 컨텍스트>META-INF 에 context.xml 생성

 

<?xml version="1.0" encoding="UTF-8"?>

<Context >

 

 <Resource name="jdbc/java"

  auth="container"

  type="javax.sql.DataSource"

  username="scott"

  password="tiger"

  driverClassName="oracle.jdbc.driver.OracleDriver"

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

  url="jdbc:oracle:thin:@localhost:1521:java"

  maxActive="100"
     maxIdle="10" 
/>

</Context>

 

3) web.xml 파일에 추가 될 내용

 

   컨텍스트>WEB-INF/web.xml 파일을 열어 web-app의 하위 요소로 아래와 같이 추가 기재

 

   <web-app>

 

      <resource-ref>

      <description>DB Connection</description>

      <res-ref-name>jdbc/java</res-ref-name>

      <res-type>javax.sql.DataSource</res-type>

      <res-auth>Container</res-auth>

     </resource-ref>

 

   </web-app>

 

7. 코딩 예

 

Context initCtx = new InitialContext();  

Context envCtx = (Context) initCtx.lookup("java:comp/env");

DataSource ds = (DataSource)envCtx.lookup("jdbc/java");

Connection conn = ds.getConnection();

또는

Context initCtx = new InitialContext();  

DataSource ds = (DatSource) initCtx.lookup("java:comp/env/ jdbc/java ");

Connection conn = ds.getConnection();

반응형