커넥션풀 기초

커넥션풀 기초

1. 다운받기

cos-26Dec2008.zip 다운받기



 

1-2. 다운받기2

commons-dbcp-1.4-bin.zip

commons-fileupload-1.3.1-bin.zip

commons-io-2.4-bin.zip

commons-logging-1.2-bin.zip

commons-pool-1.6-bin.zip

위 파일들을 http://apache.org/ 에서 다운받자. 구글에서 apache라는 단어를 붙여 검색하면 더 쉽다.

2. 압축 풀고 jar 파일 빼내기

각 폴더에 압축을 풀고

commons-dbcp-1.4.jar
commons-fileupload-1.3.1.jar
commons-io-2.4.jar
commons-logging-1.2.jar
commons-pool-1.6.jar
cos

위의 jar파일을 빼내서 아래처럼 한 폴더에 모은다.

3. cos.jar

4. commons-dbcp-1.4.jar

commons-pool-1.6.jar

commons-dbcp-1.4.jar와 commons-pool-1.6.jar를 톰캣 폴더 안의 lib 폴더 속에 붙여넣는다.



 

5. 커넥션풀 설정(톰캣 설정)

server.xml을 수정하기 전 (1)새로운 다이나믹 웹 프로젝트를 만들고, (2)빈 jsp파일을 만들고, (3)빈 jsp를 실행해보자(Ctrl+F11)

톰캣에 jar파일이 반영되도록 한 번 서버를 돌려보는 것이다.

5-1. server.xml의 Context 수정

server.xml 을 누르고 Source를 눌러 수정한다.

 

<Context docBase=”DBCPProject” path=”/DBCPProject” reloadable=”true” source=”org.eclipse.jst.jee.server:DBCPProject”/>

을 아래와 같이 변경한다.

<Context docBase=”DBCPProject” path=”/DBCPProject” reloadable=”true” source=”org.eclipse.jst.jee.server:DBCPProject”>
        <Resource
          name=”jdbc/oracle”
          type=”javax.sql.DataSource”
          auth=”Container”
          driverClassName=”oracle.jdbc.driver.OracleDriver”
          url=”jdbc:oracle:thin:@localhost:1521:ORCL”
          password=”tiger”
          username=”scott”
          maxActive=”10″
          maxIdle=”5″
          maxWait=”-1″
/>
</Context>

name=”jdbc/oracle” ->   이름임. 아무거나 써도됨. 마이디비, 라고 써도 됨.
type=”javax.sql.DataSource” ->  우리가 찾아올 때 데이터소스라는 클래스로 찾아와야함. 데이터소스가 아래 변수들을 다 가지고 있음.
auth=”Container” ->     톰캣이 관리한다. 컨테이너=톰캣
driverClassName=”oracle.jdbc.driver.OracleDriver” ->     드라이버 네임. 오라클일 경우 왼쪽과 같이 줘야함
url=”jdbc:oracle:thin:@localhost:1521:ORCL”
password=”tiger” ->     비번
username=”scott” ->    아이디
maxActive=”10″ ->   최대한 몇개를 생성할건지
maxIdle=”5″ ->    미리 몇개를 생성할건지. 계속 5개를 유지하려 노력함
maxWait=”-1″ ->     기다리는 시간. -1이면 계속 기다리라는(무한정) 말. 1000을 주면 1초 후에 나가야 함.

 

cf) 아래처럼 commons-dbcp-1.4.jar 안의 BasicDataSource 내부를 보면 name,type,auth,url,password … 등을 변수로 가지고 있음을 알 수 있다.

5-3. server.xml의 Connector 수정

6. 겟 커넥션(getConnection) 소스의 변화

 public void getConnection(){
    try{
     Context init=new InitialContext();//탐색기를 연다
     Context c=(Context)init.lookup(“java://comp/env”);//C드라이브에 접근
     DataSource ds=(DataSource)c.lookup(“jdbc/oracle”);//그 안에서 파일 하나를 얻어온다.
     conn=ds.getConnection();
    }catch(Exception ex){System.out.println(ex.getMessage());}
 }

7. JNDI의 이해






 

 public void getConnection(){
  try{
   Context init=new InitialContext();//탐색기를 연다
   Context c=(Context)init.lookup(“java://comp/env”);//C드라이브에 접근
   DataSource ds=(DataSource)c.lookup(“jdbc/oracle”);//그 안에서 파일 하나를 얻어온다.
   conn=ds.getConnection();
  }catch(Exception ex){System.out.println(ex.getMessage());}
  
 }

JNDI는 자바 네이밍 디렉토리 인터페이스(Java Naming and Directory Interface)의 약자이다. 저장되는 공간이 폴더 형태로 되어있고, 각 객체가 폴더 내에 저장된다. “저장된 개체의 주소값을 넘겨달라”가 룩업이다.

쉽게 생각하면 탐색기라고 할 수 있다. Context 새 개체를 만들고, comp/env에 접근한 뒤, 그 안에서 지정한 이름(jdbc/oracle)의 데이터 소스를 얻어온다. 그리고 나서 겟 커넥션을 하면 된다.   

그 전에는 연결->사용->해제 였으나, 이제는 연결->사용-> “반환”으로 바뀐다.(커넥션풀)