프로그래밍 언어/자바 웹

DataSource 이용해 데이터베이스 연동하기

· 코딩마이데이

미리 데이터베이스와 연결시킨 상태를 유지하는 기술을 커넥션풀(ConnectionPool)이라고 부릅니다.

커넥션풀 동작 과정

1. 톰캣 컨테이너를 실행한 후 응용 프로그램을 실행합니다.

2. 톰캣 컨테이너 실행 시 ConnectionPool 객체를 생성합니다.

3. 생성된 커넥션 객체는 DBMS와 연결합니다.

4. 데이터베이스와의 연동 작업이 필요한 경우 응용 프로그램은 ConnectionPool에서 제공하는 메서드를 호출하여 연동합니다.

 

톰캣 컨테이너는 자체적으로 ConnectionPool 기능을 제공합니다. 톰캣 실행 시 톰캣은 설정 파일에 설정된 데이터베이스 정보를 이용해 미리 데이터베이스와 연결하여 ConnectionPool 객체를 생성한 후 애플리케이션이 데이터베이스와 연동할 일이 생기면 ConnectionPool 객체의 메소드를 호출해 연동하여 작업합니다.

 

JNDI

실제 웹 애플리케이션에서 ConnectionPool 객체를 구현할 때는 JAVA SE에서 제공하는 javax.sql.DataSource 클래스를 이용합니다. 그리고 웹 애플리케이션 실행 시 톰캣이 만들어 놓은 ConnectionPool 객체에 접근할 때는 JNDI를 이용합니다.

JNDI(Java Naming and Directory Interface)란 필요한 자원을 키/값(key/value) 쌍으로 저장한 후 필요하는 데 키를 이용해 값을 얻는 방법입니다. 즉, 미리 접근할 자원에 키를 지정한 후 애플리케이션이 실행 중일 때 이 키를 이용해 자원에 접근을 하는 것입니다.

 

톰캣의 DataSource 설정 및 사용 방법

실제 톰캣에서 ConnectionPool 기능을 사용하려면 이 기능을 제공하는 DBCP 라이브러리를 따로 내려 받아야 합니다. 이 라이브러리 파일은 jar 압축 파일 형태로 제공되며, 다음 링크에서 tomcat-dbcp-7.0.30.zip 파일을 내려 받은 후 압축을 풀면 됩니다.

  • http://www.java2s.com/Code/Jar/t/Downloadtomcatdbcp7030jar.htm

 

이클립스에서 톰캣 DataSource 설정

JDBC 드라이버와 ConnectionPool 관련 jar 파일 및 이클립스에서 생성한 톰캣 서버의 설정 파일인 context.xml의 위치를 알 수 있습니다.

ConnectionPool관련 라이브러리와 content,xml 파일 위치

 

context.xml 파일을 보면 <Resource> 태그를 이용해 톰캣 실행 시 연결할 데이터베이스를 설정하는 것을 알 수 있습니다.

    <Resource 
	name="jdbc/oracle"
	auth="Container"
	type="javax.sql.DataSource"
	driverClassName="oracle.jdbc.OracleDriver"
	url="jdbc:oracle:thin:@localhost:1521:XE"
	username="scott"
	password="tiger"
	maxActive="50"
	maxWait="-1"/>

 

오라클 데이터베이스(오라클 DBMS)을 연결할 때 다른 속성들은 고정적으로 사용하며, 프로그래머가 주로 설정하는 정보는 driverClassName, user, password, url만 변경해서 설정합니다.

속성 설명
name DataSource에 대한 JNDI 이름
auth 인증 주체
driverClassName 연결할 데이터베이스 종류에 따른 드라이버 클래스 이름
factory 연결할 데이터베이스 종류에 따른 ConnectionPool 생성 클래스 이름
maxActive 동시에 최대로 데이터베이스에 연결할 수 있는 Connection 수
maxIdle 동시에 idle 상태로 대기할 수 있는 최대 수
maxWait 새로운 연결이 생길 때까지 기다릴 수 있는 최대 시간
user 데이터베이스 접속 ID
password 데이테베이스 접속 비밀번호
type 데이터베이스 종류별 DataSoruce
url 접속할 데이터베이스 주소와 포트 번호 및 SID