DBCP 와 JNDI 를 이용한 커넥션 풀링 (Tomcat 5.5 기준) > 기술자료 | 해피정닷컴

DBCP 와 JNDI 를 이용한 커넥션 풀링 (Tomcat 5.5 기준) > 기술자료

본문 바로가기

사이트 내 전체검색

DBCP 와 JNDI 를 이용한 커넥션 풀링 (Tomcat 5.5 기준) > 기술자료

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

페이지 정보


본문

------------------------------------------------------------------------------------------
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,641건 74 페이지
  • RSS
기술자료 목록
1181
그누보드   20301  2012-05-29 04:43  
1180
그누보드   25511  2012-05-28 17:03  
1179
그누보드   40021  2012-05-26 17:54 ~ 2021-10-21 23:12  
1178
JavaScript   30333  2012-05-26 01:23 ~ 2020-04-08 09:26  
1177
JavaScript   31146  2012-05-24 03:56  
1176
Editor   17958  2012-05-24 03:39  
1175
JSP   51849  2012-05-23 13:11  
1174
Linux   17615  2012-05-23 13:05  
1173
Linux   22100  2012-05-22 23:28 ~ 2012-05-23 00:00  
1172
JSP   36453  2012-05-22 22:17  
1171
HTML   24322  2012-05-22 16:43 ~ 2019-03-02 04:18  
1170
MySQL   12729  2012-05-22 14:48  
1169
JSP   25874  2012-05-22 14:24  
1168
MySQL   30561  2012-05-22 14:20  
1167
Java   14044  2012-05-22 14:02  
1166
Java   13966  2012-05-22 14:00  
열람
JSP   20831  2012-05-22 13:59  
1164
.NET   15549  2012-05-21 21:47  
1163
MSSQL   19998  2012-05-21 20:44  
1162
ClassicASP   24242  2012-05-21 20:28  

검색

해피정닷컴 정보

회사소개 회사연혁 협력사 오시는길 서비스 이용약관 개인정보 처리방침

회사명: 해피정닷컴   대표: 정창용   전화: 070-7600-3500   팩스: 042-670-8272
주소: (34368) 대전시 대덕구 대화로 160 대전산업용재유통단지 1동 222호
개인정보보호책임자: 정창용   사업자번호: 119-05-36414
통신판매업신고: 제2024-대전대덕-0405호 [사업자등록확인]  
Copyright 2001~2024 해피정닷컴. All Rights Reserved.