주의) 2010. 5. 6. 15:43 네이버 블로그에 작성한글 이사
커넥션 풀
(Connection Pool)
db를 연동하기 위해서는 Connection이라는 객체를 매번 생성하여 연결을 해왔습니다.
하지만 이렇게 한번 객체를 생성할때마다 시스템의 리소스를 요구합니다. 개인적으로 사용하면야
별다른 문제가 없겠지만 프로젝트 규모가 커지고 수십, 수백명이 들어와서 커넥션 객체를생성한다면
허이고.......혼자 게시판 만들면서 테스트할때가 편했구나...ㅠ_ㅠ
라고 생각하시게 될겁니다. 이점을 보완하기 위해서 나온게 커넥션풀입니다. 커넥션 풀을 이용하게 되면 데이터 베이스와 연결된 커넥션 객체를 미리 생성하여 풀(pool)에 넣어뒀다가 필요할때마다 이 풀장에 들어가서 커넥션 객체를 사용하고 사용 다한 후에 다시 반환할수 있습니다.
정리해서 말하자면
매번 사용자가 웹사이트에 접속할때마다 Connection객체를 생성해야 하는데 이는 비효율적입니다
때문에 Connection Pool을 이용하면 풀장(수영장 풀 아시죠?)속에 커넥션 객체가 이미 생성되어 대기타고 있기 때문에 기존에 커넥션객체를 생성하는데 드는 연결 시간이 소비되지 않습니다 또한 재사용이 가능하기 때문에 접속할때마다 객체를 생성할 필요가 없습니다.
결국 커넥션 풀을 사용하게 되면 전체적으로 성능이 빨라진다는 거죠.
우선 이 글에서 사용할 커넥션풀은 널리 쓰이고있는 자카르타를 써보도록하겠습니다
1.관련 JAR파일을 다운로드 해야합니다
다운로드는 HTTP://commons.apache.org/에서 받으실수있습니다
zip파일로 받아주세요
commons-collection-3.2.1-bin.zip(http://commons.apache.org/downloads/download_collections.cgi)
commons-dbcp-1.2.3.zip(http://commons.apache.org/downloads/download_dbcp.cgi)
commons-pool-1.5.4.zip(http://commons.apache.org/downloads/download_pool.cgi)
2. 위 3개의 파일의 압축을 푸시고 각 jar 파일만 뽑아서 톰캣 lib폴더에 넣어 줍니다
혹은 프로젝트 lib폴더에 넣어주셔도 됩니다. 가끔안될때가 있어서 안정빵으로 톰캣에 넣어주세요
3.이클립스 기준으로
webcontent -> META-INF폴더안에 Context.xml이라는 파일을 만들어주시고
메모장으로 열어서 편집해봅니다
//오라클의 경우(오라클10gXE버전)
<Context>
<Resource name="jdbc/OracleDB" //OracleDB은 리소스네임이므로 임의지정이 가능
auth="Container"
type="javax.sql.DataSource"
username="jung" //오라클계정
password="1234" //오라클비번
driverClassName="oracle.jdbc.driver.OracleDriver"
factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
url="jdbc:oracle:thin:@localhost:1521:xe" //요부분은 자신의 아이피와 xe의 경우 sid제외해도됨
maxActive="500"
maxIdle="100"/>
</Context>
//mysql경우
<Context>
<Resource name="jdbc/myDB"
auth="Container"
type="javax.sql.DataSource"
username="root"
password="1234"
driverClassName="org.gjt.mm.mysql.Driver"
factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
url="jdbc:mysql://localhost:3306/shap"
maxActive="500"
maxIdle="100"/>
</Context>
그다음
webContent -> WEB-INF폴더에 위치한 Web.xml파일을 메모장으로 편집합니다
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>myDBtest</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
//추가할부분
<resource-ref>
<description>Connection</description>
<res-ref-name>jdbc/myDB</res-ref-name> //네임은 위 context.xml에서 지저해준 리소스네임과 일치해야 합니다
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
하고 저장하시면 연동작업이 끝납니다
*주의사항
이클립스에서 다이나믹웹프로젝트를 생성하시면 자동으로 Web.xml파일이 생깁니다
왠만하면 이 생성된 파일에서 해결을 보셔야할듯합니다. 맨위쪽에 적혀있는
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>myDBtest</display-name> 요부분을 건들면 이상하게 안먹히더라구요;
제가 이제막 하는초짜라 버전이유인가;; 아무튼 이것때문에 삽질 좀했습니다 ㅡ,.ㅡ;
그럼 연결이 잘되었는지 테스트를 해보겠습니다
dbtest.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"%>
<%@ page import="java.sql.*"%>
<%@ page import="javax.sql.*" %>
<%@ page import="javax.naming.*" %>
<%
Connection conn = null;
try {
Context init = new InitialContext();
DataSource ds = (DataSource) init.lookup("java:comp/env/jdbc/myDB"); //리소스네임입니다
conn = ds.getConnection();
out.println("연결되었습니다!!");
}catch(Exception e){
out.println("연결실패!!");
e.printStackTrace();
}
%>
'JSP' 카테고리의 다른 글
db를 사용한 방문자 카운트 (0) | 2021.12.09 |
---|---|
JSP 로 구현한 방문자 카운트 (0) | 2021.12.09 |
select 해 온 데이터를 HashMap(LinkedHashMap)에 담아 사용하기 (0) | 2021.11.25 |
이미지 섬네일 (0) | 2021.11.22 |
서버와 클라이언트 개념 (0) | 2021.11.22 |
최근댓글