Debian Linux의 Tomcat에서 PostgreSQL Connection Pool 설정하는 방법을 정리해보았습니다. Tomcat 은 이미 설치되어 있고, 웹루트 디렉토리도 만들어져 있다고 가정하겠습니다.
PostgreSQL 설치
# apt-get install postgresql-8.3 postgresql-server-dev-8.3
사용자, DB 생성
# su - postgres
# psql
template1=# CREATE USER 아이디 WITH PASSWORD '비밀번호';
template1=# CREATE DATABASE 디비이름 WITH ENCODING='utf-8' OWNER 아이디;
계정으로 로그인할 수 있도록 연결설정
# su -
# cd /etc/postgresql/8.3/main/
# vi pg_hba.conf
모두 주석으로 막고 아래만 남김
host all all 0.0.0.0 0.0.0.0 password
local all postgres trust
local all all password
# /etc/init.d/postgresql-8.3 restart
테스트용 테이블 생성
CREATE TABLE tb_admin
(
id Serial NOT NULL,
login Varchar(20) NOT NULL UNIQUE,
passwd Varchar(20) NOT NULL,
name Varchar(20) NOT NULL,
register_date Date NOT NULL,
login_datetime Timestamp,
status_code Varchar(4),
email Varchar(40),
mobile_phone Varchar(20),
PRIMARY KEY (id)
) Without Oids;
INSERT INTO tb_admin(login, passwd, name, register_date, status_code, email, mobile_phone)
VALUES('honggildong', 'ajtwlddl', '홍길동', '2009-11-03', '0000', 'hgd@gmail.com', '010-2222-5555');
INSERT INTO tb_admin(login, passwd, name, register_date, status_code, email, mobile_phone)
VALUES('jangnara', 'dlQmsdl', '장나라', '2009-11-03', '0000', 'jnr@gmail.com', '010-3746-7665');
PostgreSQL JDBC Driver 설치
- http://jdbc.postgresql.org/ 에서 다운로드 한다.
Debian Linux 에서는 다음과 같이 설치한다. /usr/share/java 에 설치된다.
# apt-get install libpg-java
- JDBC Driver 를 $CATALINA_HOME/common/lib 에 복사한다.
Debian 의 Tomcat6 에서는 /usr/share/tomcat6/lib 에 복사한다.
# cd /usr/share/java
# cp postgresql-jdbc3-8.4.jar /usr/share/tomcat6/lib/
Tomcat 설정
- server.xml 의 <Context> 태그 안쪽에 다음을 추가한다.
<Resource name="jdbc/DBName"
auth="Container"
type="javax.sql.DataSource"
driverClassName="org.postgresql.Driver"
loginTimeout="10"
maxWait="5000"
username="아이디"
password="비밀번호"
testOnBorrow="true"
url="jdbc:postgresql://127.0.0.1/디비이름" />
- web.xml 에 다음을 추가한다.
<resource-ref>
<description>PGSQL DB Connection</description>
<res-ref-name>jdbc/DBName</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
테스트 코드 (index.jsp)
- JSP 코드를 다음과 같이 작성한다. 관련 DB와 테이블은 작성되어 있어야 합니다.
<?xml version="1.0" encoding="UTF-8" ?>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<%@ page import="javax.sql.*" %>
<%@ page import="javax.naming.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>DB Test</title>
</head>
<body>
<%
DataSource ds = null;
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
ds = (DataSource) envCtx.lookup("jdbc/DBName");
conn = ds.getConnection();
stmt = conn.createStatement();
rs = stmt.executeQuery("select id, login, passwd, name, register_date, login_datetime, status_code, email, mobile_phone from tb_admin");
while(rs.next()) {
out.println("ID: " + rs.getString("id"));
out.println(", Login: " + rs.getString("login"));
out.println(", Password: " + rs.getString("passwd"));
out.println(", Name: " + rs.getString("name"));
out.println(", Register Date: " + rs.getString("register_date"));
out.println(", Login Datetime: " + rs.getString("login_datetime"));
out.println(", Status Code: " + rs.getString("status_code"));
out.println(", E-Mail: " + rs.getString("email"));
out.println(", Mobile Phone: " + rs.getString("mobile_phone") + "<br/>");
}
rs.close();
stmt.close();
conn.close();
} catch (Exception e) {
out.println("<br /><font color='red'><strong>SQL Exception: " + e + "</strong></font><br/>");
}
%>
</body>
</html>
- JSTL 을 이용하는 경우에는 $CATALINA_HOME/common/lib (/usr/share/tomcat5.5/common/lib) 에 standard.jar, jstl.jar 파일을 복사하고 코드를 다음과 같이 작성합니다.
<%@ page contentType="text/html;charset=utf-8" session="true" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<sql:query var="rs" dataSource="jdbc/DBName">
select id, login, passwd, name, register_date, login_datetime, status_code, email, mobile_phone from tb_admin
</sql:query>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>DB 테스트</title>
</head>
<body>
<c:forEach var="row" items="${rs.rows}">
ID: ${row.id},
Password: ${row.passwd},
Name: ${row.name},
Register Date: ${row.register_date},
Login Datetime: ${row.login_datetime},
Status Code: ${row.status_code},
E-Mail: ${row.email},
Mobile Phone: ${row.mobile_phone} <br/>
</c:forEach>
</body>
</html>