JSP에서 MySQL을 이용하여 Database Connection Pool(DBCP) 구현하기


Database와 Connection을 맺는 작업은 좀 무거운 작업으로 설명되어 있고 이에 반해서 Connection Pool을 이용하는 것은 DB와의 연결을 구현하는데 아주 좋은 방법으로 평가되고 있다.


"Rather than getting the connection object through the DriverMan-

ager class, we get them through an instance of the DataSource class. This

is considered a best practice because a DataSource object maintains a pool

of persistent database connections in order to eliminate the time consuming

step of establishing a database connection each time the application wishes

to interact with the database."

 -. by David Turner, Jinsok Chae of 'Java Web Programming with Eclipse'


그런데 Oracle과의 DBCP에 대해서는 많이 나와있는데 MySQL과의 연동에 대해서는 자료가 많지 않은듯 하다.

Eclipse에서의 DBCP를 위한 환경설정을 어떻게 할지를 정리해 본다.


 -. DBCP를 위해 필요한 라이브러리는 아래와 같고 이것을 이클립스의 WebContent/WEB-INF/lib 아래에 복사해 둔다. 혹은 톰캣이 설치되어 있는 디렉토리의 lib 폴더에 복사해 둔다.

    ㆍcommons-collections4-4.1.jar

    ㆍcommons-pool2-2.5.0.jar

    ㆍcommons-dbcp2-2.2.0.jar

    ㆍmysql-connector-java-5.1.40-bin.jar


위 라이브러리들은 http://commons.apache.org/에서 다운받을수 있다.


이클립스 상의 Project Explorer의 Servers 항목의 하위 항목 중 context.xml을 열어서 다음의 내용을 추가해 준다.

추가하는 위치는 <Context>...</Context> 사이이다.


<Context>

... 중 략 ...

  <Resource 

  name=""

  type="javax.sql.DataSource"

  auth="Container"

  maxActive="30"

  maxIdle="3"

  maxWait="3000"

  username=""

  password=""

  testOnBorrow="true"

  driverClassName="com.mysql.jdbc.Driver"

  url="jdbc:mysql://localhost:3306/?autoReconnect=true"

  />

</Context>


  DBCP를 이용할 Java 코드에서 지칭할 이름. 즉 Java코드와 context.xml에서 설정한 DBCP의 설정 부분을 연결하는 연결 고리역할 하는 이름이다. 이 이름과 Java 소스 코드 상에서의 명칭이 대소문자가 같아야 하고 이 명칭이 잘못될 경우 다음과 같은 에러가 발생한다.  


Name [MYmysqles] is not bound in this Context. Unable to find [MYmysqles].


그리고 이 두 양자간의 이름이 일치 하지 않을 경우 dataSource.getConnection()에서 java.lang.NullPointerException 에러가 발생한다.


본 예제에서는 ①에 jdbc/MYmysqles라고 지정했다. 

name="jdbc/MYmysqles"

이럴 경우 Java 소스에서는 다음과 같이 표현하게 될 것이다. 즉 context.xml의 name 항목에 지정한 이름과 아래 코드의 envContext.lookup()에서 지정하는 이름이 동일해야 한다는 것이다.


Context context = new InitialContext();

Context envContext = (Context)context.lookup("java:comp/env"); 

DataSource dataSource = (DataSource)envContext.lookup("jdbc/MYmysqles");


  MySQL에 접속하기 위한 계정의 ID


  MySQL에 접속하기 위한 계정의 password


  MySQL에 있는 사용할 실제 DB 명. 여기서는 mysql을 사용하고자 한다. 


여기서 아래 2줄의 코드를 

Context envContext = (Context)context.lookup("java:comp/env"); 

DataSource dataSource = (DataSource)envContext.lookup("jdbc/MYmysqles");


다음과 같이 한줄의 코드로 표현해도 가능하다.

 

dataSource = (DataSource)context.lookup("java:comp/env/jdbc/MYmysqles");


이하 나머지는 JSP의 DB 연동하는 일반적인 코드로 구현하면되므로 나머지는 생략.



+ Recent posts