서블릿에서 Tomcat 커넥션 풀을 이용한 MariaDB 연동 방법
서블릿을 사용하여 데이터베이스와 연동할 때, 매번 연결을 새로 생성하는 것은 성능상 비효율적입니다. 이를 해결하기 위해 커넥션 풀(Connection Pool)을 설정하여 데이터베이스 연결을 재사용할 수 있습니다. 이번 글에서는 Tomcat에서 커넥션 풀을 설정하는 방법과 서블릿에서 이를 활용하는 방법을 알아보겠습니다.
1. Tomcat에서 커넥션 풀 설정하기
Tomcat에서는 데이터베이스와의 연결을 효율적으로 관리하기 위해 context.xml
파일을 수정하여 커넥션 풀을 설정할 수 있습니다. 해당 설정을 Tomcat 전체 또는 특정 애플리케이션에 적용할 수 있습니다.
1.1. Tomcat 전체에 커넥션 풀 설정
Tomcat 서버 전체에 적용하기 위해서는 $CATALINA_BASE/conf/context.xml
파일을 수정하여 다음과 같이 설정을 추가합니다.
<Context>
<Resource name="jdbc/BlueShareDB"
auth="Container"
type="javax.sql.DataSource"
maxTotal="20"
maxIdle="10"
maxWaitMillis="-1"
username="blueshare"
password="qwaszx1!"
driverClassName="org.mariadb.jdbc.Driver"
url="jdbc:mariadb://localhost:3307/school"/>
</Context>
1.2. 특정 애플리케이션에 커넥션 풀 설정
특정 애플리케이션에만 적용하고 싶다면, META-INF/context.xml
파일을 생성하여 같은 설정을 추가할 수 있습니다. 이 방법은 개별 애플리케이션에 맞춤형 설정을 적용할 수 있어 유연합니다.
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource name="jdbc/BlueShareDB"
auth="Container"
type="javax.sql.DataSource"
maxTotal="20"
maxIdle="10"
maxWaitMillis="-1"
username="blueshare"
password="qwaszx1!"
driverClassName="org.mariadb.jdbc.Driver"
url="jdbc:mariadb://localhost:3307/school"/>
</Context>
▼ context.xml

2. 속성 값 설명
- name: JNDI 이름으로, 서블릿에서
lookup
메서드를 통해 이 리소스를 찾을 때 사용됩니다. - auth: “Container”로 설정하면 Tomcat에서 이 리소스의 관리를 담당합니다.
- type: 리소스의 타입을 지정하며, 커넥션 풀에서는
javax.sql.DataSource
를 사용합니다. - maxTotal: 커넥션 풀에서 사용할 수 있는 최대 연결 수를 설정합니다.
- maxIdle: 풀에서 유휴 상태로 유지할 수 있는 최대 연결 수를 설정합니다.
- maxWaitMillis: 연결 요청 시 사용할 수 있는 연결이 없을 때 기다릴 최대 시간(밀리초)을 설정합니다.
- username: 데이터베이스에 접속할 때 사용할 사용자 이름입니다.
- password: 데이터베이스 접속 비밀번호입니다.
- driverClassName: JDBC 드라이버의 클래스 이름을 설정합니다. MariaDB의 경우
org.mariadb.jdbc.Driver
를 사용합니다. - url: 데이터베이스 연결 URL을 지정하며, 데이터베이스의 호스트, 포트, 데이터베이스 이름을 포함합니다.
3. 서블릿에서 커넥션 풀 사용하기
커넥션 풀 설정이 완료되면 서블릿에서 InitialContext
와 lookup
메서드를 사용하여 데이터베이스 연결을 가져올 수 있습니다.
예제 코드
package com.bluesharehub;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
@WebServlet("/connectionPoolExample")
public class ConnectionPoolServlet extends HttpServlet {
private DataSource dataSource;
@Override
public void init() throws ServletException {
try {
Context context = new InitialContext();
dataSource = (DataSource) context.lookup("java:comp/env/jdbc/BlueShareDB");
} catch (Exception e) {
throw new ServletException("DB 커넥션 풀을 찾을 수 없습니다.", e);
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
try (PrintWriter out = response.getWriter();
Connection conn = dataSource.getConnection();
PreparedStatement stmt = conn.prepareStatement("SELECT * FROM users");
ResultSet rs = stmt.executeQuery()) {
out.println("<h1>사용자 목록</h1>");
out.println("<ul>");
while (rs.next()) {
out.println("<li>" + rs.getString("username") + "</li>");
}
out.println("</ul>");
} catch (SQLException e) {
e.printStackTrace();
}
}
}
실행 결과

위의 코드를 실행하면 커넥션 풀을 통해 데이터베이스와 연결을 효율적으로 관리할 수 있으며, 사용자 목록이 출력됩니다.
함께 보면 좋은 이전 게시글
- JSP에서 Tomcat 서버와 MariaDB 연동: 커넥션 풀 설정 및 테스트
- 서블릿에서 JDBC로 MariaDB 연동 방법 및 예제 코드
- 서블릿에서 GET 요청 파라미터와 POST 폼 데이터 처리하기
- 서블릿을 활용한 쿠키 및 세션 데이터 처리 방법
- JSP와 Servlet 소개 및 활용도
이 글이 도움이 되셨다면 공유 부탁 드립니다.