본문 바로가기
Category/JSP&Servlet

커넥션 풀(ConnectionPool)

by developer__Y 2023. 12. 1.
DataBase Connection Pool

 

접속인원이 많은 웹 페이지에서 데이터베이스의 효율성과 속도를 높이기 위해서 사용
DBCP 매니저가 일정량의 연결을 확보해 놓고 있다가, 클라이어트의 요청이 들어오면 연결해주고,
작업이 다 끝나면 연결을 다시 Pool 매니저에게 반환하게 만드는 기법.

 

 

=> 기존에 JDBC를 통해 매번 DB에 접근할때마다 Connect 객체를 생성하고 연결하는 방식 대신,

미리 WAS가 Connect 객체들을 pool에 일정량 생성해놓고 HTTP 요청이 들어올때 이러한 pool에 있는

Connect 객체들을 하나씩 빌려주고, 사용한뒤 다시 반납하는 방식이 훨씬더 효율적이다.

이런 방식으로 미리 커넥션 객체들을 생성함으로써 매번 요청이 들어올때마다 커넥션 객체를 생성하고, 연결하는 처리시간을 줄일수있다는 장점이있다.

 

 

DataBase Connection Pool

 

 

커넥션풀 설정방법

 

server.xml 파일에서 관련 설정을 한다.

  • name : java:comp/env와 관련하여 생성되어지는 자원의 이름을 기술한다.
  • auth : 컨테이너의 자원 관리자로 기술, 대부분 Container를 사용
  • type : 웹상에서 자원의 이름을 찾으면 type 속성값에 기술된 클래스로 내보내진다.
  • maxActive : 최대 연결 가능한 Connection 수
  • maxIdle : 커넥션풀 유지를 위한 최대 대기 Connection 숫자
  • maxWait : 사용가능한 커넥션이 없을때 커넥션 회수를 기다리는 시간(1000=1초)

 

DataSource를 통한 DBCP 사용방법
  1. DBCP를 사용
    :InitialContext 객체를 생성
  2. Context 클래스 타입으로 된 ctx 레퍼런스 변수를 선언
    :  new 연산자로 InitialContext 클래스의 객체를 생성
  3. 컨텍스트 객체의 lookup 메서드로 DBCP에서 지정한 이름을 찾음
    : 존재한다면 DataSource가 받는다.
  4. java:comp/env/”뒤에 기술한 “jdbc/oracle“
    :server.xml 파일의 <Resource> 태그의 name 속성
  5. lookup 메소드가 되돌리는 값을 저장하는 변수
    :server.xml 파일의 <Resource> 태그의 type 속성
    :jdbc/oracle라는 이름을 찾으면 이를 DataSource 형으로 되돌리도록 <Resource> 태그의
    type 속성에서 지정
  6. DataSource 객체로 Connection 얻기
    :컨텍스트 객체의 lookup 메서드로 얻어낸 DataSource 객체
    getConnection( ) 메소드를 호출하여 컨넥션 객체를 얻어낸다.
		Connection conn=null;
	//	커넥션풀을 위한 DataSource 객체 선언
		DataSource ds=null;
	
		try{
			// InitialContext : 커넥션풀을 사용하기위한 객체 생성해서 Context 타입으로 받음.
			Context ctx =new InitialContext();
			//java:comp/env/ : server.xml에서 리소스 태그에 name을 찾아가겠다. 라는것을
			// lookup 메소드를 이용해서 DataSource타입 ds로 받는다.
			ds = (DataSource)ctx.lookup("java:comp/env/jdbc/oracle");
			// ds가 커넥션 객체를 생성하며 커넥션 연결
			conn = ds.getConnection();
			System.out.println("DBCP 연동 성공");
		}catch(NamingException ne){ //커넥션 풀 이름을 못찾을때 예외
			ne.printStackTrace();
		}
	catch(SQLException se){
			se.printStackTrace();
		}finally{
			try{
//				dbcp 연결된 정보가 있으면 자원 반납				
				if(conn!=null) conn.close();
				
				
			}catch(Exception e){
				e.printStackTrace();
			}
		}

 

server.xml 설정

 

이제 커넥션 풀을 생성했으니, 해당 커넥션 풀을 리소스와 매핑시켜줘야한다.

Tomcat WAS를 사용 할 경우, 톰캣 홈페이지의 Document 탭에 JDBC DataSorce를 얻을수있다.

 

 

 

해당 리소스 정보를 이클립스내 톰캣 서버의 server.xml 설정내 커넥션풀 생성을 위한 프로젝트 파일 Context 설정에 추가해주면 된다.

 

 

해당 리소스 설정을 보면,

name : 커넥션풀을 사용할 자원의 이름.

type : 웹상에서 해당 name을 찾으면, DataSource 클래스로 보낸다.

즉, jdbc/oracle라는 이름을 찾으면 이름에 해당되는 객체 타입이 DataSource으로 리턴 한다는 것이다.  

위 설정을 완료하고, 실행시키면 정상적으로 DBCP가 연결된것을 확인할수있다!

'Category > JSP&Servlet' 카테고리의 다른 글

[JSP] JSP 게시판 답변 기능 추가하기  (0) 2023.12.11
[JSP] JDBC를 이용해서 JSP와 연동하기  (0) 2023.11.29
Session 이란?  (0) 2023.11.27
Cookie란?  (0) 2023.11.24
2. Servlet에서 데이터 처리하기  (1) 2023.11.22