
λ€ κ°μ μμ
νν μμ
HTTP μμ²μ νμλ‘ νλ νμμΌλ‘ λ³νν΄μ μμ© μμμ μ λ¬νκ³ λ€μ μλ΅μ HTTP μλ΅μΌλ‘ λ³ννμ¬ μ μ‘
ex) mvc νλ μμν¬
μμ© μμ(μλΉμ€ κ³μΈ΅)
λλ©μΈ μμμ λͺ¨λΈμ μ¬μ©ν΄μ μ¬μ©μμκ² μ 곡νλ κΈ°λ₯μ ꡬννλ€.
λ‘μ§μ μ§μ μννκΈ° λ³΄λ¨ λλ©μΈ λͺ¨λΈμ λ‘μ§ μνμ μν
λλ©μΈ μμ
λλ©μΈ λͺ¨λΈμ ꡬννκ³ ν΅μ¬ λ‘μ§μ ꡬν
public cancelOrder(String orderId) {
Order order = findOrderById(orderId); // λλ©μΈ λͺ¨λΈμ μμ
...
}
μΈνλΌ μ€νΈλμ³ μμ
λ Όλ¦¬μ κ°λ 보λ€λ ꡬν κΈ°μ μ λ€λ£¬λ€.
ex) DB ,SMTP , μΉ΄νμΉ΄
κ³μΈ΅ ꡬ쑰 μν€ν μ²
μν€ν μ²λ 보ν΅
νν -> μμ© -> λλ©μΈ -> μΈνλΌμ€νΈλμ³ λ‘ μ΄λ£¨μ΄μ Έμλ€.
μμ κ³μΈ΅μ νμ κ³μΈ΅μ μμ‘΄ν μ μμ§λ§ κ·Έ λ°λλ μ‘΄μ¬νμ§ μλλ€.
κΌ λ°λ‘ μλ κ³μΈ΅μλ§ μμ‘΄νμ§ μκ³ μ μ°μ μΌλ‘ μμ‘΄μ±μ κ°μ Έκ°κΈ°λ νλ€.
ex) μμ© -> μΈνλΌ
νμ§λ§ μ΄ κ²½μ° λ κ°μ§ λ¬Έμ κ° μκΈ΄λ€
1. ꡬν μ€μ μ λͺ¨λ λλ΄μΌνκΈ° λλ¬Έμ ν μ€νΈκ° μ΄λ €μ
2. ꡬν λ°©μμ λ³κ²½νκΈ° μ΄λ €μ
λ°λΌμ DIPλ₯Ό μ μ©νλ©΄ μμ λ¬Έμ λ₯Ό ν΄κ²°ν μ μλ€.
DIP
κ³ μμ€ λͺ¨λ
- μλ―Έ μλ λ¨μΌ κΈ°λ₯μ μ 곡νλ λͺ¨λ
- μ¬λ¬κ°μ§ νμ κΈ°λ₯μ΄ νμνλ€
μ μμ€ λͺ¨λ
- κ³ μμ€ λͺ¨λμ νμ κΈ°λ₯μ ꡬν
ex) JPA , Drools
κ³ μμ€ λͺ¨λμ΄ μ μμ€ λͺ¨λμ μμ‘΄νλ©΄ μμ λ§ν λκ°μ§ λ¬Έμ κ° μκΈ΄λ€.
κ·Έλμ DIPλ μ μμ€ λͺ¨λμ΄ κ³ μμ€ λͺ¨λμ μμ‘΄νλλ‘ λ°κΎΌλ€.
μ΄λ μΆμνν μΈν°νμ΄μ€λ₯Ό μ¬μ©νλ€.

μΈν°νμ΄μ€λ₯Ό ν΅ν΄ λ μ΄μ κ³ μμ€ λͺ¨λμ΄ μ μμ€ λͺ¨λμ μμ‘΄νμ§ μλλ€.
μ΄λ₯Ό μμ‘΄ κ΄κ³ μμ (DIP)λΌκ³ νλ€.
DIPλ₯Ό ν΅ν΄ λ κ°μ§ λ¬Έμ λ₯Ό ν΄κ²°ν μ μλ€.
1. κΈ°μ κ΅μ²΄λ₯Ό μ½κ² ν μ μλ€.
// μ¬μ©ν μ μμ€ κ°μ²΄ μμ±
Rule Discounter ruleDiscounter = new DroolsRuleDiscounter();
// μμ±μ λ°©μμΌλ‘ μ£Όμ
CalculateDiscountService disService = new CalculateDiscountService(ruleDiscounter);
2. ν μ€νΈκ° μ©μ΄νλ€.
κΈ°μ‘΄μλ κΈ°μ μ΄ κ΅¬νλμ΄μΌ ν μ μμμ§λ§ μ΄μ λμκ°μ²΄(mock)μ μ΄μ©ν΄μ κ°νΈνκ² μ§νν μ μλ€.
μ€ν μ΄λ λͺ¨μ κ°μ²΄μ κ°μ ν μ€νΈ λͺ©μ μ λμμ μ¬μ©νμ¬ κ±°μ λͺ¨λ μν©μ ν μ€νΈν μ μλ€ !
* μΈν°νμ΄μ€λ₯Ό μ€κ³ν λ μ μμ€ λͺ¨λμμ μΆμΆνμ§ μμμΌνλ€ !!
* νμ κΈ°λ₯μ μΆμνν μΈν°νμ΄μ€λ κ³ μμ€ λͺ¨λ κ΄μ μμ λμΆνλ€ !!
λλ©μΈ μμμ μ£Όμ ꡬμ±μμ
μν°ν°
- κ³ μ μ μλ³μλ₯Ό κ°μ§κ³ λλ©μΈμ κ³ μ ν κ°λ μ νννλ€.
λ°Έλ₯
- κ°λ μ μΌλ‘ νλμΈ κ°μ νν
ex) μ£Όμ , κΈμ‘
μ 그리거νΈ
- μ°κ΄λ μν°ν°μ λ°Έλ₯ κ°μ²΄λ₯Ό κ°λ μ μΌλ‘ λ¬Άμ κ²
리ν¬μ§ν°λ¦¬
- λλ©μΈ λͺ¨λΈμ μμμ±μ μ²λ¦¬νλ€.
λλ©μΈ μλΉμ€
- νΉμ μν°ν°μ μνμ§ μμ λλ©μΈ λ‘μ§
- λλ©μΈ λ‘μ§μ΄ μ¬λ¬ μν°ν°μ λ°Έλ₯λ₯Ό νμλ‘ νλ©΄ λλ©μΈ μλΉμ€μμ λ‘μ§μ ꡬννλ€.
λλ©μΈ μν°ν° VS DB μν°ν°
λλ©μΈ μν°ν°
- λ°μ΄ν°μ ν¨κ» λλ©μΈ κΈ°λ₯μ μ 곡νλ€.
- λλ©μΈ κ΄μ μμ κΈ°λ₯μ ꡬννκ³ μΊ‘μνν΄μ λ°μ΄ν°κ° μμλ‘ λ³κ²½λλ κ²μ λ§λλ€.
- κ°λ μ μΌλ‘ νλμΈ κ²½μ° λ°Έλ£¨ νμ μ μ΄μ©ν΄μ ννν μ μλ€.
μ 그리거νΈ
- κ°λ³ κ°μ²΄λΏλ§ μλλΌ μμ μμ€μμ λͺ¨λΈμ λ³Ό μ μμ΄μΌ μ 체 λͺ¨λΈμ κ΄κ³μ κ°λ³ λͺ¨λΈμ μ΄ν΄νλ λ°
λμμ΄ λλ€.
- κ΄λ ¨ κ°μ²΄λ₯Ό νλλ‘ λ¬Άμ κ΅°μ§
- κ°μ²΄ κ΅°μ§ λ¨μλ‘ λͺ¨λΈμ λ°λΌλ³Έλ€.
- λ£¨νΈ μν°ν°λ μ그리거νΈμ μν΄ μλ μν°ν°μ λ°Έλ₯ κ°μ²΄λ₯Ό μ΄μ©ν΄μ ꡬνν΄μΌν κΈ°λ₯μ μ 곡νλ€.
- λ£¨νΈ μν°ν°λ₯Ό ν΅ν΄ λ€λ₯Έ μν°ν°λ λ°Έλ₯ κ°μ²΄μ μ κ·Όνλ€.-> μΊ‘μν
리ν¬μ§ν°λ¦¬
- μ κ·Έλ¦¬κ±°νΈ λ¨μλ‘ κ°μ²΄λ₯Ό μ μ₯νκ³ μ‘°ννλ κΈ°λ₯μ μ μνλ€.
- λλ©μΈ λͺ¨λΈμ μ¬μ©ν΄μΌ νλ μ½λλ 리ν¬μ§ν°λ¦¬λ₯Ό ν΅ν΄ λλ©μΈ κ°μ²΄λ₯Ό ꡬν λ€μ λλ©μΈ κ°μ²΄μ κΈ°λ₯μ μ¬μ©