[Java] JNDI์ DBCP
๐ ๋ค์ด๊ฐ๋ฉฐ
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ์ ๋งค๋ฒ ์๋ก ๋ง๋๋ ๊ฒ์ ๋น์ฉ์ด ํฐ ์์ ์ด๋ค. ๋ ์ ์ ์ ๋ณด๋ฅผ ์ฝ๋์ ํ๋์ฝ๋ฉํ๋ฉด ํ๊ฒฝ์ด ๋ฐ๋ ๋๋ง๋ค ์์ ํด์ผ ํ๋ค. ์ด ๋ ๋ฌธ์ ๋ฅผ ๊ฐ๊ฐ DBCP(์ฐ๊ฒฐ ์ฌ์ฌ์ฉ)์ JNDI(์ค์ ์ธ๋ถํ)๊ฐ ํด๊ฒฐํ๋ค. ๋ ๊ธฐ์ ์ ํจ๊ป ์ฐ๋ฉด ํจ์จ๊ณผ ์ ์ง๋ณด์์ฑ์ ๋์์ ์ก์ ์ ์๋ค.
| ๊ธฐ์ | ํด๊ฒฐํ๋ ๋ฌธ์ |
|---|---|
| JNDI | ์ ์ ์ ๋ณด๋ฅผ ์ฝ๋ ๋ฐ(์ค์)์์ ๊ด๋ฆฌ |
| DBCP | ์ฐ๊ฒฐ์ ๋ฏธ๋ฆฌ ๋ง๋ค์ด ํ์ ๋๊ณ ์ฌ์ฌ์ฉ |
1. JNDI (Java Naming and Directory Interface)
JNDI๋ ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ค์ด๋ฐ/๋๋ ํฐ๋ฆฌ ์๋น์ค์ ์ ๊ทผํ๋ API๋ค. ์ฃผ๋ก ๋ถ์ฐ ํ๊ฒฝ์์ ๊ฐ์ฒด๋ฅผ ์ฐพ๊ณ , DB ์ฐ๊ฒฐ ์ ๋ณด ๊ฐ์ ํ๊ฒฝ ์ค์ ์ ์ค์์์ ๊ด๋ฆฌํ๋ค.
์ฌ์ฉ ์ด์ :
- ์ค์ํ๋ ํ๊ฒฝ ์ค์ : ์ ์ ์ ๋ณด๋ฅผ ์ฝ๋์ ํ๋์ฝ๋ฉํ์ง ์๊ณ ์ค์์์ ๊ด๋ฆฌ
- ์ฝ๋ ์์ ์์ด ๋ณ๊ฒฝ: ์ค์ ์ด ๋ฐ๋์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๋ ๊ทธ๋๋ก
1
2
3
4
5
6
7
8
9
10
// JNDI๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ๊ฐ์ ธ์ค๊ธฐ
Context initialContext = new InitialContext();
DataSource dataSource =
(DataSource) initialContext.lookup("java:comp/env/jdbc/myDataSource");
try (Connection connection = dataSource.getConnection()) {
// ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์
์ํ
} catch (SQLException e) {
e.printStackTrace();
}
"java:comp/env/jdbc/myDataSource"๋ JNDI ๋ค์ด๋ฐ ๊ท์น์ ๋ฐ๋ฅธ ์ด๋ฆ์ด๋ค. ์ด ์ด๋ฆ์ผ๋ก ๋ฑ๋ก๋ ๋ฐ์ดํฐ ์์ค๋ฅผ ์ฐพ์ ๋ฐํํ๋ค.
2. DBCP (Database Connection Pooling)
DBCP๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ์ ๋ฏธ๋ฆฌ ์์ฑํด ํ(pool)์ ์ ์ฅํ๋ค๊ฐ, ํ์ํ ๋ ๊บผ๋ด ์ฐ๊ณ ๋ค์ ๋ฐ๋ฉํ๋ ๊ธฐ์ ์ด๋ค.
1
2
3
4
5
6
[DBCP ์์ด] ์์ฒญ๋ง๋ค ์ฐ๊ฒฐ ์์ฑ โ ์ฌ์ฉ โ ์ข
๋ฃ (๋งค๋ฒ ๋น์ผ ๋น์ฉ)
[DBCP] ํ์์ ์ฐ๊ฒฐ ๋์ฌ โ ์ฌ์ฉ โ ๋ฐ๋ฉ (์ฌ์ฌ์ฉ)
โโโโโโโโโโ Connection Pool โโโโโโโโโโ
โ [conn] [conn] [conn] [conn] ... โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
์ฌ์ฉ ์ด์ :
| ์ด์ | ์ค๋ช |
|---|---|
| ์ฑ๋ฅ ํฅ์ | ์ฐ๊ฒฐ ์์ฑ์ ๋น์ฉ์ด ํฐ ์์ โ ๋ฏธ๋ฆฌ ๋ง๋ ์ฐ๊ฒฐ ์ฌํ์ฉ |
| ์ปค๋ฅ์ ๋์ ๋ฐฉ์ง | ๋ฐํ๋์ง ์์ ์ฐ๊ฒฐ์ ๊ด๋ฆฌํ๋ ๋ฉ์ปค๋์ฆ ์ ๊ณต |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// DBCP ์ค์ (Apache Commons DBCP)
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/mydatabase");
dataSource.setUsername("username");
dataSource.setPassword("password");
dataSource.setInitialSize(5); // ์ด๊ธฐ ์ฐ๊ฒฐ ์
dataSource.setMaxTotal(10); // ์ต๋ ์ฐ๊ฒฐ ์
try (Connection connection = dataSource.getConnection()) {
// ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์
์ํ
} catch (SQLException e) {
e.printStackTrace();
}
BasicDataSource๋ Apache Commons DBCP๊ฐ ์ ๊ณตํ๋ ํด๋์ค๋ก, ์ฐ๊ฒฐ ํ์ ์ค์ ยท๊ด๋ฆฌํ๋ค.
3. JNDI + DBCP ํจ๊ป ์ฐ๊ธฐ
JNDI๋ก ์ฐ๊ฒฐ ์ ๋ณด๋ฅผ ์ค์ ๊ด๋ฆฌํ๊ณ , ๊ทธ ๋ค์์ DBCP๊ฐ ์ฐ๊ฒฐ ํ์ ๊ด๋ฆฌํ๋๋ก ๊ฒฐํฉํ๋ค.
1
2
3
4
5
6
7
8
9
10
// JNDI๋ก๋ถํฐ (DBCP๋ก ๊ด๋ฆฌ๋๋) DataSource ์กฐํ
Context initialContext = new InitialContext();
DataSource dataSource =
(DataSource) initialContext.lookup("java:comp/env/jdbc/myDataSource");
try (Connection connection = dataSource.getConnection()) {
// ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์
์ํ
} catch (SQLException e) {
e.printStackTrace();
}
์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๋ ์ด๋ฆ์ผ๋ก lookup๋ง ํ๋ฉด ๋๊ณ , ๊ทธ ๋ค์ ํ ๊ด๋ฆฌ์ ์ค์ ์ ์ปจํ ์ด๋/DBCP๊ฐ ๋ด๋นํ๋ค.
๐ ์ฑ๋ฅ ์ต์ ํ ํ
| ์ค์ | ์ต์ | ํจ๊ณผ |
|---|---|---|
| ํ ํฌ๊ธฐ ์กฐ์ | setInitialSize, setMaxTotal | ์ด๊ธฐ/์ต๋ ์ฐ๊ฒฐ ์๋ฅผ ์์์ ๋ง๊ฒ ์กฐ์ |
| ์ ํด ์ฐ๊ฒฐ ๊ฒ์ฌ | setTestWhileIdle, setTimeBetweenEvictionRunsMillis | ์ฌ์ฉ ์ ํ๋ ์ฐ๊ฒฐ์ ์ฃผ๊ธฐ์ ์ผ๋ก ์ ๋ฆฌ |
๐ ์ ๋ฆฌ
1
2
3
4
JNDI + DBCP
โโ JNDI ์ด๋ฆ์ผ๋ก ๋ฆฌ์์ค ์ ๊ทผ, ์ ์ ์ ๋ณด ์ค์ ๊ด๋ฆฌ
โโ DBCP ์ฐ๊ฒฐ ํ์์ ๋์ฌยท๋ฐ๋ฉ โ ์ฌ์ฌ์ฉ์ผ๋ก ์ฑ๋ฅโ, ๋์ ๋ฐฉ์ง
โโ ๊ฒฐํฉ lookup์ผ๋ก ์กฐํ + ๋ค์์ ํ ๊ด๋ฆฌ (์ค์ ์ธ๋ถํ + ์ฑ๋ฅ)
| ๊ฐ๋ | ํ ์ค ์ ์ |
|---|---|
| JNDI | ์ด๋ฆ์ผ๋ก ๋ฆฌ์์ค์ ์ ๊ทผํ๋ API (์ค์ ์ธ๋ถํ) |
| DBCP | ์ฐ๊ฒฐ์ ํ์ ๋๊ณ ์ฌ์ฌ์ฉํ๋ ๊ธฐ์ |
| BasicDataSource | Commons DBCP์ ์ฐ๊ฒฐ ํ ๊ตฌํ์ฒด |
JNDI๋ โ์ค์ ์ ์ฝ๋ ๋ฐ์ผ๋กโ, DBCP๋ โ์ฐ๊ฒฐ์ ์ฌ์ฌ์ฉ์ผ๋กโ. ์ด ๋์ ๊ฒฐํฉํ๋ฉด ์ ์ง๋ณด์์ฑ๊ณผ ์ฑ๋ฅ์ ํจ๊ป ํ๋ณดํ๋, ์ค๋ฌด์ ํ์ค์ ์ธ DB ์ฐ๊ฒฐ ๊ด๋ฆฌ ๋ฐฉ์์ด ์์ฑ๋๋ค.
Comments powered by Disqus.