728x90
DB를 연동하는 JSP 페이지에서 매번 Connection객체를 생성하고 반납하는 방법은 비효율적입니다.
그러므로 일정 갯수의 커넥션을 생성하여 가지고 있다가 커넥션이 필요할때 가져다가 사용하고 끝나면 다시 반납하는 방법이 효율적인 방법입니다. 이를 커넥션 풀을 사용하여 구현합니다.
커넥션 풀을 사용하면 Connection 객체의 생성과 반납에 의한 페이지 성능 저하를 대폭 개선할 수 있고 한번 사용한 커넥션을 재사용할 수 있으며 일정 개수를 유지하여 많은 커넥션으로 인한 서버 다운 등을 방지 할 수 있습니다.
커넥션 풀 구축 유형
유형 | 설명 |
직접 구현 | 개발자가 javax.sql.DataSource 인터페이스를 직접 구현하거나 새로운 형태의 커넥션 풀을 직접 구현하는 방법 |
DBCP API를 이용한 구현 | 아파치의 공개된 커넥션 풀 API인 DBCP API를 사용하는 방법 |
WAS 제공 | 최근의 WAS는 javax.sql.DataSource 인터페이스를 따르는 커넥션 풀을 제공하므로 이를 사용하는 방법 |
프레임워크 제공 | 스프링이나 스트러츠 등과 같은 애플리케이션 프레임워크가 제공하는 커넥션 풀을 사용하는 방법 |
톰캣에서는 DBCP API를 제공합니다.
1. 톰캣에 DataSource 설정하기
톰캣에 DataSource를 설정하기 위해서는 server.xml 혹은 context.xml에서 이를 수행합니다.
server.xml은 톰캣 전체에 관한 설정이고 conext.xml은 특정 애플리케이션에 관한 설정입니다.
xml에 다음과 같은 리소스를 등록합니다.
<Resource auth="Container"
name="jdbc/mysql"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/chap08"
username="root" password="1111" maxActive="5"
maxIdle="3" maxWait="-1" />
속성 | 설명 |
driverClassName | JDBC 드라이버 클래스이름 |
url | 접속할 DB 식별자 |
username | DB 접속 계정 |
password | 계정 비밀번호 |
maxActive | 최대 커넥션 수 |
maxidle | 유휴시의 최대 커넥션 수 |
2. web.xml 서버 리소스 참조 설정하기
server.xml이나 context.xml에 설정 후 web.xml에 JNDI 설정을위해 <resource-ref>엘리먼트를 추가합니다.
이 엘리먼트는 애플리케이션이 참조하는 서버 리소스에 대한 설정입니다.
<resource-ref>
<res-ref-name>jdbc/mysql</res-ref-name>
<res-auth>Container</res-auth>
</resource-ref>
3. 애플리케이션에서 DataSource 객체 구하기
4. DataSource 객체를 사용한 Connection 객체 구하기
DataSource객체를 구한다음 이를 통해 Connection 객체를 구합니다.
// InitialContext() 객체를 생성한 후
Context init = new InitialContext() ;
// InitialContext() 객체의 lookup 메서드를 사용하여 DataSource 객체를 구한다.
// 이때 JNDI 이름을 매개변수로 사용하여 서버에서 등록한 커넥션 풀 자원을 찾는다.
DataSource ds = (DataSource)init.lookup("java:/comp/env/jdbc/mysql") ;
conn = ds.getConnection() ; // 커넥션풀에서 커넥션을 가져온다.
if (conn != null) try { conn.close(); } catch(SQLException ex) {}
//커넥션풀에 사용한 커넥션을 반납한다.
'학습(구) > JSP' 카테고리의 다른 글
디자인 패턴 - 구조 패턴 (0) | 2020.11.16 |
---|---|
디자인 패턴 - 생성 패턴 (0) | 2020.11.16 |
DB연동-JDBC (0) | 2020.09.18 |
커스텀 태그 (0) | 2020.09.17 |
JSTL - fmt태그 (0) | 2020.09.17 |