JSP에서 Tomcat 서버와 MariaDB 연동: 커넥션 풀 설정 및 테스트

JSP에서 Tomcat 서버와 MariaDB 연동: 커넥션 풀 설정 및 테스트

이 글에서는 JSP 웹 애플리케이션에서 Tomcat 서버와 MariaDB를 연동하고, 커넥션 풀(Connection Pool)을 설정하는 방법에 대해 알아보겠습니다. 이 과정에서는 server.xmlcontext.xml 파일을 수정하고, JNDI(Java Naming and Directory Interface)를 활용하여 데이터베이스 연결을 효율적으로 관리하는 방법을 설명합니다.

1. 커넥션 풀과 JNDI 개념

커넥션 풀(Connection Pool)은 데이터베이스와의 연결을 미리 생성해두고, 필요한 시점에 연결을 재사용함으로써 성능을 향상시키는 기법입니다. 웹 애플리케이션에서 매번 새로운 DB 연결을 생성하는 것은 성능 저하를 유발할 수 있으므로, 커넥션 풀을 활용해 다수의 연결을 효율적으로 관리합니다.

JNDI(Java Naming and Directory Interface)는 Java EE 환경에서 데이터베이스 리소스 등을 참조하기 위해 사용하는 디렉토리 서비스입니다. Tomcat과 같은 서버에서 JNDI를 활용하면, 애플리케이션 코드에서 DB 연결 정보를 직접 다루지 않고 설정 파일에서 관리할 수 있어 보안성과 유지보수성이 향상됩니다.

2. server.xml 파일 변경

먼저, Tomcat 서버의 server.xml 파일에 MariaDB에 대한 커넥션 풀 설정을 추가합니다. 이 설정은 Tomcat이 시작될 때 자동으로 커넥션 풀을 초기화하고 관리할 수 있게 해줍니다.

<GlobalNamingResources>
    <Resource auth="Container"
              driverClassName="org.mariadb.jdbc.Driver"
              type="javax.sql.DataSource" 
              initialSize="5"
              minIdle="5"
              maxTotal="20"
              maxIdle="20"
              maxWaitMillis="5000"
              url="jdbc:mariadb://localhost:3307/school"
              name="dbcp_mariadb"
              username="blueshare"
              password="1234" />
</GlobalNamingResources>

이 설정에서 Resource 태그를 사용해 MariaDB에 대한 커넥션 풀을 정의합니다. 속성은 다음과 같습니다.

  • driverClassName: MariaDB JDBC 드라이버 클래스를 지정합니다.
  • url: 데이터베이스 서버의 URL을 지정합니다.
  • username: 데이터베이스에 접속할 사용자 이름을 지정합니다.
  • password: 데이터베이스에 접속할 때 사용할 비밀번호를 지정합니다.
  • initialSize: 커넥션 풀에서 초기화 시 생성할 커넥션의 개수를 지정합니다. 기본값은 0입니다.
  • minIdle: 풀에서 유지할 최소 유휴 커넥션 개수를 지정합니다. 기본값은 0입니다.
  • maxTotal: 풀에서 생성할 수 있는 최대 커넥션 개수를 지정합니다. 기본값은 8입니다.
  • maxIdle: 풀에서 유지할 수 있는 최대 유휴 커넥션 개수를 지정합니다. 기본값은 8입니다.
  • maxWaitMillis: 커넥션을 얻기 위해 대기할 최대 시간을 밀리초 단위로 지정합니다. 기본값은 -1로, 무한정 대기하게 됩니다.

3. context.xml 파일 변경

다음으로, Tomcat의 context.xml 파일에서 이 커넥션 풀을 참조하는 ResourceLink를 추가합니다. 이 설정은 애플리케이션에서 JNDI를 통해 데이터베이스 연결을 참조할 수 있도록 도와줍니다.

<Context>
    <ResourceLink global="dbcp_mariadb" name="dbcp_mariadb" 
                  type="javax.sql.DataSource"/>
</Context>

이 설정으로 애플리케이션은 dbcp_mariadb라는 이름을 통해 데이터베이스 연결을 참조할 수 있게 됩니다.

4. 서버 재구성 및 생성

설정을 반영하려면, Tomcat 서버를 재구성해야 합니다. 주의할 점은 프로젝트에 생성된 서버를 수정하는 것이 아니라, 실제 설치된 Tomcat의 server.xmlcontext.xml을 수정해야 한다는 것입니다. 수정 후, 기존 프로젝트에 설정된 서버를 삭제하고 새로 생성해야 설정이 적용됩니다.

5. DBConnPool.java 파일 작성

이제 커넥션 풀을 통해 데이터베이스에 연결할 수 있는 클래스를 작성합니다. 아래 코드는 MariaDB에 연결하기 위한 커넥션 풀을 설정한 DBConnPool 클래스입니다.

package common;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

public class DBConnPool {
    public Connection con;
    public Statement stmt;
    public PreparedStatement psmt;
    public ResultSet rs;

    // 기본 생성자
    public DBConnPool() {
        try {
            // 커넥션 풀(DataSource) 얻기
            Context initCtx = new InitialContext();
            Context ctx = (Context) initCtx.lookup("java:comp/env");
            DataSource source = (DataSource) ctx.lookup("dbcp_mariadb");

            // 커넥션 풀을 통해 연결 얻기
            con = source.getConnection();

            System.out.println("DB 커넥션 풀 연결 성공");
        } catch (Exception e) {
            System.out.println("DB 커넥션 풀 연결 실패");
            e.printStackTrace();
        }
    }

    // 연결 해제(자원 반납)
    public void close() {
        try {            
            if (rs != null) rs.close();
            if (stmt != null) stmt.close();
            if (psmt != null) psmt.close();
            if (con != null) con.close();  // 자동으로 커넥션 풀로 반납됨

            System.out.println("DB 커넥션 풀 자원 반납");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

6. 테스트 JSP 페이지 작성

마지막으로, 작성한 DBConnPool 클래스를 활용해 MariaDB 연결을 테스트하는 JSP 페이지를 작성합니다.

<%@ page import="common.DBConnPool" %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<html>
<head><title>커넥션 풀 테스트</title></head>
<body>
    <h2>MariaDB 커넥션 풀 테스트</h2>
    <%
    DBConnPool dbPool = new DBConnPool();
    dbPool.close();
    %>
</body>
</html>

이 JSP 페이지를 실행하면 콘솔에 “DB 커넥션 풀 연결 성공” 및 “DB 커넥션 풀 자원 반납” 메시지가 출력되며, 커넥션 풀을 통한 MariaDB 연결이 정상적으로 이루어졌음을 확인할 수 있습니다.

커넥션 풀 테스트 결과 화면

관련 이전 게시글

위로 스크롤