데이터베이스2012. 9. 3. 11:40

네이버나 구글에서 DBCP 를 검색 해 보면 대부분 commons DBCP 를 많이 사용한다. 나도 그랬다. 내가 보고 있는 교재에서는 commons DBCP 로 설명하고 있다. 그러나 검색을 해보니 tomcat 에서 개발한 tomcat DBCP 가 있는데 이 것은 보다 향상된 connection pool 기능을 제공한다. 그래서 이번 포스트는 이에 대해서 설명을 해보고자 한다.

 

지난번 포스트 JNDI 를 수정하는 것이기 때문에 지난번 포스트인 JNDI 를 이용한 DBCP 를 먼저 읽어보길 바란다.

 

먼저 Tomcat DBCP Connection Pool 이 commons DBCP 보다 좋은 점이 뭔지에 살펴보자.

이 내용은 아파치 홈페이지에 있는 내용 중 몇 가지만 추린 내용이다.

http://people.apache.org/~fhanik/tomcat/jdbc-pool.html

 

- 새로운 dbcp 를 써야하는 이유

: commons dbcp 는 싱글 쓰레드를 사용한다. 그래서 스레드가 안전할 수 있도록 commons dbcp 는 전체 풀(pool) 에 대해서 롹(lock)을 건다.

: commons dbcp 는 느리다. 요즘 하드에워는 cpu 수가 증가하고 있는데 반해서 이를 제대로 활용하고 있지 못해서 퍼포먼스가 떨어진다.

: commons dbcp 는 복잡하다. 클래스 수가 60개나 된다. 반면, tomcat jdbc pool 은 딸랑 8개 이다. 이는 수정이 용의함을 의미한다.

: commons dbcp 는 정적인(static) 인터페이스(interface) 를 사용하기 때문에 구현 되지 않은 모든 메소드들에 대해서 예외(exception) 을 받게 될 수 있다.

: commons dbcp 는 상당히 업데이트 되지 않는다 ..

: tomcat jdbc pool 은 commons dbcp 에서 제공하지 않는 기능을 제공하면서도 빠르다.

: 추가적인 스레드를 더할 필요 없이 connection 을 비동기적(asynchronously) 회수할 수 있도록 구현할 수 있다.

 

- 추가된 기능

: 현재의 높은 멀티코어 환경을 충족시킨다.(혹은 제대로 활용한다??)

: inteface 의 동적인(dynamic) 구현(??)

: validation interval 을 설정해 줄 수 있다.

: 높은 퍼포먼스

: 간단해서 버그잡기가 용의. 핵심 클래스는 8개 뿐

 

- 단점

: 디비가 다운되었을 때, 재 연결을 위해서는 웹서버를 내렸다가 올려야 한다.(아무래도 미리 커넥션을 맺어둬서 그런 듯^^?)

 

 

'데이터베이스' 카테고리의 다른 글

MS SQL JDBC 등록 방법  (0) 2013.01.08
초 단위 출력  (0) 2012.11.20
Tomcat DBCP 설정법  (0) 2012.09.03
MyBatis 문자열 대체 방법  (0) 2012.08.24
Oracle UTF-8로 설정하기  (0) 2012.08.02
Posted by 미랭군
데이터베이스2012. 9. 3. 11:38

**DBCP**

DBCP (Database ConnectionPool) 

미리 컨넥션을 생성하여 컨넥션 풀에 저장한 다음

개별 클라이언트의 요청시 컨넥션을 빌려주고 

반납받는 형식으로 성능을 향상시키기 위한 프로그래밍 기법 

 

***********  Tomcat, Oracle Datasource 설정법  ********************

* 설정할때 이전에 설정된 tomcat 을 지우고 설정 후 server tab 에서 

새로 생성 하여야 한다.


1.conf/server.xml파일을 열고 <GlobalNamingResources>엘리먼트 안에 다음 내용 추가.

 <Resource name="jdbc/myoracle" auth="Container"

              type="javax.sql.DataSource" 

              driverClassName="oracle.jdbc.OracleDriver"

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

              username="scott" password="tiger" 

               maxActive="20"

/>


2. conf/context.xml에 추가


  <ResourceLink global="jdbc/myoracle" name="jdbc/myoracle" type="javax.sql.DataSource"/>


3. 위와 같이 설정이 완료되었으면 이 파일을 실행하여 결과가 출력되는지 확인한다.

<%!

  private DataSource ds;

  public void jspInit(){

   try{

   InitialContext initCtx = new InitialContext();

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

   System.out.println("dbcp lookup..");

   }catch(Exception e){

     e.printStackTrace();

   }

  }

%>


참고) JNDI(Java Naming and Directory Interface)는 디렉터리 서비스에서 제공하는 데이터 및 객체를 발견(discover)하고 참고(lookup)하기 위한 자바 API다. (위키백과)

'데이터베이스' 카테고리의 다른 글

초 단위 출력  (0) 2012.11.20
Tomcat DBCP를 사용해야 하는 이유  (0) 2012.09.03
MyBatis 문자열 대체 방법  (0) 2012.08.24
Oracle UTF-8로 설정하기  (0) 2012.08.02
SQL Developer 실행시 오류  (0) 2012.08.01
Posted by 미랭군
스프링2012. 8. 31. 17:27

BeanFactory = ApplicationContext = IoC Container = Spring Container 가 생성/관리하는 빈 오브젝트는 


특별한 설정이 없는 한,  (빈의 scope이  prototype scope, request scope, session scope 이 아닌 이상..)


싱글톤 오브젝트이다.

이러한 이유로 Spring Container을 Sigleton Registry 라고도 부른다.


한 가지 기억해둘 것은 ..


빈으로 등록되는 클래스가 디자인 패턴의 하나인 Singleton pattern을 적용한 클래스가 아니다라는 점


빈으로 등록되는 클래스는 (private 생성자, public static getInstance() 메소드등이 없는) 평범한 클래스이다. 


이 평범한 클래스를 빈 컨테이너가 관리하면.. Singleton object가 된다


또 한 가지 더 기억해둘 것은 ..


빈으로 등록할 클래스는 Singleton Object가 되기 때문에.. 


stateless 방식으로 만들어야 된 다는 점, 


이유는 멀티쓰레드 환경에서 하나의 Object를 공유할 때 발생할 문제들을 애초에 없애기 위함이다.

Posted by 미랭군