Tomcat DB 연동
설명
일반적으로, 보안을 위해서 데이터베이스의 접속 정보를 Tomcat 서버에 저장해두고, 접근권한을 막아버리는 형태로 사용합니다.
프로젝트에 접속정보가 없고, 톰캣 폴더 안에 있기 때문에 보안에 유리합니다.
하지만 요즘에는 Spring Cloud Config 라는 별도의 설정정보를 관리하는 서버를 사용할 수 있도록 제공하고 있기 때문에, 스프링 최신버전이나 스프링 부트를 사용하시는 분들에게는 한번 고려해볼만한 기술인 것 같습니다.
데이터베이스 접속정보와 같은 보안에 민감한 정보를 사용하기에 가장 일반적인 방법인 Tomcat 서버측에 관리하는 방법은 아래와 같습니다. name 값으로 리소스 태그를 구분합니다.
driverClassName, url, username, password ... 등의 속성을 통해서 데이터베이스 접속 정보를 정의합니다.
[ 파일명 : tomcat/conf/server.xml ]
데이터베이스의 접속 정보를 Resource 태그로 정의합니다. 키 값은 name 값으로 구분합니다.
<GlobalNamingResources>
<Resource
name="jdbc/DB종류"
auth="Container"
type="javax.sql.DataSource"
driverClassName="org.DB종류.Driver"
url="jdbc:postgresql://localhost:포트번호/postgres"
username="DBid"
password="DBpass"
maxTotal="20"
maxIdle="10"
maxWaitMillis="-1"/>
</GlobalNamingResources>
[ 파일명 : tomcat/conf/context.xml ]
Resource 태그로 정의해둔 리소스를 Context에 링크를 통해 등록해줍니다.
이때 name 값과 global 값을 Resource 태그의 값과 동일하게 입력해줍니다.
<Context>
<ResourceLink
global="jdbc/DB종류"
name="jdbc/DB종류"
type="javax.sql.DataSource"/>
</Context>
[ 파일명 : project/**/web.xml ]
프로젝트에서 Tomcat 서버 컨텍스트의 리소스를 사용하기 위해, 아래와 같이 name 값과 부가정보를 등록해줍니다.
<resource-ref>
<description>test</description>
<res-ref-name>jdbc/testdb</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
구현
[ 파일명 : tomcat/conf/context.xml ]
<Resource name="jdbc/myoracle" auth="Container"
type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@127.0.0.1:1521:orcl"
username="id" password="pass" maxTotal="20" maxIdle="10"
maxWaitMillis="-1"/>
[ 파일명 : project/WEB-INF/web.xml ]
<resource-ref>
<description>Oracle Datasource</description>
<res-ref-name>jdbc/myoracle</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
[ 파일명 : project/WEB-INF/src/DBBean/DBcpBean.java]
package fintech_pj;
import java.sql.Connection;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
public class DBcpBean {
private Connection conn;
public DBcpBean() {
try {
Context initContext = new InitialContext();
Context envContext = (Context)initContext.lookup("java:/comp/env");
DataSource ds = (DataSource)envContext.lookup("jdbc/myoracle");
conn = ds.getConnection();
System.out.println("Connection 얻어오기 성공!");
}catch(Exception e) {
e.printStackTrace();
}
}
public Connection getConn() {
return conn;
}
}
[ 파일명 : project/test.jsp]
<%@ page language="java" contentType="text/html; charset=euc-kr"
pageEncoding="euc-kr"%>
<%@ page import="fintech_pj.DBcpBean"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
DBcpBean db = new DBcpBean();
%>
<%= db.getConn() %>
</body>
</html>