
๐ก DBCP(DataBase Connection Pool)์ ๋ํด์ ์์๋ด ์๋ค!
๐ฆ DBCP๊ฐ ๋ฌด์์ธ๊ฐ์?
DBCP (DataBase Connection Pool)๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐ์ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ ์ค ํ๋ ์
๋๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ์ ๋ฌธ์ ์
1. ์ฐ๊ฒฐ ์์ฑ ๋น์ฉ : ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐ์ ์ค์ ํ๋ ๋ฐ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆฝ๋๋ค.
2. ์์ ๋ญ๋น : ๋งค๋ฒ ์๋ก์ด ์ฐ๊ฒฐ์ ์์ฑํ๊ณ ๋ซ๋ ๊ฒ์ ์์์ ๋ญ๋นํ๊ฒ ๋ฉ๋๋ค.
3. ๋์์ฑ ๋ฌธ์ : ๋ง์ ์ฌ์ฉ์๋ค์ด ๋์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ๋ ค ํ๋ฉด, ์ฐ๊ฒฐ์ ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ ๊ฒ์ด ์ด๋ ค์์ง๋๋ค.
โญ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฏธ๋ฆฌ ์ผ์ ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ์ ๋ง๋ค์ด ๋๊ณ , ์ด๋ฅผ ์ฌ์ฌ์ฉ ํ๋ ๋ฐฉ์์ธ DBCP๋ฅผ ์ฌ์ฉํฉ๋๋ค!
DBCP์ ์๋ ์๋ฆฌ
1. ์ด๊ธฐํ : ์ ํ๋ฆฌ์ผ์ด์
์ด ์์๋ ๋, DBCP๋ ๋ฏธ๋ฆฌ ์ ํด์ง ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ์ ์์ฑํฉ๋๋ค.
2. ์์ฒญ ์ฒ๋ฆฌ : ์ฌ์ฉ์๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐ์ ์์ฒญํ๋ฉด, DBCP๋ ๋ฏธ๋ฆฌ ๋ง๋ค์ด๋ ์ฐ๊ฒฐ ์ค ํ๋๋ฅผ ํ ๋นํฉ๋๋ค.
3. ๋ฐํ : ์ฌ์ฉ์๊ฐ ์์
์ ๋ง์น๋ฉด, ์ฐ๊ฒฐ์ ๋ซ์ง์๊ณ DBCP์ ๋ฐํํฉ๋๋ค. DBCP๋ ์ด ์ฐ๊ฒฐ์ ๋ค์ ์์ฒญ์ ์ํด ๋ค์ ์ฌ์ฉํ ์ ์๊ฒ ์ค๋นํฉ๋๋ค.
DBCP ์ค์ ๋ฐฉ๋ฒ
๋จผ์ , ์ ๋ Tomcat ์์ ์ ๊ณต๋๋ DBCP๋ฅผ ์ค์ ํ๊ฒ ์ต๋๋ค.
Download - Archives ์ผ๋ก ์ ์ํฉ๋๋ค.

Parent Directory๋ฅผ ํด๋ฆญํฉ๋๋ค.

์๋ง์ ํด๋๋ค ์ค commons ํด๋๋ฅผ ์ฐพ์ ํด๋ฆญํฉ๋๋ค.
*commons ํด๋๋ ์ํ์น์์ ์ ์ํ๊ณ ์๋ ํ์ค๊ธฐ์ ์ ๋๋ค.

๋ ์ ๋ง์ ํด๋๋ค์ ๋ณผ ์ ์์ต๋๋ค.
ํ์ง๋ง ์ ํฌ๋ 3๊ฐ์ ํด๋๋ฅผ ์ฐพ์๋ผ๊ฑฐ์์!
๋ฐ๋ก, collections / dbcp / binaries ์ ๋๋ค.
3๊ฐ์ ํด๋๊ฐ ์๋ค๋๊ฑธ ํ์ธ ํ, ๋จผ์ collections๋ฅผ ํด๋ฆญํ๊ฒ ์ต๋๋ค.

collections - binaries๋ก ์ ์ํ๊ฒ ์ต๋๋ค.

๋ ๋ฌด์ํ ๋ง์ ํ์ผ๋ค์ด ๋ฒ์ ๋ณ๋ก ๋์ด๋์ด ์์ต๋๋ค.
์ ๋ commons-collections4-4.4-bin.zip์ ๋ค์ด๋ฐ์๊ฒ์ !
(์ด๋ค๊ฑธ ๋ค์ด๋ฐ๊ฑด ์์ ์ ๋๋ค)

๋๊ฐ์ด dbcp - binaries / pool - binaries ์ ์ ์ํ์ฌ์ ํ์ผ์ ๋ค์ด ๋ฐ์์ค๋๋ค.


๋ค์ด๋ฐ์ zip ํ์ผ์ lib ํด๋์ ๋ฃ์ด์ ์์ถ์ ํ์ด์ค๋๋ค.
๊ทธ๋ฆฌ๊ณ ์๋์ ์ฌ์ง๊ณผ ๊ฐ์ด lib ํด๋์ ์์ถ์ ํ์ด์ ํด๋น ํ์ผ๋ง ๋จ๊ฒจ๋๊ณ ๋ชจ๋ ์ญ์ ํฉ๋๋ค.

DBCP๋ฅผ ์ฌ์ฉํ ์ดํด๋ฆฝ์ค lib ํด๋์ ๋ชจ๋ ๋ณต์ฌํด์ ๋ฃ์ด์ค๋๋ค.

๋ค์ ์ํ์น ํํ์ด์ง๋ก ๋์ด๊ฐ์, Document - Tomcat 9.0 ์ ์ ์ํฉ๋๋ค.

Apache Tomcat User Guide - JDBC DataSource ํด๋ฆญ !

Table of Contents - Oracle 8i, 9i & 10g' ํด๋ฆญ !

์ด 3๊ฐ์ง์ ์์ค๋ฅผ ํ์ฉํ๊ฒ ์ต๋๋ค.
์์ค๋ฅผ ๋ณต์ฌ๋ถ์ฌ๋ฃ๊ธฐ ํ ๊ฑด๋ฐ, ๋จผ์ ๋ฉ๋ชจ์ฅ์ ๋ฏธ๋ฆฌ ์ฎ๊ฒจ๋๊ณ ๋ฉ๋ชจ์ฅ์์ ๋ณต์ฌํด์ ์ฝ๋๋ก ๋ถ์ฌ๋ฃ๊ธฐ ํ๋๊ฑธ ๊ถ์ฅ๋๋ฆฝ๋๋ค.

๋ฉ๋ชจ์ฅ์์ DB์ฐ๊ฒฐ ๊ฒฝ๋กํ์์ ๋ง๊ฒ ์๋ก ์์ ํ ์ฝ๋๋ฅผ Servers - server.xml ์์ 35๋ฒ์งธ ์ค 'GlobalNamingResources' ๋ฐ๋ก ๋ฐ ๊ณต๋ฐฑ์ ์๋์ ์ฝ๋๋ฅผ ๋ฃ์ด์ค๋๋ค.
<Resource name="jdbc/myoracle" auth="Container"
type="javax.sql.DataSource" driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@localhost:1521:xe"
username="scott" password="1234" maxTotal="20" maxIdle="10"
maxWaitMillis="-1"/>

Servers - web.xml ์์ 18๋ฒ์งธ ์ค ๋ฐ๋ก ๋ฐ ๊ณต๋ฐฑ์ ์๋์ ์ฝ๋๋ฅผ ๋ฃ์ด์ค๋๋ค.
<resource-ref>
<description>Oracle Datasource example</description>
<res-ref-name>jdbc/myoracle</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

Servers - content.xml ์์ 18๋ฒ์งธ ์ค ๋ฐ๋ก ๋ฐ ๊ณต๋ฐฑ์ ์๋์ ์ฝ๋๋ฅผ ๋ฃ์ด์ค๋๋ค.
<ResourceLink global="jdbc/myoracle" name="jdbc/myoracle" type="javax.sql.DataSource"/>

์ดํด๋ฆฝ์ค์์ ์๋ก์ด ํจํค์ง๋ฅผ ๋ง๋ค๊ณ DB ํด๋์ค๋ฅผ ์์ฑํฉ๋๋ค. (ํด๋์ค๋ช ์ ์์ )

DB ํด๋์ค์ ์๋์ ์ฝ๋๋ฅผ ์ถ๊ฐํฉ๋๋ค.
import javax.naming.*;
import javax.sql.*;
import java.sql.*;
public class YongDB {
static DataSource ds;
static {
try {
Context initContext = new InitialContext();
Context envContext = (Context)initContext.lookup("java:/comp/env");
ds = (DataSource)envContext.lookup("jdbc/myoracle");
} catch(Exception e) {
e.printStackTrace();
}
}
public static Connection getConn() throws Exception{
return ds.getConnection();
}
}

๐ก ํ์ฉ ์์ (๋ณ๊ฒฝ ์ )

๊ธฐ์กด์ ๋ฐฉ์์์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐํ๊ธฐ ์ํด dbConnect()๋ผ๋ ๋ฉ์๋๋ฅผ ์์ฑํ๊ณ , ์ด๋ฅผ ํธ์ถํ์ฌ ์ฐ๊ฒฐ์ ์ค์ ํ์ต๋๋ค. ํ์ง๋ง DBCP๋ฅผ ํ์ฉํ๋ค๋ฉด ๋นจ๊ฐ์ ๋ค๋ชจ์นธ ๋ถ๋ถ์ ์ญ์ ํ๊ณ ๋จ ํ์ค๋ก ์์ฑํ ์ ์์ต๋๋ค.
๐ก ํ์ฉ ์์ (๋ณ๊ฒฝ ํ)

DBCP ๋ฅผ ํ์ฉํ๋ฉด ๋งค๋ฒ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ์ ์ค์ ํ๋ ๋์ , ๋ฏธ๋ฆฌ ์ค์ ๋ ์ฐ๊ฒฐ ํ์์ ์ฐ๊ฒฐ์ ๊ฐ์ ธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ ์ฑ๋ฅ ํฅ์๊ณผ ์์ ํจ์จ์ฑ์ ๋์ด๋๋ฐ ๋์์ด ๋ฉ๋๋ค. ๐