[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.