[Java] JNDI ์ค์ (server.xml)
๐ ๋ค์ด๊ฐ๋ฉฐ
DB ์ ์ ์ ๋ณด(URL, ๊ณ์ , ๋น๋ฐ๋ฒํธ)๋ฅผ ์์ค ์ฝ๋์ ํ๋์ฝ๋ฉํ๋ฉด, ๊ฐ๋ฐยท์ด์ ํ๊ฒฝ์ด ๋ฐ๋ ๋๋ง๋ค ์ฝ๋๋ฅผ ๊ณ ์ณ์ผ ํ๋ค. ์ด๋ฐ ํ๊ฒฝ๋ณ๋ก ๋ฌ๋ผ์ง๋ ๋ฆฌ์์ค๋ฅผ ์ฝ๋ ๋ฐ์์ ๊ด๋ฆฌํ๋๋ก ๋์์ฃผ๋ ๊ฒ์ด JNDI๋ค.
JNDI(Java Naming and Directory Interface)๋? ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ค์ด๋ฐยท๋๋ ํฐ๋ฆฌ ์๋น์ค์ ์ ๊ทผํ๊ธฐ ์ํ API. ์ด๋ฆ(name)์ ๊ฐ์ฒด(object)๋ฅผ ๋งคํํด๋๊ณ , ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ทธ ์ด๋ฆ๋ง์ผ๋ก ๋ฆฌ์์ค์ ์ ๊ทผํ๋ค.
JNDI๋ ์ฃผ๋ก ๋ค์์ ์ฌ์ฉ๋๋ค.
| ์ฉ๋ | ์ |
|---|---|
| ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ์ ๋ณด | DataSource |
| ๋ฉ์ผ ์๋ฒ ์ฐ๊ฒฐ ์ ๋ณด | Mail Session |
| ๋ฆฌ์์ค ์ค์ ์ ๋ณด | ํ์ผ ๊ฒฝ๋ก, ๋๋ ํฐ๋ฆฌ ๋ฑ |
1
2
์ ํ๋ฆฌ์ผ์ด์
โโ"jdbc/myDataSource" ์ด๋ฆ์ผ๋ก lookupโโโบ JNDI โโโบ ์ค์ DataSource
(์ด๋ฆ โ ๊ฐ์ฒด ๋งคํ)
1. ์๋ฒ ํ๊ฒฝ ์ค์ (server.xml)
JNDI๋ฅผ ์ฐ๋ ค๋ฉด ๋จผ์ ์๋ฒ์์ ๋ฆฌ์์ค๋ฅผ ๋ฑ๋กํด์ผ ํ๋ค. ํฐ์บฃ(Tomcat)์ ๊ฒฝ์ฐ server.xml(๋๋ context.xml)์์ ์ค์ ํ๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<Context>
<!-- JNDI ์ค์ -->
<Resource name="jdbc/myDataSource"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/mydb"
username="user"
password="password"
maxTotal="100"
maxIdle="30"
validationQuery="SELECT 1"
maxWaitMillis="10000"/>
</Context>
โ ๏ธ ์ค๋ฌด์์ ์ฝ์งํ ํฌ์ธํธ:
validationQuery๋ฅผ ์์ฑํ๋ค๋ฉด ๋ฐ๋์ ๊ทธ DB์ ๋ง๋ ์ฟผ๋ฆฌ๋ฅผ ์จ์ผ ํ๋ค. ์๋ฅผ ๋ค์ด Oracle์ด๋ผ๋ฉดSELECT 1์ด ์๋๋ผSELECT 1 FROM DUAL์ ์จ์ผ ํ๋ค. ์ด๊ฑธ ๋นผ๋จน์ด์ ํ์ฌ์์ ํ์ฐธ ํค๋งธ๋ค.
2. ์ ํ๋ฆฌ์ผ์ด์ ์์ JNDI ์ฌ์ฉ
๋ฑ๋ก๋ JNDI ๋ฆฌ์์ค๋ InitialContext๋ก ์กฐํ(lookup)ํ๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import java.sql.Connection;
public class JndiExample {
public static void main(String[] args) {
try {
Context context = new InitialContext();
// ์ด๋ฆ์ผ๋ก DataSource๋ฅผ ์กฐํ
DataSource dataSource =
(DataSource) context.lookup("java:comp/env/jdbc/myDataSource");
Connection connection = dataSource.getConnection();
// Connection์ผ๋ก DB ์์
์ํ
connection.close(); // ์์
์๋ฃ ํ ์ฐ๊ฒฐ ๋ซ๊ธฐ
} catch (Exception e) {
e.printStackTrace();
}
}
}
context.lookup("java:comp/env/jdbc/myDataSource") โ server.xml์ ๋ฑ๋กํ ์ด๋ฆ์ผ๋ก ์ค์ DataSource๋ฅผ ๋ฐ์์จ๋ค. ์ฝ๋์๋ ์ ์ ์ ๋ณด๊ฐ ์ ํ ๋
ธ์ถ๋์ง ์๋๋ค.
3. JNDI ์ค์ ์ ์ฅ์
| ์ฅ์ | ์ค๋ช |
|---|---|
| ์ ์ง๋ณด์์ฑ | ์ ์ ์ ๋ณด๋ฅผ ์ฝ๋์ ๋ถ๋ฆฌํด ์ธ๋ถ์์ ๊ด๋ฆฌ |
| ์ ์ฐ์ฑยทํ์ฅ์ฑ | ๋ฆฌ์์ค๋ฅผ ์ค์์์ ์ง์ค ๊ด๋ฆฌ |
| ์์ ๊ณต์ | ์๋ก ๋ค๋ฅธ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ ์์ ๊ณต์ ๊ฐ๋ฅ |
๐ ์ ๋ฆฌ
1
2
3
4
5
JNDI
โโ ๊ฐ๋
์ด๋ฆ(name) โ ๊ฐ์ฒด(object) ๋งคํ, ์ด๋ฆ์ผ๋ก ๋ฆฌ์์ค ์ ๊ทผ
โโ ์๋ฒ ์ค์ server.xml <Resource ...> ๋ก DataSource ๋ฑ๋ก
โโ ์ฑ ์ฌ์ฉ InitialContext.lookup("java:comp/env/...")
โโ ์ฅ์ ์ ์ ์ ๋ณด ๋ถ๋ฆฌ โ ์ ์ง๋ณด์์ฑยท์ ์ฐ์ฑยท์์ ๊ณต์
| ๊ฐ๋ | ํ ์ค ์ ์ |
|---|---|
| JNDI | ์ด๋ฆ์ผ๋ก ๋ฆฌ์์ค์ ์ ๊ทผํ๋ ์๋ฐ API |
| Resource(server.xml) | ์ปจํ ์ด๋๊ฐ ๊ด๋ฆฌํ๋ ๋ฆฌ์์ค ๋ฑ๋ก |
| validationQuery | ์ปค๋ฅ์ ์ ํจ์ฑ ๊ฒ์ฌ ์ฟผ๋ฆฌ (DB๋ณ๋ก ๋ค๋ฆ!) |
JNDI๋ โ์ ์ ์ ๋ณด๋ฅผ ์ฝ๋๊ฐ ์๋๋ผ ์๋ฒ๊ฐ ๊ด๋ฆฌํ๋คโ๋ ๋ฐ์์ด๋ค. ํนํ validationQuery๋ DB ์ข
๋ฅ์ ๋ง๊ฒ ์์ฑํด์ผ ํ๋ค๋ ์ ์ ๊ธฐ์ตํ์ โ ์ฌ์ํด ๋ณด์ด์ง๋ง ์ค๋ฌด์์ ๋ฐ๋ชฉ์ ์ก๋๋ค.
Comments powered by Disqus.