πΎ [CS] μ±κΈν€ ν¨ν΄.
1οΈβ£ μ±κΈν€ ν¨ν΄(Singleton pattern)
- μ±κΈν€ ν¨ν΄(singleton pattern)μ νλμ ν΄λμ€μ μ€μ§ νλμ μΈμ€ν΄μ€λ§ κ°μ§λ ν¨ν΄μ λλ€.
- νλμ ν΄λμ€λ₯Ό κΈ°λ°μΌλ‘ μ¬λ¬ κ°μ κ°λ³μ μΈ μΈμ€ν΄μ€λ₯Ό λ§λ€ μ μμ§λ§, κ·Έλ κ² νμ§ μκ³ νλμ ν΄λμ€λ₯Ό κΈ°λ°μΌλ‘ λ¨ νλμ μΈμ€ν΄μ€λ₯Ό λ§λ€μ΄ μ΄λ₯Ό κΈ°λ°μΌλ‘ λ‘μ§μ λ§λλλ° μ°μ
λλ€.
- λ³΄ν΅ λ°μ΄ν°λ² μ΄μ€ μ°κ²° λͺ¨λμ λ§μ΄ μ¬μ©ν©λλ€.
- νλμ μΈμ€ν΄μ€λ₯Ό λ§λ€μ΄ λκ³ ν΄λΉ μΈμ€ν΄μ€λ₯Ό λ€λ₯Έ λͺ¨λλ€μ΄ 곡μ νλ©° μ¬μ©νκΈ° λλ¬Έμ μΈμ€ν΄μ€λ₯Ό μμ±ν λ λλ λΉμ©μ΄ μ€μ΄λλ μ₯μ μ΄ μμ΅λλ€.
- νμ§λ§ μμ‘΄μ±μ΄ λμμ§λ€λ λ¨μ μ΄ μμ΅λλ€.
2οΈβ£ Javaμμμ μ±κΈν€ ν¨ν΄.
- Javaμμ Singleton ν¨ν΄μ ꡬννλ λ°©λ²μ μ¬λ¬ κ°μ§κ° μμ§λ§, κ°μ₯ μΌλ°μ μΌλ‘ μ¬μ©λλ λ°©λ² μ€ λͺ κ°μ§λ₯Ό μκ°νκ² μ΅λλ€.
- Eager Initialization(μ¦μ μ΄κΈ°ν)
- Lazy Initialization(μ§μ° μ΄κΈ°ν)
- Thread-safe Singleton(μ€λ λ μμ μ±κΈν€)
- Synchronized Method
- Double-checked Locking
- Bill Pugh Singleton(Holder λ°©μ)
1οΈβ£ Eager Initialization(μ¦μ μ΄κΈ°ν)
- κ°μ₯ κ°λ¨ν λ°©λ²μΌλ‘, ν΄λμ€κ° λ‘λλ λ μ¦μ Singleton μΈμ€ν΄μ€λ₯Ό μμ±ν©λλ€.
public class Singleton { // μ μΌν μΈμ€ν΄μ€ μμ± private static final Singleton instance = new Singleton(); // private μμ±μ: μΈλΆμμ μΈμ€ν΄μ€ μμ±μ λ°©μ§ private Singleton() {} // μΈμ€ν΄μ€λ₯Ό λ°ννλ λ©μλ public static Singleton getInstance() { return instance; } }
- μ΄ λ°©λ²μ κ°λ¨νκ³ μ§κ΄μ μ΄μ§λ§, ν΄λμ€κ° λ‘λλ λ λ°λ‘ μΈμ€ν΄μ€κ° μμ±λκΈ° λλ¬Έμ, μΈμ€ν΄μ€κ° μ¬μ©λμ§ μλλΌλ λ©λͺ¨λ¦¬λ₯Ό μ°¨μ§νκ² λ©λλ€.
2οΈβ£ Lazy Initialization(μ§μ° μ΄κΈ°ν)
- μΈμ€ν΄μ€κ° μ²μμΌλ‘ νμν λ μμ±λλλ‘ ν©λλ€.
- μ΄ λ°©λ²μ μ΄κΈ°νμ λλ λΉμ©μ΄ ν° κ²½μ° μ 리ν©λλ€.
```java
public class Singleton {
// μ μΌν μΈμ€ν΄μ€λ₯Ό μ μ₯ν λ³μ (μ΄κΈ°μλ null)
private static Singleton instance;
// private μμ±μ: μΈλΆμμ μΈμ€ν΄μ€ μμ±μ λ°©μ§
private Singleton() {}// μΈμ€ν΄μ€λ₯Ό λ°ννλ λ©μλ (νμν λλ§ μμ±)
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
``` - μ΄ λ°©λ²μ μ΄κΈ°νμ λλ λΉμ©μ΄ ν° κ²½μ° μ 리ν©λλ€.
- μ΄ λ°©λ²μ λ€μ€ μ€λ λ νκ²½μμ μμ νμ§ μκΈ° λλ¬Έμ, μΆκ°μ μΈ λκΈ°νκ° νμν©λλ€.
3οΈβ£ Thread-safe Singleton(μ€λ λ μμ μ±κΈν€)
- λ€μ€ μ€λ λ νκ²½μμ μμ νκ² Lazy Initializationμ ꡬννλ €λ©΄ λκΈ°νλ₯Ό μ¬μ©ν©λλ€.
1οΈβ£ Synchronized Method
public class Singleton {
private static Singleton instance;
private Singleton() {}
// synchronized ν€μλλ‘ μ€λ λ μμ νκ² λ§λ¦
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
- μ΄ λ°©λ²μ μμ νμ§λ§, μ±λ₯μ μ½κ°μ μν₯μ μ€ μ μμ΅λλ€.
-
'synchronized'
λ‘ μΈν΄ μ¬λ¬ μ€λ λκ° λμμ βgetInstance()
β λ₯Ό νΈμΆν λ λ³λͺ© νμμ΄ λ°μν μ μμ΅λλ€.
-
2οΈβ£ Double-checked Locking
- μ΄ λ°©λ²μ μ±λ₯κ³Ό μ€λ λ μμ μ±μ λͺ¨λ κ³ λ €ν μ΅μ νλ λ°©μμ
λλ€.
public class Singleton { private static volatile Singleton instance; private Singleton() {} public static Singleton getInstance() { if (instance == null) { synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; } }
- μ¬κΈ°μ
'volatile'
ν€μλλ μΈμ€ν΄μ€ λ³μκ° μ€λ λ κ°μ μ¬λ°λ₯΄κ² μ΄κΈ°νλλλ‘ λ³΄μ₯ν©λλ€.
4οΈβ£ Bill Pugh Singleton(Holder λ°©μ)
- μ΄ λ°©λ²μ Lazy Initializationμ μ¬μ©νλ©΄μλ, μ±λ₯κ³Ό μ€λ λ μμ μ±μ λͺ¨λ 보μ₯ν©λλ€.
public class Singleton { private Singleton() {} // SingletonHolderκ° ν΄λμ€ λ‘λ μμ μ μ΄κΈ°νλ¨ private static class SingletonHolder { private static final Singleton INSTANCE = new Singleton(); } public static Singleton getInstance() { return SingletonHolder.INSTANCE; } }
- μ΄ λ°©λ²μ λ΄λΆ μ μ ν΄λμ€κ° JVMμ μν΄ ν΄λμ€ λ‘λ μ μ΄κΈ°νλλ―λ‘, κ°μ₯ κΆμ₯λλ λ°©μ μ€ νλμ
λλ€.
- ν΄λμ€κ° λ‘λλ λ μ΄κΈ°νκ° μ΄λ£¨μ΄μ§λ―λ‘, λκΈ°νλ μΆκ°μ μΈ μ½λ μμ΄λ μ€λ λ μμ μ±μ 보μ₯ν μ μμ΅λλ€.
3οΈβ£ Spring Bootμ MySQL λ°μ΄ν°λ² μ΄μ€μ μ°κ²° κ·Έλ¦¬κ³ μ±κΈν΄ ν¨ν΄.
- Spring Bootμμ MySQL λ°μ΄ν°λ² μ΄μ€λ₯Ό μ°κ²°ν λ, λ΄λΆμ μΌλ‘ βμ±κΈν΄ ν¨ν΄β μ΄ μ¬μ©λ©λλ€.
- κ·Έλ¬λ μ΄ ν¨ν΄μ μ§μ ꡬνν νμλ μμ΅λλ€.
- βSpring Frameworkβ μμ²΄κ° μ±κΈν΄ ν¨ν΄μ νμ©νμ¬ λ°μ΄ν°λ² μ΄μ€ μ°κ²° λ° κ΄λ¦¬μ κ΄λ ¨λ βBean(κ°μ²΄)β μ κ΄λ¦¬ν©λλ€.
- κ·Έλ¬λ μ΄ ν¨ν΄μ μ§μ ꡬνν νμλ μμ΅λλ€.
1οΈβ£ Spring Bootμ μ±κΈν΄ ν¨ν΄.
- Spring Frameworkλ κΈ°λ³Έμ μΌλ‘ κ° Beanμ μ±κΈν΄ μ€μ½νλ‘ κ΄λ¦¬ν©λλ€.
- μ΄λ νΉμ ν΄λμ€μ μΈμ€ν΄μ€κ° μ ν리μΌμ΄μ 컨ν μ€νΈ λ΄μμ ν λ²λ§ μμ±λμ΄ μ ν리μΌμ΄μ μ λ°μμ 곡μ λ¨μ μλ―Έν©λλ€.
2οΈβ£ λ°μ΄ν°λ² μ΄μ€ μ°κ²°μμμ μ±κΈν΄ ν¨ν΄ μ¬μ©.
-
-
DataSource Bean.
- Spring Bootμμ MySQLκ³Ό κ°μ λ°μ΄ν°λ² μ΄μ€μ μ°κ²°ν λ
'DataSource'
λΌλ'Bean'
μ μμ±νμ¬ κ΄λ¦¬ν©λλ€. - μ΄
'DataSource'
κ°μ²΄λ λ°μ΄ν°λ² μ΄μ€ μ°κ²°μ κ΄λ¦¬νλ μν μ νλ©°, Springμ μ΄'Bean'
μ μ±κΈν΄μΌλ‘ μμ±νκ³ κ΄λ¦¬ν©λλ€.
- μ¦, Spring μ ν리μΌμ΄μ
λ΄μμλ
'DataSource'
κ°μ²΄κ° νλλ§ μμ±λμ΄ λͺ¨λ λ°μ΄ν°λ² μ΄μ€ μ°κ²° μμ²μμ μ¬μ¬μ©λ©λλ€.
- Spring Bootμμ MySQLκ³Ό κ°μ λ°μ΄ν°λ² μ΄μ€μ μ°κ²°ν λ
-
DataSource Bean.
-
-
EntityManagerFactory λ° SessionFactory.
- JPAλ Hibernateμ κ°μ ORMμ μ¬μ©νλ κ²½μ°,
'EntityManagerFactory'
λ'SessionFactory'
μ κ°μ κ°μ²΄λ μ±κΈν΄ ν¨ν΄μ μν΄ κ΄λ¦¬λ©λλ€.
- μ΄λ€ κ°μ²΄λ λ°μ΄ν°λ² μ΄μ€ μ°κ²°μ μ²λ¦¬νκ³ νΈλμμ μ κ΄λ¦¬νλ©°, μμ Springμ μν΄ μ±κΈν΄μΌλ‘ κ΄λ¦¬λ©λλ€.
- JPAλ Hibernateμ κ°μ ORMμ μ¬μ©νλ κ²½μ°,
-
EntityManagerFactory λ° SessionFactory.
-
-
Springμ μ±κΈν΄ κ΄λ¦¬.
- Springμ κ°λ°μκ°
'Bean'
μ μ§μ μ±κΈν΄μΌλ‘ κ΄λ¦¬ν νμκ° μλλ‘, μ ν리μΌμ΄μ μ 컨ν μ€νΈ λ΄μμ'Bean'
μ μ±κΈν΄μΌλ‘ κ΄λ¦¬ν©λλ€. - λ°μ΄ν°λ² μ΄μ€μμ μ°κ²° κ΄λ ¨ ν΄λμ€λ€μ΄ μ΄
'Bean'
λ€λ‘ ꡬμ±λλ©°, μ΄λ λ°μ΄ν°λ² μ΄μ€ μ°κ²°μ΄ ν¨μ¨μ μ΄κ³ μΌκ΄λκ² κ΄λ¦¬λλλ‘ λ³΄μ₯ν©λλ€.
- Springμ κ°λ°μκ°
-
Springμ μ±κΈν΄ κ΄λ¦¬.
3οΈβ£ μμ: Spring Bootμμ MySQL μ°κ²° μ€μ .
- Spring Bootμμ MySQL λ°μ΄ν°λ² μ΄μ€λ₯Ό μ°κ²°νκΈ° μν μΌλ°μ μΈ μ€μ μ
'application.properties'
νμΌμ΄λ'application.yml'
νμΌμ λ°μ΄ν°λ² μ΄μ€ μ°κ²° μ 보λ₯Ό μΆκ°νλ κ²μ λλ€.
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
- μ΄ μ€μ μ Spring Bootκ°
'DataSource'
'Bean'
μ μλμΌλ‘ μμ±νλλ‘ νλ©°, μ΄'Bean'
μ μ ν리μΌμ΄μ λ΄μμ μ±κΈν΄μΌλ‘ κ΄λ¦¬λ©λλ€.
4οΈβ£ βοΈ μμ½
- Spring Bootμμ MySQLκ³Ό κ°μ λ°μ΄ν°λ² μ΄μ€λ₯Ό μ°κ²°ν λ, Springμ λ΄λΆμ μΌλ‘ μ±κΈν΄ ν¨ν΄μ μ¬μ©νμ¬ λ°μ΄ν°λ² μ΄μ€ μ°κ²°μ κ΄λ¦¬ν©λλ€.
-
'DataSource'
,'EntityManagerFactory'
λ±μ κ°μ²΄κ° μ±κΈν΄μΌλ‘ κ΄λ¦¬λλ©°, μ΄λ₯Ό ν΅ν΄ μ ν리μΌμ΄μ μ λ°μ κ±Έμ³ μΌκ΄λκ³ ν¨μ¨μ μΈ λ°μ΄ν°λ² μ΄μ€ μ°κ²° κ΄λ¦¬κ° μ΄λ£¨μ΄μ§λλ€.- Spring μμ²΄κ° μ΄ ν¨ν΄μ μ²λ¦¬νλ―λ‘, κ°λ°μλ λ³λλ‘ μ±κΈν΄ ν¨ν΄μ ꡬνν νμκ° μμ΅λλ€.
-
4οΈβ£ Java Servlet 컨ν μ΄λμ MySQL λ°μ΄ν°λ² μ΄μ€ μ°κ²° κ·Έλ¦¬κ³ μ±κΈν΄ ν¨ν΄.
- Java Servlet 컨ν
μ΄λμμ MySQL λ°μ΄ν°λ² μ΄μ€λ₯Ό μ°κ²°ν λ, μ±κΈν΄ ν¨ν΄μ΄ μΌλ°μ μΌλ‘ μ¬μ©λ©λλ€.
- λ€λ§, μ΄ ν¨ν΄μ μ ν리μΌμ΄μ μ½λμμ μ§μ ꡬνλλ κ²μ΄ μλλΌ, μλΈλ¦Ώ 컨ν μ΄λλ λ°μ΄ν°λ² μ΄μ€ μ°κ²° κ΄λ¦¬ λΌμ΄λΈλ¬λ¦¬μμ μ¬μ©λ©λλ€.
1οΈβ£ JDBC DataSource
- μλΈλ¦Ώ 컨ν
μ΄λ(μ: Tomcat, Jetty)μμ λ°μ΄ν°λ² μ΄μ€ μ°κ²°μ μ€μ ν λ 보ν΅
'DataSource'
λ₯Ό μ¬μ©ν©λλ€.- μ΄
'DataSource'
κ°μ²΄λ λ³΄ν΅ μ±κΈν΄μΌλ‘ κ΄λ¦¬λλ©°, λ°μ΄ν°λ² μ΄μ€ μ°κ²° νμ μ 곡ν©λλ€.
- μ΄
-
Connection Pooling
- μλΈλ¦Ώ 컨ν
μ΄λλ λ°μ΄ν°λ² μ΄μ€ μ°κ²°μ κ΄λ¦¬νκΈ° μν΄ μ°κ²° νλ§(Connection pooling)μ μ¬μ©ν©λλ€.
- μ°κ²° νμ μ¬λ¬ λ°μ΄ν°λ² μ΄μ€ μ°κ²°μ 미리 μμ±νκ³ μ¬μ¬μ©νλλ‘ κ΄λ¦¬ν©λλ€.
- μ°κ²° νμ κ΄λ¦¬νλ κ°μ±λ
'DataSource'
μ΄κ³ , μ΄λ μ ν리μΌμ΄μ λ΄μμ μ±κΈν΄μΌλ‘ κ΄λ¦¬λμ΄, μ¬λ¬ μλΈλ¦Ώμμ λμΌν'DataSource'
κ°μ²΄λ₯Ό μ¬μ©νμ¬ ν¨μ¨μ μΌλ‘ λ°μ΄ν°λ² μ΄μ€μ μ°κ²°ν μ μμ΅λλ€.
- μλΈλ¦Ώ 컨ν
μ΄λλ λ°μ΄ν°λ² μ΄μ€ μ°κ²°μ κ΄λ¦¬νκΈ° μν΄ μ°κ²° νλ§(Connection pooling)μ μ¬μ©ν©λλ€.
2οΈβ£ μ±κΈν΄ ν¨ν΄μ νμ©.
-
DataSource κ°μ²΄
- μλΈλ¦Ώ 컨ν
μ΄λλ 보ν΅
'DataSource'
κ°μ²΄λ₯Ό μ±κΈν΄μΌλ‘ κ΄λ¦¬ν©λλ€.-
'DataSource'
λ λ°μ΄ν°λ² μ΄μ€ μ°κ²° νμ κ΄λ¦¬νλ©°, μ΄ κ°μ²΄κ° ν λ²λ§ μμ±λμ΄ μ ν리μΌμ΄μ μ λ°μ κ±Έμ³ μ¬μ¬μ©λ©λλ€.
-
- μλΈλ¦Ώ 컨ν
μ΄λλ 보ν΅
-
Connection κ°μ²΄
- κ° μμ²λ§λ€ λ°μ΄ν°λ² μ΄μ€ μ°κ²°μ΄ νμν λλ§λ€ μλ‘μ΄
'Connection'
κ°μ²΄κ° μμ±λκ±°λ νμμ κ°μ Έμ€κ² λ©λλ€.- νμ§λ§
'DataSource'
μ체λ μ±κΈν΄μΌλ‘ κ΄λ¦¬λκΈ° λλ¬Έμ, λμΌν'DataSource'
κ°μ²΄λ₯Ό ν΅ν΄ μ°κ²°μ΄ μ΄λ£¨μ΄μ§λλ€.
- νμ§λ§
- κ° μμ²λ§λ€ λ°μ΄ν°λ² μ΄μ€ μ°κ²°μ΄ νμν λλ§λ€ μλ‘μ΄
3οΈβ£ μμ: Tomcatμμ DataSource μ€μ
- Tomcatκ³Ό κ°μ μλΈλ¦Ώ 컨ν
μ΄λμμ MySQL λ°μ΄ν°λ² μ΄μ€μμ μ°κ²°μ μ€μ νλ μΌλ°μ μΈ λ°©λ²μ
'context.xml'
νμΌμμ'DataSource'
λ₯Ό μ μνλ κ²μ λλ€.
<Context>
<Resource name="jdbc/MyDB"
auth="Container"
type="javax.sql.DataSource"
maxTotal="100"
maxIdel="30"
maxWaitMillis="10000"
username="root"
password="password"
driverClassName="com.myslq.cj.jdbc.Driver"
url="jdbc:mysql://localhost:3306/mydb"/>
</Context>
- μ΄ μ€μ μ
'jdbc/MyDB'
λΌλ JNDI 리μμ€λ₯Ό μ μνκ³ ,'DataSource'
κ°μ²΄λ₯Ό μμ±νμ¬ μ°κ²° νλ§μ κ΄λ¦¬ν©λλ€.- μ΄
'DataSource'
λ Tomcat λ΄μμ μ±κΈν€μΌλ‘ κ΄λ¦¬λ©λλ€.
- μ΄
4οΈβ£ μ±κΈν΄ ν¨ν΄μ μ΄μ .
-
ν¨μ¨μ±.
- μ¬λ¬ μλΈλ¦Ώμ΄ λμΌν
'DataSource'
κ°μ²΄λ₯Ό 곡μ ν¨μΌλ‘μ¨ λ©λͺ¨λ¦¬μ μμμ μ μ½ν μ μμ΅λλ€.
- μ¬λ¬ μλΈλ¦Ώμ΄ λμΌν
-
κ΄λ¦¬μ μ©μ΄μ±.
- λ°μ΄ν°λ² μ΄μ€ μ°κ²° κ΄λ¦¬λ₯Ό μ€μνν μ μμΌλ©°, μ½λμμ μ§μ κ΄λ¦¬ν νμ μμ΄ μλΈλ¦Ώ 컨ν μ΄λκ° μ΄λ₯Ό λ΄λΉν©λλ€.
5οΈβ£ βοΈ μμ½
- Java Servlet 컨ν
μ΄λμμ MySQL λ°μ΄ν°λ² μ΄μ€λ₯Ό μ°κ²°ν λ, μ±κΈν΄ ν¨ν΄μ μ£Όλ‘
DataSource
κ°μ²΄μ μ μ©λ©λλ€.- μ΄
DataSource
κ°μ²΄λ μλΈλ¦Ώ 컨ν μ΄λμ μν΄ μ±κΈν΄μΌλ‘ κ΄λ¦¬λλ©°, λ°μ΄ν°λ² μ΄μ€ μ°κ²° νμ ν΅ν΄ ν¨μ¨μ μΌλ‘ λ°μ΄ν°λ² μ΄μ€ μ°κ²°μ μ²λ¦¬ν©λλ€.- μ΄λ₯Ό ν΅ν΄ μ ν리μΌμ΄μ μ λ°μ κ±Έμ³ μΌκ΄λκ³ μ±λ₯μ΄ μ΅μ νλ λ°μ΄ν°λ² μ΄μ€ μ°κ²° κ΄λ¦¬κ° μ΄λ£¨μ΄μ§λλ€.
- μ΄
3οΈβ£ Java μ ν리μΌμ΄μ μλ²μ MySQL λ°μ΄ν°λ² μ΄μ€μ μ°κ²° κ·Έλ¦¬κ³ μ±κΈν΄ ν¨ν΄.
- Java μ ν리μΌμ΄μ
μλ²μμ MySQL λ°μ΄ν°λ² μ΄μ€λ₯Ό μ°κ²°ν λ, μ±κΈν΄ ν¨ν΄μ μ°μν μν μ ν©λλ€.
- κ·Έλ¬λ μ΄ ν¨λ‘μ μ ν리μΌμ΄μ μ½λμμ μ§μ ꡬνλμ§ μμΌλ©°, μ ν리μΌμ΄μ μλ²λ λ°μ΄ν°λ² μ΄μ€ μ°κ²° κ΄λ¦¬ λΌμ΄λΈλ¬λ¦¬μμ μ¬μ©λ©λλ€.
1οΈβ£ DataSourceμ Connection Pooling
- Java μ ν리κ²μ΄μ
μλ²(μ: JBoss/WildFly, GlassFish, WebSphere)μμ λ°μ΄ν°λ² μ΄μ€λ₯Ό μ°κ²°ν λ μΌλ°μ μΌλ‘
'JDBC DataSource'
μ'Connection Pooling'
μ μ¬μ©ν©λλ€.- μ΄λ DataSource κ°μ²΄λ μ±κΈν΄μΌλ‘ κ΄λ¦¬λλ©°, λ°μ΄ν°λ² μ΄μ€ μ°κ²°μ ν¨μ¨μ±μ λμ΄κΈ° μν΄ μ°κ²° νμ μ¬μ©ν©λλ€.
-
DataSource μ±κΈν΄ κ΄λ¦¬
- μ ν리μΌμ΄μ
μλ²λ λ°μ΄ν°λ² μ΄μ€μμ μ°κ²°μ κ΄λ¦¬νκΈ° μν΄ DataSourceλ₯Ό μμ±ν©λλ€.
- μ΄ DataSource κ°μ²΄λ μλ²μμ μ±κΈν΄μΌλ‘ κ΄λ¦¬λ©λλ€.
- μ¦, μ ν리μΌμ΄μ μ λ°μ κ±Έμ³ λμΌν DataSource κ°μ²΄κ° μ¬μ©λ©λλ€.
- μ΄ DataSource κ°μ²΄λ μλ²μμ μ±κΈν΄μΌλ‘ κ΄λ¦¬λ©λλ€.
- DataSourceλ λ΄λΆμ μΌλ‘ λ°μ΄ν°λ² μ΄μ€ μ°κ²° νμ κ΄λ¦¬νλ©°, μ¬λ¬ ν΄λΌμ΄μΈνΈ μμ²μμ λμΌν λ°μ΄ν°λ² μ΄μ€ μ°κ²° κ°μ²΄λ₯Ό μ¬μ¬μ©ν©λλ€.
- μ ν리μΌμ΄μ
μλ²λ λ°μ΄ν°λ² μ΄μ€μμ μ°κ²°μ κ΄λ¦¬νκΈ° μν΄ DataSourceλ₯Ό μμ±ν©λλ€.
-
Connection κ°μ²΄ κ΄λ¦¬
- λ°μ΄ν°λ² μ΄μ€μμ μ€μ μ°κ²°μ κ΄λ¦¬νλ Connection κ°μ²΄λ λ§€λ² μλ‘μ΄ μμ²μ΄ μμ λλ§λ€ DataSourceμμ κ°μ Έμ€μ§λ§, DataSourceλ μ±κΈν΄μΌλ‘ κ΄λ¦¬λλ―λ‘ μ 체 μ ν리μΌμ΄μ μμ μΌκ΄λ μ°κ²° νμ΄ μ¬μ©λ©λλ€.
2οΈβ£ Java EE νκ²½μμμ DataSource κ΄λ¦¬
- Java EE μ ν리μΌμ΄μ
μλ²μμλ
'JNDI(Java Naming and Directory Interface)'
λ₯Ό ν΅ν΄ DataSourceλ₯Ό κ΄λ¦¬ν©λλ€.- μ΄λ μλ²μ μ μ μ€μ μμ κ΄λ¦¬λλ©°, μ¬λ¬ μ ν리μΌμ΄μ μ΄ λμΌν λ°μ΄ν°λ² μ΄μ€ μ°κ²°μ 곡μ ν μ μλλ‘ ν©λλ€.
-
JNDIλ₯Ό ν΅ν DataSource μ€μ μμ
```xml
- μ΄ μ€μ μ μ ν리μΌμ΄μ
μλ²κ° μ±κΈν΄ DataSource κ°μ²΄λ₯Ό μμ±νκ³ κ΄λ¦¬νλλ‘ ν©λλ€.
### 3οΈβ£ μ±κΈν΄ ν¨ν΄μ μν .
- **ν¨μ¨μ±**
- μ±κΈν΄μΌλ‘ κ΄λ¦¬λλ DataSourceλ μ ν리μΌμ΄μ
μλ² μ 체μμ νλμ κ°μ²΄λ‘ μ μ§λλ©°, μ΄λ₯Ό ν΅ν΄ λ©λͺ¨λ¦¬μ μμ μ¬μ©μ΄ μ΅μ νλ©λλ€.
- **μΌκ΄μ±**
- λμΌν λ°μ΄ν°λ² μ΄μ€ μ°κ²° νμ μ¬μ©νκΈ° λλ¬Έμ μ ν리μΌμ΄μ
μ λ°©μ κ±Έμ³ λ°μ΄ν°λ² μ΄μ€ μ°κ²°μ΄ μΌκ΄λκ² κ΄λ¦¬λ©λλ€.
- **κ΄λ¦¬ μ©μ΄μ±**
- λ°μ΄ν°λ² μ΄μ€ μ°κ²° κ΄λ¦¬κ° μ€μνλμ΄, κ° μ ν리κ²μ΄μ
μμ λ°λ‘ κ΄λ¦¬ν νμ μμ΄ μλ²μμ ν΅ν© κ΄λ¦¬λ©λλ€.
### 4οΈβ£ EJBμμ ν΅ν©.
- JavaEE νκ²½μμ EJB(Enterprise JavaBeans)λ μ£Όλ‘ μ ν리μΌμ΄μ
μλ²μμ κ΄λ¦¬λλ λΉμ¦λμ€ λ‘μ§μ ꡬννλ λ° μ¬μ©λ©λλ€.
- EJBμμ λ°μ΄ν°λ² μ΄μ€ μ°κ²°μ μ¬μ©ν λλ μ±κΈν΄ ν¨ν΄μ΄ μ μ©λ DataSourceλ₯Ό ν΅ν΄ μ°κ²°μ΄ μ΄λ£¨μ΄μ§λλ€.
```java
@Stateless
public class MyService {
@Resource(lookup = "java:/jdbc/MyDB")
private DataSource dataSource;
public void doSomething() {
try (Connection connection = dataSource.getConnection()) {
// λ°μ΄ν°λ² μ΄μ€ μμ
μν
} catch (SQLException e) {
e.printStackTrace();
}
}
}
- μ΄ μ½λμμ
'dataSource'
λ μλ²μ μν΄ κ΄λ¦¬λλ μ±κΈν΄ DataSource κ°μ²΄λ₯Ό μ°Έμ‘°νλ©°, μ΄λ₯Ό ν΅ν΄ λ°μ΄ν°λ² μ΄μ€ μ°κ²°μ μ²λ¦¬ν©λλ€.
5οΈβ£ βοΈ μμ½,
- Java μ ν리μΌμ΄μ
μλ²μμ MySQL λ°μ΄ν°λ² μ΄μ€λ₯Ό μ°κ²°ν λ, μ±κΈν΄ ν¨ν΄μ DataSourceμ κ°μ μ€μν κ°μ²΄ κ΄λ¦¬μ μ¬μ©λ©λλ€.
- μ΄ ν¨ν΄μ ν΅ν΄ μ ν리μΌμ΄μ
μλ²λ λ°μ΄ν°λ² μ΄μ€ μ°κ²°μ ν¨μ¨μ μ΄κ³ μΌκ΄λκ² κ΄λ¦¬ν μ μμΌλ©°, μ°κ²° νλ§μ ν΅ν΄ μμ μ¬μ©μ μ΅μ νν©λλ€.
- μ ν리μΌμ΄μ μλ²κ° DataSourceλ₯Ό μ±κΈν΄μΌλ‘ κ΄λ¦¬ν¨μΌλ‘μ¨, μλ² μ λ°μ μΌκ΄λ λ°μ΄ν°λ² μ΄μ€ μ°κ²°μ μ 곡νκ³ ν¨μ¨μ±μ κ·Ήλνν μ μμ΅λλ€.
- μ΄ ν¨ν΄μ ν΅ν΄ μ ν리μΌμ΄μ
μλ²λ λ°μ΄ν°λ² μ΄μ€ μ°κ²°μ ν¨μ¨μ μ΄κ³ μΌκ΄λκ² κ΄λ¦¬ν μ μμΌλ©°, μ°κ²° νλ§μ ν΅ν΄ μμ μ¬μ©μ μ΅μ νν©λλ€.