DBCP 와 JNDI 를 이용한 커넥션 풀링 (Tomcat 5.5 기준) > 온라인강의

본문 바로가기
 
 
 
오늘 1,216
어제 1,202
최대 2,526
전체 3,621,195

최근 방문자

1929
2036
1954
1859
1202
1216
14 15 16 17 18 19
비즈니스의 시작 비즈명함 ~ 가격, 품질, 배송 3가지 만족을 드리는 비즈명함 / 즉석명함 / 급행서비스 / 서울 전지역 수도권일부 3시간배송

select * from g5_menu where me_use = '1' and me_link like '%lecture%'
온라인강좌 홈 > 온라인강좌 > 온라인강좌

JSP | DBCP 와 JNDI 를 이용한 커넥션 풀링 (Tomcat 5.5 기준)

페이지 정보

작성일2012-05-22 13:59 조회9,202회 댓글0건

본문

------------------------------------------------------------------------------------------
1.커넥션 풀링이란?
------------------------------------------------------------------------------------------
지금까지 우리는 클라이언트의 요청이 있을때마다 , DriverManager 객체로 부터 Connection 객체를 1개 얻어와 어플리케이션의 로직을 구현한 후, 커넥션 객체를 다시 해제하여 왔다.
이는 별 문제 없이 잘 돌아가는 듯 하지만 데이터베이스로 접속한다는 행위 자체는 실제로 많은 리소스를 필요로함에도 불구하고, 어렵게 얻는 커넥션 객체를 , 매 요청마다 새로 생성 한 후 다시 해제시키는 작업을 반복하고 있었던 것이다.
이는 마치 성냥개비로 몇시간 동안 힘들게 탑을 쌓은 후, 구경만 잠깐 하고 다시 무너뜨리는 것과 같다.
이는 동시 접속자 수가 많을땐 시스템에 부하를 충분히 주고도 남을 것이다.
바로 이 단점을 개선하기 위해 커넥션풀링 기법을 사용한다.
커넥션 풀링 기법은 클라이언트의 요청이 들어올 때에 맞추어  "접속" 객체를 새로 생성하는 것이 아니다!!
즉 클라이언트의 요청이 없더라도 여분의 "접속"을 미리 여러 개 확보하여 Pool 에 모아 놓고, 요청이 새로 들어오면 이미 생성된 커넥션 객체를 배분하며, 작업이 끝난 후 커넥션 객체를 해제하는 것이 아니라 다시 Pool 로 돌려보내므로 효율적이다.
 
------------------------------------------------------------------------------------------
2.DBCP 란?
------------------------------------------------------------------------------------------
커넥션 풀을 구현하는데는 다음과 같은 2가지 방법이 있을 수 있겠다.
1.프로그래머가 직접 소스를 개발하여 사용
2.컨테이너에서 지원되는 기능을 사용
 
실력 좋은 프로그래머라면 물론 1번 방법을 이용할 수도 있겠으나, 초보 프로그래머가 직접 소스를 작성하려면 신경써야 할 부분이 한 두가지가 아닐 터이니 1번 방법은 만만치 않다고 보아야 하겠다.
(예를 들자면 커넥션 유출(Leak) 과 같은 문제 등)
 
따라서 남이 만든 커넥션 풀을 쓰는 것이 불안하고 무엇인가 검증된 커넥션 풀링 기법을 어플리케이션에 적용하고 싶다면 컨테이너 차원에서 지원해주는 커넥션풀링 기법을 사용하기를 추천한다.
특히 톰켓을 제작한 자카르타에서는 DBCP 라 명칭하여 이를 제공해 주고 있다.
자카르타의 DBCP는 커넥션 풀링 기능을 제공할 뿐만 아니라 사용되지 않는 커넥션을 해제시켜주는 기능을 포함하고 있어 매우 유용하다.
 
한가지 알아 두여야 할 점은, 자바 기반의 커넥션 풀링 기법의 구상은 Sun 사에서 DataSource 인터페이스로 규정한다는 점이다.
즉 커넥션풀이 커넥션풀 다울 수 있는 기능에 대한 정의는 지금까지 그랬던 것처럼 바로  Sun 사에서 하고, 세부 구현은 컨테이너 제작사의 몫이라는 것이다. (마치 JDBC 가 그렇듯)
따라서 자카르타 DBCP의 BasicDataSource 클래스가 바로 Sun 사의 DataSource 인터페이스를 구현한 객체이다.
 
 
------------------------------------------------------------------------------------------
3.JNDI (Java Naming and Directory Interface) 란?
------------------------------------------------------------------------------------------ 
커넥션 풀링기법을 적용할 DBMS에 대한 정보는 자바 코드에 직접 하드코딩 하면 불편한 점이 많다.
만약 계정 정보가 바뀐다거나 데이터베이스와 관련된 정보가 바뀐다면 재 컴파일하여 서버에 업로드 해야 하기 때문이다.
이럴땐 자바소스에 정보를 두지 않고 외부 파일에 실제 정보를 기재해두어, 자바소스내에서 외부파일을 찾아낼 수 있는 이름값만 적어주면 데이터베이스 정보의 변경에 상관없이 안정적인 서비스가 가능할 것이다.
이러한 기술을 구현하기에는 Javax.naming 패키지의 JNDI 가 적합하다.
 
 
 
------------------------------------------------------------------------------------------
4.Tomcat5.5에서 XML 파일 작성하기 (Web.xml 과 ROOT.xml)
------------------------------------------------------------------------------------------
JNDI로 읽어들일 정보는 web.xml 과 ROOT.xml 이다.
 
1.web.xml 파일에 추가 될 내용
   웹어플케이션/WEB-INF/web.xml 파일을 열어 web-app의 하위 요소로 아래와 같이 추가로 기재한다.
   <web-app>
      <resource-ref>
      <description>oracle</description>
      <res-ref-name>jdbc/zino</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth> 
     </resource-ref>
   </web-app>
 
2.ROOT.xml 파일에 추가 될 내용
   Tomcat 설치폴더/conf/어플리케이션폴더/ROOT.xml 파일을 열어 Context 의 하위 요소로 아래와 같이 추가로 기재한다.
    밑줄친 부분은 사용자마다 정보를 다르게 기재할 수 있음을 의미한다.
<Context ~~~~~생략 >
 <Resource name="jdbc/zino"
  auth="container"
  type="javax.sql.DataSource"
  username="zino"
  password="zino"
  driverClassName="oracle.jdbc.driver.OracleDriver"
  factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
  url="jdbc:oracle:thin:@192.168.0.3:1521:ORCL"
  maxActive="20"
  maxIdle="2"
  removeAbandoned="true"/>
</Context>
 
 
------------------------------------------------------------------------------------------
5.JSP 작성하여 결과 보기
------------------------------------------------------------------------------------------
<%@ page import="java.sql.*" %>
<%@ page import="javax.sql.*" %>
<%@ page import="javax.naming.*" %>
<%
 DataSource ds;
 Context ct1=new InitialContext();
 Context ct2=(Context)ct1.lookup("java:comp/env");
 ds=(DataSource)ct2.lookup("jdbc/zino");
 Connection con=ds.getConnection();
 //out.print(con);
 String sql="select * from 테이블명";
 PreparedStatement pstmt=con.prepareStatement(sql);
 ResultSet rs=null;
 rs=pstmt.executeQuery();
 rs.next();
 out.print(rs.getString("name"));
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기

댓글목록

등록된 댓글이 없습니다.


목록

Total 2,122건 1 페이지
온라인강의 목록
번호 제목
2122
2121
2120
2119
2118
2117
2116
2115
2114
2113
2112
2111
2110
2109
MySQL Not Acceptable (up.2017-11-02 17:42) Hit.237
2108
2107
2106
2105
2104
2103
2102
2101
2100
2099
2098
게시물 검색
 
 
상호: 해피정닷컴 대표:정창용 사업자등록번호:119-05-36414 (08394) 서울시 구로구 디지털로 242 한화비즈메트로1차 1502호
전화: 070-7600-3500 팩스:02-865-3528 개인정보관리:정창용 mail@happyjung.com 에스크로확인
개인정보취급방침
COPYRIGHT 2001~2017 해피정닷컴. All rights reserved. 통신판매신고:2014-서울구로-0074
 
모바일 버전으로 보기