DBCP(DataBase Connection Pool)

goยท2024๋…„ 7์›” 17์ผ

๐Ÿ’ก 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 ์œผ๋กœ ์ ‘์†ํ•ฉ๋‹ˆ๋‹ค.

Apache Tomcat ๐Ÿ”—

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 ๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๋งค๋ฒˆ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•˜๋Š” ๋Œ€์‹ , ๋ฏธ๋ฆฌ ์„ค์ •๋œ ์—ฐ๊ฒฐ ํ’€์—์„œ ์—ฐ๊ฒฐ์„ ๊ฐ€์ ธ์™€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์„ฑ๋Šฅ ํ–ฅ์ƒ๊ณผ ์ž์› ํšจ์œจ์„ฑ์„ ๋†’์ด๋Š”๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ๐ŸŽ‰

profile
์•ˆ๋…•ํ•˜์„ธ์š”!

0๊ฐœ์˜ ๋Œ“๊ธ€