=======================================================

커넥션 생성과 close 문제점


수영장 튜브 대여소 


1. 생성 : 줄서서 한명씩 바람넣는거 기달리고 입장

2. 반환 : 줄서서 한명씩 바람빼는거 기달리고 입장


==문제 해결 ==> 커넥션 풀


1. 생성 : 미리 일정갯수의 튜브를 미리 바람을 넣어둠

    2. 전부사용을하면 다시 일정갯수의 튜브에 바람을 넣어둠

3. 반환 : 바람안빼고 반환받아둠

    4. 다시 그걸 대여해줌 => 재활용

=======================================================


 

자카르타DBCP.doc


커넥션 풀


일정갯수의 커넥션을 만들어둬서 사용자가 요청을하면 보내줌

사용자가 생성해둔 커넥션을 전부 받아가면 다시 또 일정갯수의 커넥션을 만들어둔다.

하지만 너무많은 커넥션을 생성하면 부하의 원인이 되므로

정책을 사용해서 총 커넥션의 갯수를 지정해 초과시 대기시키도록 설정할수있다.

생성과 ,


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


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.tomcat.dbcp.dbcp.BasicDataSourceFactory;


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


  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();


 

+ Recent posts