[JSP] Connection Pool(DBCP) 데이터베이스 연결

Yun zzin·2021년 12월 14일
0

JSP

목록 보기
2/6

Connection Pool(DBCP) 이란?

  • Database Connection Pool의 약자로 데이터베이스와 Connection을 맺고 있는 객체를 관리하는 역할을 담당한다.

Connection Pool 사용 이유

  • JDBC를 통해 데이터베이스에 연결하기 위해서 드라이버를 로드하고 Connection 객체를 받아와야 한다.
  • JDBC를 사용하면 클라이언트가 요청할 때 마다 매번 드라이버를 로드하고 Connection 객체를 생성하여 연결하고 종료하기 때문에 비효율적이다.

Connection Pool(DBCP)

  1. 웹 컨테이너(톰캣 등)가 실행되면서 Connection객체를 미리 Pool을 만들어서 일정 개수를 생성해 저장한다.
  2. 클라이언트로부터 요청이 발생하면 Connection 객체를 필요할때마다 사용한다.
  3. 클라이언트와 연결이 종료되면 다시 Pool에 반환하여 보관한다.
  • 미리 생성해두기 때문에 데이터베이스에 부하를 줄이고 유동적으로 관리할 수 있다.
  • Connection을 재사용하기 때문에 생성되는 Connection 개수를 설정할 수 있다.
  • 접속하는 사용자만큼 Connection 객체를 생성하여 사용하게 되므로 시스템 부하를 주어서 사용자가 많을 경우 필수적이다.
  • Connection Pool을 크게 설정하면 메모리 소모가 큰 대신에 많은 사용자의 대기 시간이 줄어든다
  • Connection Pool을 작게 설정하면 그만큼 대기시간이 길어진다.

Connection Pool 사용 방법

  1. Servers/서버(Tomcat)/server.xml 에 들어간다.
  2. Context 태그 내에서 설정하려는 프로젝트를 찾는다.(여기선 프로젝트 이름 : DataBase)
  3. Resource 태그 내에서 Connection Pool 설정

  • 소스 코드
      <Context docBase="DataBase" path="/DataBase" reloadable="true" source="org.eclipse.jst.jee.server:DataBase">
      <Resource auth="Container" driverClassName="oracle.jdbc.driver.OracleDriver" loginTimeout="10" maxWait="5000" 
                name="jdbc/pool" password="1234" type="javax.sql.DataSource" url="jdbc:oracle:thin:@localhost:1521:XE" username="sys as SYSDBA"/>
      </Context>
  • name : 이름. (임의로 설정)
  • auth : 관리자 Container가 관리.(웹 서버)
  • type : 무슨 타입을 쓸 것인가. javax.sql.DataSource라는 클래스를 이용해 Connection Pool 사용
  • driverClassName : 어떤 DB를 쓸 것인가. (여기선 Oracle)
  • maxWait : Connection을 열기 위해 최대로 기다리는 시간
  • url : DB 접속 경로
  1. DAO Connection Pool 설정
public class DAO {

	Connection con;	//db에 접근할 수 있도록 설정

	public void getCon() { //db에 접근할 수 있도록 도와주는 메소드
		
		try {
			//외부에서 데이터를 읽어드려야돼서 Context 사용
			Context initctx = new InitialContext();
			//톰캣 서버에 정보를 담아놓은 곳으로 이동
			Context envctx = (Context) initctx.lookup("java:comp/env"); //자바 환경설정
			//데이터소스 객체 선언. Resource name 값을 찾아옴.
			DataSource ds = (DataSource) envctx.lookup("jdbc/pool");
			//데이터 소스를 기준으로 커넥션을 연결
			con = ds.getConnection();
          
		}catch(Exception e) {
			e.printStackTrace();
		}	
	} //getCon end
} //DAO end
  • 메소드로 작성 후 필요시 호출해서 사용한다.

참고

  • 인프런 JSP 웹 쇼핑몰 프로그래밍 기본 과정(JSP WEB Programming)
profile
공부 기록장

0개의 댓글

관련 채용 정보