1. 커넥션풀 Connection Pool


커넥션풀(DBCP) 개요

JDBC를 통하여 DB에 연결하기 위해서는 드라이버(Driver)를 로드하고 커넥션(connection) 객체를 받아와야 한다.

JDBC를 사용하면 사용자가 요청을 할 때마다 매번 드라이버를 로드하고 커넥션 객체를 생성하여 연결하고 종료하기 때문에 매우 비효율적이다. 이런 문제를 해결하기 위해서 커넥션풀(DBCP)를 사용한다.

웹페이지에 접속자의 수가 많게 되면 커넥션을 그 만큼 걸어주어야 하기 때문에 서버 과부하 발생한다.

(서버가 다운되는 현상까지 발생)

웹 컨테이너가 실행되면서 커넥션(connection) 객체를 미리 풀(pool)에 생성해 둔다.

DB와 연결된 커넥션(connection)을 미리 생성해서 풀(pool) 속에 저장해 두고 있다가 필요할 때에 가져다 쓰고 반환한다.

미리 생성해두기 때문에 데이터베이스에 부하를 줄이고 유동적으로 연결을 관리 할 수 있다.

 

JDBC: Java Data Base Connectivity

자바 데이터베이스 연결. 정의는 DataBase와 연결하기 위한 Java Interface이다.

DBCP: DataBase Connection Pool

DataBase Connection을 맺고 있는 객체를 관리하기 위한 Connection Pool

*DBCP Java 기반의 웹서비스에서 많이 사용하고 있는 프레임워크들이다. 커넥션 생성은 DBCP에서 이루어짐.

 

DBCP를 위한 파일:

1) mysql 버전

Commons-collections4-4.1-bin.jar

Commons-dbcp2-2.1.1-bin.jar

Commons-pool2-2.4.2-bin.jar

+ db연동 파일(connector)

2) oracle 버전

tomcat-dbcp.jar 

+ db연동 파일(ojdbc6)

 

DBCP 사용을 위한 단계:

1) WebContent>WEB-INF>lib 폴더에 파일을 붙여 넣는다.

2) dynamic web project에 test를 위한 jsp 파일을 먼저 실행한다 (server.xml에 Context 나타내기 위함)

3) jsp를 한 번 실행시키면 Servers>server.xml에 해당 프로젝트에 맞는 Context 태그가 생성된다.

4) Context 태그 안에 Resource태그를 삽입한다.

  - mysql버전 

<Resource name="jdbc/db명" auth="Container" type="javax.sql.DataSource" maxTotal="100" maxIdle="30" maxWaitMillis="10000" username="사용자명" password="비밀번호" driverClassName="com.mysql.jdbc.Driver"

url="jdbc:mysql://localhost:3306/db명"/>

  - oracle버전

<Resource name="jdbc/db명" auth="Container" type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver" url="jdbc:oracle:thin:@127.0.0.1:1521: db명" username="사용자명" password="비밀번호" maxTotal="20" maxIdle="10" maxWaitMillis="-1"/>

 

maxTotal: 100명 기다릴 수 있음

maxIdle: 연결은 30

maxWaitMillis 시간이후에 나가기

 

5)web.xml 파일에 resource-ref 태그 내용 추가하기

  - mysql버전 

  

  - oracle버전

6) DBCP 사용하기

 

여러가지 조합이 있지만, 선생님께서 여러번 테스트를 걸쳐 오류나지 않고 최대 버전을 지원하는 조합을 알려 주셨다. tomcat에서 여러가지 조합을 테스트를 해보아도 좋을 것 같다.

선생님께서 알려주신 조합으로 DBCP 연동을 실습해 보았다.

 

 

 

2. 게시판 DAO


오늘은 게시판 DTO, DAO, DBCP버전을 만들었다.

아직 화면구현까지는 하지 못했으나, DTO, DAO 메소드 모두 test 완료하였다.

내일 화면 구현만 해주면 완성될 것으로 보인다!!

+ Recent posts