๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Java·๏ปฟServlet·๏ปฟJSP

Tomcat ์„œ๋ฒ„ DataSource ์„ค์ • ๋ฐฉ๋ฒ• (+JNDI)

by Leica 2020. 2. 17.
๋ฐ˜์‘ํ˜•

ํ™˜๊ฒฝ ์ •๋ณด

IntelliJ IDEA 2019.3 Ultimate, Amazon Corretto 11, Tomcat 9, JDBC 4.2, ์˜์กด์„ฑ ๊ด€๋ฆฌ ํ™˜๊ฒฝ X

Tomcat ์„œ๋ฒ„ DataSource ์„ค์ • ๋ฐฉ๋ฒ• (+JNDI)

โ• ํฌ์ŠคํŠธ ์ƒ๋‹จ์—๋Š” DataSource, JNDI์˜ ์ด๋ก ์ ์ธ ๋‚ด์šฉ์ด ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ๋ฐ”๋กœ ์„ค์ •, ์ ์šฉ ๋ฐฉ๋ฒ•์„ ๋ณด๋ ค๋ฉด ์Šคํฌ๋กค์„ ๋ฐ‘์œผ๋กœ ๋‚ด๋ ค 'DataSource ์ ์šฉ'๋ถ€ํ„ฐ ๋ณด๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

DataSource๋Š” JDK 1.4๋ถ€ํ„ฐ ํฌํ•จ๋œ javax.sql ํŒจํ‚ค์ง€์˜ API์ด๋‹ค. DataSource๋ฅผ ์ด์šฉํ•˜์—ฌ Java EE ์„œ๋ฒ„(์˜ˆ: ํ†ฐ์บฃ ์„œ๋ฒ„)์—์„œ DB ์ปค๋„ฅ์…˜ ํ’€์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

javax.sql ํŒจํ‚ค์ง€

javax.sql ํŒจํ‚ค์ง€๋Š” java.sql ํŒจํ‚ค์ง€์˜ ๊ธฐ๋Šฅ์„ ๋ณด์กฐํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ํ™•์žฅ ํŒจํ‚ค์ง€์ด๋‹ค.

์„œ๋ฒ„ ์ชฝ ๋ฐ์ดํ„ฐ ์†Œ์Šค์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ์‰ฝ๊ฒŒ ํ•˜๊ณ  ๋” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” API๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

JDK 1.4๋ถ€ํ„ฐ ํฌํ•จ๋˜์—ˆ๊ณ  Java EE์—์„œ ๊ธฐ๋ณธ ํŒจํ‚ค์ง€๋กœ ์ •์˜๋˜์–ด ์žˆ๋‹ค.

 

๐Ÿ“ javax.sql ํŒจํ‚ค์ง€ ์ฃผ์š” ๊ธฐ๋Šฅ

โœ” DriverManager๋ฅผ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋Š” DataSource ์ธํ„ฐํŽ˜์ด์Šค ์ œ๊ณต
โœ” Connection, Statement ๊ฐ์ฒด์˜ Pooling
โœ” ๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ
โœ” Rowsets ์ง€์›

 

DataSource

DataSource๋Š” DriverManager๋ฅผ ํ†ตํ•ด DB ์ปค๋„ฅ์…˜์„ ์–ป๋Š” ๊ฒƒ ๋ณด๋‹ค ๋” ์ข‹์€ ๊ธฐ๋ฒ•์„ ์ œ๊ณตํ•œ๋‹ค.

 

โœ” ์ฒซ์งธ, DataSource๋Š” ์„œ๋ฒ„์—์„œ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— DB๋‚˜ JDBC ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ๋ณ€๊ฒฝ์ด ์ˆ˜์›”ํ•˜๋‹ค.

DriverManager๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— DB ์ ‘์† ์ •๋ณด๋‚˜ JDBC ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ๋ณ€๊ฒฝ๋  ๊ฒฝ์šฐ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ฝ”๋“œ๋„ ๋ณ€๊ฒฝํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

โœ” ๋‘˜์งธ, Connection, Statement ๊ฐ์ฒด๋ฅผ poolingํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜์„ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰ DataSource๋Š” ์ž์ฒด์ ์œผ๋กœ Connection Pool ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•œ๋‹ค. DriverManager๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ Connection Pool ๊ธฐ๋Šฅ์„ ๋ณ„๋„๋กœ ๊ฐœ๋ฐœํ•˜๊ณ  ๊ด€๋ฆฌํ•ด์•ผํ•œ๋‹ค.

 

๐Ÿ“ DataSource์˜ Connection

DataSource๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” Connection ๊ฐ์ฒด๋Š” DriverManager์˜ Connection ๊ฐ์ฒด๋ฅผ ํ•œ๋ฒˆ ๋” ๊ฐ์‹ผ ํ˜•ํƒœ์ด๋‹ค.
DAO๊ฐ€ DataSource์—๊ฒŒ Connection์„ ๋‹ฌ๋ผ๊ณ  ์š”์ฒญํ•˜๋ฉด DataSource๋Š” Connection ๋Œ€ํ–‰ ๊ฐ์ฒด(Proxy Object)๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. Apache DBCP ์ปดํฌ๋„ŒํŠธ์˜ ๊ฒฝ์šฐ ๋Œ€ํ–‰ ๊ฐ์ฒด์ธ PoolableConnection์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

PoolableConnection ๊ฐ์ฒด๋Š” Connection ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜์˜€์œผ๋ฉฐ ์‹ค์ œ Connection์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ฐธ์กฐ ๋ณ€์ˆ˜(_conn)์™€ connection pool์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ฐธ์กฐ ๋ณ€์ˆ˜(_pool)๊ฐ€ ๋“ค์–ด์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด PoolableConnection์ด ์ง์ ‘ ์ฒ˜๋ฆฌํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ์‹ค์ œ Connection์—๊ฒŒ ์ฒ˜๋ฆฌ๋ฅผ ์œ„์ž„ํ•œ๋‹ค.

๋”ฐ๋ผ์„œ DataSource๊ฐ€ ๋ฐ˜ํ™˜ํ•œ Connection ๊ฐ์ฒด์— close()๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด PoolableConnection์€ ์‹ค์ œ Connection ๊ฐ์ฒด๋ฅผ connection pool์— ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ฆ‰ ์‹ค์ œ๋กœ Connection ๊ฐ์ฒด๊ฐ€ ๋‹ซํžˆ๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ์žฌ์‚ฌ์šฉํ• ์ˆ˜ ์žˆ๋„๋ก pool์— ๋ฐ˜๋‚ฉ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

 

JNDI(Java Naming and Directory Interface API)

๋””๋ ‰ํ„ฐ๋ฆฌ ์„œ๋น„์Šค์— ์ ‘๊ทผํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•˜๋Š” API
์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์€ JNDI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ฒ„์˜ resource๋ฅผ ์ฐพ๋Š”๋‹ค.
ํŠนํžˆ JDBC resource๋ฅผ data source๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

Resource๋ฅผ ์„œ๋ฒ„์— ๋“ฑ๋กํ•  ๋•Œ ๊ณ ์œ ํ•œ JNDI ์ด๋ฆ„์„ ๋ถ™์ด๋Š”๋ฐ, JNDI ์ด๋ฆ„์€ ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ฒฝ๋กœ ํ˜•ํƒœ๋ฅผ ๊ฐ€์ง„๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด data source์˜ JNDI ์ด๋ฆ„์€ 'jdbc/mydb' ํ˜•์‹์œผ๋กœ ์ง“๋Š”๋‹ค.

 

๋‹ค์Œ์€ Java EE ์„œ๋ฒ„์—์„œ ์ž์›์„ ์ฐพ์„๋•Œ์˜ ๊ธฐ๋ณธ JNDI ์ด๋ฆ„์ด๋‹ค.

 

JNDI ์ด๋ฆ„ ์„ค๋ช…
java:comp/env ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ํ™˜๊ฒฝ ํ•ญ๋ชฉ
java:comp/env/jdbc JDBC Data Source
java:comp/ejb EJB ์ปดํฌ๋„ŒํŠธ
java:comp/UserTransaction UserTransaction ๊ฐ์ฒด
java:comp/env/mail JavaMail ์—ฐ๊ฒฐ ๊ฐ์ฒด
java:comp/env/url URL ์ •๋ณด
java:comp/env/jms JMS ์—ฐ๊ฒฐ ๊ฐ์ฒด

 

๋”ฐ๋ผ์„œ ์„œ๋ฒ„์—์„œ 'jdbc/mydb'๋ผ๋Š” data source๋ฅผ ์ฐพ์œผ๋ ค๋ฉด 'java:comp/env/jdbc/mydb'๋ผ๋Š” JNDI ์ด๋ฆ„์œผ๋กœ ์ฐพ์•„์•ผ ํ•œ๋‹ค. ์ฆ‰ lookup() ๋ฉ”์†Œ๋“œ์— 'java:comp/env/jdbc/mydb'๋ฅผ ์ธ์ž๊ฐ’์œผ๋กœ ๋„˜๊ธด๋‹ค.

 

lookup() ๋ฉ”์†Œ๋“œ๋Š” InitialContext ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ๋กœ JNDI ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„์— ๋“ฑ๋ก๋œ ๊ฐ์ฒด๋ฅผ ์ฐพ๋Š”๋‹ค.

 

DataSource ์ ์šฉ

1. DataSource ๊ตฌํ˜„์ฒด ์ค€๋น„

JDBC๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด JDBC ๊ตฌํ˜„์ฒด = JDBC ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ํ•„์š”ํ•˜๋“ฏ์ด DataSource๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด javax.sql ํŒจํ‚ค์ง€ ๊ตฌํ˜„์ฒด๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

 

http://commons.apache.org/ ์— ์ ‘์†ํ•œ๋‹ค.

 

 

'Components' ํด๋ฆญ

 

'DBCP' ํด๋ฆญ

 

'Downloads' ํด๋ฆญ

 

'commons-dbcp2-2.7.0-bin.zip'์„ ํด๋ฆญํ•˜์—ฌ ๋‹ค์šด๋กœ๋“œ๋ฐ›๋Š”๋‹ค.

 

commons-dbcp2-2.7.0-bin

commons-dbcp2-2.7.0.jar ํŒŒ์ผ์„ ํ”„๋กœ์ ํŠธ lib ๋””๋ ‰ํ† ๋ฆฌ์— ๋ณต์‚ฌํ•ด๋‘”๋‹ค.

 

DBCP ์ปดํฌ๋„ŒํŠธ๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ Pool, Logging ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋„ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์•„์•ผ ํ•œ๋‹ค.

 

DBCP๋ฅผ ๋‹ค์šด๋ฐ›์€ ๊ฒƒ๊ณผ ๋™์ผํ•˜๊ฒŒ Apache Commons ์‚ฌ์ดํŠธ์˜ Components ๋ชฉ๋ก์—์„œ Logging, Pool ๋งํฌ๋ฅผ ํด๋ฆญํ•ด์„œ ๋‹ค์šด๋กœ๋“œ ๋ฐ›๋Š”๋‹ค.

 

commons-pool2-2.8.0

 

commons-logging-1.2

Pool, Logging jarํŒŒ์ผ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ”„๋กœ์ ํŠธ lib ๋””๋ ‰ํ† ๋ฆฌ์— ๋ณต์‚ฌํ•ด๋‘”๋‹ค.

 

์ด๋ ‡๊ฒŒ ์ด 3๊ฐœ์˜ jarํŒŒ์ผ - commons-dbcp.jar, commons-pool.jar, commons-logging.jar ์„ ์ค€๋น„ํ•ด ๋‘”๋‹ค.

 

Project Structure - Dependencies์— ๋‹ค์šด๋ฐ›์€ jarํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

 

 

2. ํ†ฐ์บฃ ์„œ๋ฒ„์— DataSource ์„ค์ •

๋‹ค์Œ์€ ํ†ฐ์บฃ ์‹คํ–‰ ํ™˜๊ฒฝ์—์„œ DataSource๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ์„œ๋ฒ„์— ๋”ฐ๋ผ ์„ค์ • ๋ฐฉ๋ฒ•์ด ๋‹ค๋ฅด๋‹ˆ ๋‹ค๋ฅธ ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ํ•ด๋‹น ์ œํ’ˆ์˜ ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜์ž.

 

ํ”„๋กœ์ ํŠธ(๋ชจ๋“ˆ)์˜ context.xml์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค์ •ํ•œ๋‹ค.

ํ”„๋กœ์ ํŠธ๋ณ„ context descriptor ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์•˜์„ ๊ฒฝ์šฐ ์ด ํฌ์ŠคํŠธ๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ์ถ”๊ฐ€ํ•œ๋‹ค.

 

context.xml

1
2
3
4
5
6
7
8
9
10
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/">
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <Resource name="jdbc/knou" auth="Container" type="javax.sql.DataSource"
              maxActive="10" maxIdle="3" maxWait="10000"
              username="butterfield" password="1234"
              driverClassName="com.mysql.cj.jdbc.Driver"
              url="jdbc:mysql://localhost:3307/knou"
              closeMethod="close" />
</Context>
cs

 

๐Ÿ“ context.xml

Tomcat์— Web application container๋ฅผ ์ ์žฌํ•  ๋•Œ, context๋ฅผ ์ฐธ๊ณ ํ•œ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ Tomcat์€ context.xml์„ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ˆœ์„œ๋กœ ์ฐพ์•„์„œ Web application container์— ์ ์šฉํ•œ๋‹ค.

โ‘  server.xml <Context.xml> ์ฐธ์กฐ - ๊ถŒ์žฅํ•˜์ง€ ์•Š์Œ
โ‘ก CATALINA_HOME/conf/ENGINE_NAME/HOST_NAME/CONTEXT_PATH.xml ์ฐธ์กฐ
<Host>์˜ ์†์„ฑ์— xmlBase ๊ฐ’์ด ์„ค์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ, ์œ„ ์œ„์น˜์— ํ•ด๋‹นํ•˜๋Š” file์„ ์ฐธ์กฐํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. <Engine>์˜ name์†์„ฑ์ด “Catalina“, <Host>์˜ name์†์„ฑ์ด “localhost”์ด๋ฉด WebApp01์˜ context ์„ค์ • file์˜ ์œ„์น˜๋Š”   “CATALINA_HOME/conf/Catalina/localhost/WebApp01.xml“์ด ๋œ๋‹ค.
โ‘ข Web application WAR, directory์˜ /META-INF/context.xml์„ ์ฐธ์กฐํ•œ๋‹ค.
โ‘ฃ CATALINA_HOME/conf/context.xml ์ฐธ์กฐ - ๋‹ค๋ฅธ context file์ด ์—†๋Š” ๊ฒฝ์šฐ

(์ฐธ๊ณ  : https://daitso.kbhub.co.kr/61344/)

 

<WatchedResource> ํƒœ๊ทธ

<WatchedResource>์— ์„ค์ •ํ•œ file์˜ ๋ณ€๊ฒฝ์ด ์žˆ์„ ๋‹ค์‹œ ๋กœ๋“œํ•œ๋‹ค.

 

<Resource> ํƒœ๊ทธ

์ด ํƒœ๊ทธ์— JNDI๊ฐ€ web.xml์˜ <resource-ref>์™€ <resource-env-ref> ์š”์†Œ๋ฅผ ์กฐํšŒ(lookup)ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฐ˜ํ™˜ํ•  resource๋ฅผ ์„ ์–ธํ•œ๋‹ค.

 

์†์„ฑ๋ช… ์„ค๋ช…
name JNDI ์ด๋ฆ„
Context์˜ lookup()์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž์›์„ ์ฐพ์„๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
java:comp/env ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.
auth ์ž์› ๊ด€๋ฆฌ์˜ ์ฃผ์ฒด๋ฅผ ์ง€์ •ํ•œ๋‹ค.
Application / Container๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
type Resource์˜ ํƒ€์ž…์„ ํŒจํ‚ค์ง€ ์ด๋ฆ„์„ ํฌํ•จํ•œ ํด๋ž˜์Šค ์ด๋ฆ„(QName)์„ ์ง€์ •ํ•œ๋‹ค.
driverClassName JDBC ๋“œ๋ผ์ด๋ฒ„ ํด๋ž˜์Šค์˜ ์ด๋ฆ„
ํŒจํ‚ค์ง€ ์ด๋ฆ„์„ ํฌํ•จํ•œ ํด๋ž˜์Šค ์ด๋ฆ„(QName)์„ ์ง€์ •ํ•œ๋‹ค.
url DB ์ปค๋„ฅ์…˜ URL
username DB ์‚ฌ์šฉ์ž ์ด๋ฆ„
password DB ์•”ํ˜ธ
maxActive DataSource๋กœ๋ถ€ํ„ฐ ๊บผ๋‚ผ ์ˆ˜ ์žˆ๋Š” ์ปค๋„ฅ์…˜ ์ตœ๋Œ€ ๊ฐœ์ˆ˜
๊ธฐ๋ณธ๊ฐ’ : 8๊ฐœ
maxIdle DataSource์—์„œ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์ปค๋„ฅ์…˜์˜ ์ตœ๋Œ€ ๊ฐœ์ˆ˜
์ตœ๋Œ€ ์œ ์ง€ ๊ฐœ์ˆ˜๋ฅผ ๋„˜์–ด์„œ ๋ฐ˜๋‚ฉ๋˜๋Š” ์ปค๋„ฅ์…˜์€ close๋œ๋‹ค.
๊ธฐ๋ณธ๊ฐ’ : 8๊ฐœ
maxWait ๋ฐœ๊ธ‰ํ•œ ์ปค๋„ฅ์…˜ ์ˆ˜๊ฐ€ ์ตœ๋Œ€๊ฐ’์ธ ์ƒํƒœ์—์„œ ์ถ”๊ฐ€๋กœ ์ปค๋„ฅ์…˜ ๋ฐœ๊ธ‰ ์š”์ฒญ์ด ๋“ค์–ด์™”์„๋•Œ ์ปค๋„ฅ์…˜์„ ์ค€๋น„ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ˜๋‚ฉ์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ตœ๋Œ€ ๋ฐ€๋ฆฌ์ดˆ
์ตœ๋Œ€ ๋ฐ€๋ฆฌ์ดˆ๊ฐ€ ์ง€๋‚ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋‚ฉ๋˜๋Š” ์ปค๋„ฅ์…˜์ด ์—†์œผ๋ฉด Exception์„ ๋˜์ง„๋‹ค.
๊ธฐ๋ณธ๊ฐ’ : -1 (์ปค๋„ฅ์…˜ ๋ฐ˜๋‚ฉํ• ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆผ)
closeMethod ํ†ฐ์บฃ ์„œ๋ฒ„๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ ์ž์›์„ ํ•ด์ œํ•˜๊ธฐ ์œ„ํ•ด ํ˜ธ์ถœํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋ช…
๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์—†์–ด์•ผ ํ•œ๋‹ค.
ํ†ฐ์บฃ ์„œ๋ฒ„๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ DataSource๋ฅผ ์ƒ์„ฑํ• ๋•Œ ์•„ํŒŒ์น˜ DBCP์˜ BasicDataSource ๊ตฌํ˜„์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ BasicDataSource์˜ ์ž์› ํ•ด์ œ ๋ฉ”์†Œ๋“œ๋Š” close()์ด๋‹ค.

 

3. web.xml ์„ค์ •

context.xml์— ์„ ์–ธํ•œ DataSource๋ฅผ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉํ•˜๋ ค๋ฉด web.xml์— ํ•ด๋‹น resource๋ฅผ ์ฐธ์กฐํ•œ๋‹ค๋Š” ์„ ์–ธ์„ ํ•ด์•ผํ•œ๋‹ค.

web.xml์˜ <web-app> ํƒœ๊ทธ ์•ˆ์— ๋‹ค์Œ ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

 

web.xml

1
2
3
4
5
6
<!-- ์„œ๋ฒ„ ์ž์› ์ฐธ์กฐ ์„ ์–ธ -->
<resource-ref>
    <res-ref-name>jdbc/knou</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>
cs

 

๊ฐ ํƒœ๊ทธ๋Š” ๋‹ค์Œ์„ ์˜๋ฏธํ•œ๋‹ค.

ํƒœ๊ทธ ์„ค๋ช…
<res-ref-name> JNDI ์ด๋ฆ„
context.xml์— ์„ ์–ธํ•œ resource์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•œ๋‹ค.
<res-type> ํ†ฐ์บฃ ์„œ๋ฒ„์—์„œ ๋ฆฌํ„ดํ•˜๋Š” resource์˜ ํด๋ž˜์Šค ์ด๋ฆ„(ํŒจํ‚ค์ง€๋ช… ํฌํ•จ)
context.xml์— ์„ ์–ธํ•œ type๊ณผ ๊ฐ™์•„์•ผ ํ•œ๋‹ค.
<res-auth> ์ž์› ๊ด€๋ฆฌ ์ฃผ์ฒด
Container : ์„œ๋ฒ„์—์„œ ๊ด€๋ฆฌํ•จ์„ ์˜๋ฏธ

 

4. InitialContext ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•ด์„œ DataSource ์–ป๊ธฐ

์•„๋ž˜์™€ ๊ฐ™์ด data source๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

์„ ์–ธํ•œ data source๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด InitialContext ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  lookup() ๋ฉ”์†Œ๋“œ์— JNDI ์ด๋ฆ„ "java:comp/env/jdbc/knou" ๋ฅผ ๋„˜๊ฒจ ํ•ด๋‹นํ•˜๋Š” resource๋ฅผ ๋ฐ˜ํ™˜๋ฐ›๋Š”๋‹ค.

1
2
3
4
5
6
7
8
// ํ†ฐ์บฃ ์„œ๋ฒ„์—์„œ ์ž์›์„ ์ฐพ๊ธฐ ์œ„ํ•ด InitialContext ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ
InitialContext initialContext = new InitialContext();
// lookup() ๋ฉ”์†Œ๋“œ๋กœ JNDI ์ด๋ฆ„์œผ๋กœ ๋“ฑ๋ก๋ผ์žˆ๋Š” ์„œ๋ฒ„ ์ž์› ์ฐพ์Œ
// @name : ์„œ๋ฒ„ ์ž์›์˜ JNDI ์ด๋ฆ„
// ์ฐพ์œผ๋ ค๋Š” ์ž์›์ด JDBC DataSource์ด๋ฏ€๋กœ java:comp/env...
DataSource ds = (DataSource) initialContext.lookup(
        "java:comp/env/jdbc/knou"
);
cs

 

References

์—ดํ˜ˆ๊ฐ•์˜ ์ž๋ฐ” ์›น ๊ฐœ๋ฐœ ์›Œํฌ๋ถ(ํ”„๋ฆฌ๋ ‰, 2016, ์—„์ง„์˜)

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€