μ°μ μ€νλ§μ νμ λ°°κ²½μ μμλ³΄κ² μ΅λλ€.
EJB(Enterprise Java Bean)
EJBλ₯Ό κ²μν΄λ³΄λ©΄ λ€μκ³Ό κ°μ΄ μ€λͺ ν©λλ€.
μν°νλΌμ΄μ¦ μλ°λΉμ¦(Enterprise JavaBeans; EJB)λ κΈ°μ νκ²½μ μμ€ν μ ꡬννκΈ° μν μλ²μΈ‘ μ»΄ν¬λνΈ λͺ¨λΈμ΄λ€. μ¦, EJBλ μ ν리μΌμ΄μ μ μ 무 λ‘μ§μ κ°μ§κ³ μλ μλ² μ ν리μΌμ΄μ μ΄λ€.
EJBμμ JBμ ν΄λΉνλ Java Beanμ΄λ μλ° κ°μ²΄λ₯Ό μ¬μ¬μ© νλ₯νκ² μ»΄ν¬λνΈν μν¬ μ μλ μ½λ© λ°©μΉ¨μ μ μν κ²μ μλ―Έν©λλ€.
μ¦ μμμ μ€λͺ νλ EJBλ "μ»΄ν¬λνΈ(λΉ νΉμ κ°μ²΄)λ€μ κ΄λ¦¬νλ 컨ν μ΄λ"λΌκ³ κ°λ³κ² μ΄ν΄ν μ μμ΅λλ€.
EJBμ λ¬Έμ μ
EJBλ 보μ, νΈλμμ , λΆμ° μ»΄ν¨ν λ± λ§μ μλΉμ€λ₯Ό μ 곡νμμΌλ, μ΄λ₯Ό μν΄μλ EJB μ€νμ μ§μΌμΌ νμΌλ©°, κ²°κ΅ μλΉμ€κ° ꡬνν΄μΌ νλ μ€μ λΉμ¦λμ€ λ‘μ§λ³΄λ€ EJB 컨ν μ΄λλ₯Ό μ¬μ©νκΈ° μν μ½λλ€μ΄ λ§μμ§λ κ²°κ³Όλ₯Ό λ°μμμΌ°μ΅λλ€.
μ΄λ¬ν λ¬Έμ μ μμΈμ λΉμ¦λμ€ λ‘μ§μ νΉμ κΈ°μ (EJB)μ΄ μ’ μλμ΄ μλ κ²μ΄μμ΅λλ€.
컨ν μ΄λμ λͺ©μ μ κ°μ²΄κ° νμν λ λ§λ€ 컨ν μ΄λμμ λ°μλ΄λ λ°©μμ ν΅ν΄ κ°μ²΄λ€κ°μ μμ‘΄μ±μ ν΄κ²°νλ κ²μ΄μμ΅λλ€.
μ€νλ§ μ°½μμμΈ λ‘λ μ‘΄μ¨μ EJBλ₯Ό μ¬μ©νμ§ μκ³ λ κ°μ²΄κ° μμ‘΄μ± ν΄κ²°μ΄ κ°λ₯ν 컨ν μ΄λλ₯Ό κ°λ°νλλ°, μ΄κ²μ΄ μ€νλ§μ μμμ λλ€.
μ¦ νΉμ κΈ°μ μ μ’ μλμ§ μκ³ κ°μ²΄λ₯Ό κ΄λ¦¬ν μ μλ 컨ν μ΄λλ₯Ό μ 곡νλ κ²μ΄ μ€νλ§μ κΈ°λ³Έ μ² νμ λλ€.
Springμ΄λ?
μ€νλ§μ΄λΌλ λ¨μ΄λ 'νΉμ ν νλ'λ₯Ό μ§μΉν μλ μμΌλ, λλΆλΆμ κ²½μ° 'μ¬λ¬ κΈ°μ λ€μ μ§ν©μ²΄'λ₯Ό μλ―Έν©λλ€.
κ·Έλ¬ν κΈ°μ λ€μλ λ€μκ³Ό κ°μ μ’ λ₯λ€μ΄ μμ΅λλ€.
- μ€νλ§ νλ μμν¬
- μ€νλ§λΆνΈ (μ€νλ§ νλ μμν¬μ λͺ¨λ κΈ°μ λ€μ νΈλ¦¬νκ² μ¬μ©ν μ μλλ‘ λμμ€)
- μ€νλ§ λ°μ΄ν° (CRUDλ₯Ό νΈλ¦¬νκ² μ¬μ©ν μ μλλ‘ λμμ€)
- μ€νλ§ μνλ¦¬ν° (보μ κ΄λ ¨ κΈ°λ₯μ νΈλ¦¬νκ² μ¬μ©ν μ μλλ‘ λμμ€)
- μ€νλ§ μΈμ (μΈμ κΈ°λ₯μ νΈλ¦¬νκ² μ¬μ©ν μ μλλ‘ λμμ€)
- μ€νλ§ Rest Docs (apiλ¬Έμλ₯Ό νΈλ¦¬νκ² μ¬μ©ν μ μλλ‘ λμμ€)
- μ€νλ§ λ°°μΉ (λ°°μΉμ²λ¦¬μ νΉν)
μ€νλ§κ³Ό μ€νλ§ νλ μμν¬, μ€νλ§ λΆνΈμ λν΄μ μ²μ μ νμ€ λλ ν·κ°λ¦΄ μ μμ΅λλ€.
μ€νλ§ νλ μμν¬κ° ν΅μ¬μ΄λ©°, μ΄μΈ λͺ¨λ κΈ°μ λ€μ μ€νλ§ νλ μμν¬λ₯Ό κΈ°λ°μΌλ‘ λμν©λλ€.
κ·Έλ¦¬κ³ κ·Έλ¬ν κΈ°μ λ€μ νΈλ¦¬νκ² μ€μ νκ³ μ¬μ©ν μ μλλ‘ λμμ£Όλ κΈ°μ μ΄ λ°λ‘ μ€νλ§λΆνΈμ λλ€.
κΈ°μ‘΄μ μ€νλ§ νλ μμν¬κ° κΈ°λ³Έμ μΌλ‘ ν΄μΌν μ ν μ΄ λ무 λ§κ³ μ΄λ €μ κΈ°μ, μ΄λ₯Ό ν΄μνκΈ° μν΄ μ€νλ§ λΆνΈκ° λ±μ₯νμ΅λλ€.
μ€νλ§ λΆνΈ
μ€νλ§ νλ μμν¬ κΈ°λ° νλ‘μ νΈλ₯Ό 볡μ‘ν μ€μ μμ΄ μ½κ³ λΉ λ₯΄κ² λ§λ€μ΄μ£Όλ νλ μμν¬μ λλ€.
- λ¨λ μΌλ‘ μ€νν μ μλ μ€νλ§ μ ν리μΌμ΄μ μ μ½κ² μμ±
- Tomcatκ°μ μΉ μλ²λ₯Ό λ΄μ₯ν΄μ λ³λμ μΉ μλ²λ₯Ό μ€μΉνμ§ μμλ λ¨.
- μμ¬μ΄ λΉλ ꡬμ±μ μν starter μ’ μμ± μ 곡 (λΌμ΄λΈλ¬λ¦¬λ₯Ό λ‘κ²¨μ¬ λ, μΆκ°λ‘ νμν λΌμ΄λΈλ¬λ¦¬λ€μ μ’ μμ μΌλ‘ λ‘겨μ΄)
- μ€νλ§κ³Ό 3rd parth(μΈλΆ) λΌμ΄λΈλ¬λ¦¬ μλ ꡬμ±
- κ΄λ‘μ μν κ°κ²°ν μ€μ
κ·Έλ¬λ μ€νλ§ λΆνΈκ° λ무 λ§μ κ²μ μλμΌλ‘ ν΄μ£ΌκΈ° λλ¬Έμ, μ€νλ € μ΄ λλ¬Έμ μ€μ νκΈ° μ΄λ €μμ§λ λΆλΆλ μ‘΄μ¬νλ κ² κ°μ΅λλ€.
μ€νλ§μ ν΅μ¬ κ°λ
μ€νλ§μ μλ° μΈμ΄ κΈ°λ°μ νλ μμν¬μ λλ€.
μλ°λ κ°μ²΄ μ§ν₯ μΈμ΄λ‘μ¨, μ€νλ§μ κ°μ²΄μ§ν₯ μΈμ΄κ° κ°μ§ κ°λ ₯ν νΉμ§μ μ΄λ €λ΄λ νλ μμν¬μ λλ€.
μ¦ μ€νλ§μ μ’μ κ°μ²΄ μ§ν₯ μ ν리μΌμ΄μ μ κ°λ°μ ν μ μκ² λμμ£Όλ νλ μμν¬μ λλ€.
μ€νλ§μ μ΄ν΄νκΈ° μν΄μλ μ°μ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ λν μ΄ν΄κ° νμν©λλ€.
κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°
κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°(OOP)μ μ»΄ν¨ν° νλ‘κ·Έλ¨μ λͺ λ Ήμ΄μ λͺ©λ‘μΌλ‘ 보λ μκ°μμ λ²μ΄λμ
μ¬λ¬κ°μ λ 립λ λ¨μ, μ¦ "κ°μ²΄"λ€μ λͺ¨μμΌλ‘ νμ νκ³ μ νλ κ²μ λλ€.
κ°κ°μ κ°μ²΄λ€μ λ©μμ§λ₯Ό μ£Όκ³ λ°κ³ , λ°μ΄ν°λ₯Ό μ²λ¦¬ν μ μμ΅λλ€.
κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ νλ‘κ·Έλ¨μ μ μ°νκ³ λ³κ²½μ΄ μ©μ΄νκ² λ§λ€μ΄μ€λλ€.
SOLID - μ’μ κ°μ²΄ μ§ν₯ μ€κ³μ 5κ°μ§ μμΉ
- SRP : λ¨μΌ μ± μ μμΉ (Single Responsibility Principle)
- OCP : κ°λ°©-νμ μμΉ (Open/Closed Principle)
- LSP : 리μ€μ½ν μΉν μμΉ (Liskov Substitution Principle)
- ISP : μΈν°νμ΄μ€ λΆλ¦¬ μμΉ (Interface Segregation Principle)
- DIP : μμ‘΄κ΄κ³ μμ μμΉ (Dependency Inversion Principle)
SRP : λ¨μΌ μ± μ μμΉ
ν ν΄λμ€λ νλμ μ± μλ§ κ°μ ΈμΌ νλ€λ μμΉμ λλ€.
νλμ μ± μμ΄λΌλ κ²μ κΈ°μ€μ λ³κ²½μ λλ€.
λ³κ²½μ΄ μμ λ νκΈ ν¨κ³Όκ° μ μ΄μΌ λ¨μΌ μ± μ μμΉμ μ λ°λ₯Έ κ²μ΄λΌ λ³Ό μ μμ΅λλ€.
OCP : κ°λ°©-νμ μμΉ
μννΈμ¨μ΄ μμλ νμ₯μλ μ΄λ €μμΌλ λ³κ²½μλ λ«νμμ΄μΌ νλ€λ μμΉμ λλ€.
OCPλ λ€νμ±μ νμ©νμ¬ μ§ν¬ μ μμ΅λλ€.
μλ μ½λλ₯Ό ν΅ν μμλ₯Ό νμΈνκ² μ΅λλ€.
public class Member{
private Car myCar = new Benz();
}
public class Member{
//private Car myCar = new Benz();
private Car myCar = new Lexus();
}
μ μ½λμμ λ€νμ±μ νμ©νμμμλ λΆκ΅¬νκ³ κΈ°μ‘΄μ μ½λκ° λ³κ²½λλ κ²μ νμΈν μ μμ΅λλ€.
OCPμ λ¬Έμ μ
ꡬν체λ₯Ό λ³κ²½νκΈ° μν΄μλ μ½λμ λ³κ²½μ΄ νμμ μ λλ€.
μ¦ λ€νμ±μ μ¬μ©νμλλΌλ OCPλ₯Ό μ§ν¬ μ μκ²λλ μν©μ΄ λ°μν©λλ€.
μ΄λ₯Ό ν΄κ²°νκΈ° μν΄ κ°μ²΄λ₯Ό μμ±νκ³ , μ°κ΄κ΄κ³λ₯Ό λ§Ίμ΄μ£Όλ λ³λμ μ€μ μκ° νμνλ°, ν΄λΉ μν μ μ€νλ§ μ»¨ν μ΄λκ° ν΄μ€λλ€.
LSP : 리μ€μ½ν μΉν μμΉ
νλ‘κ·Έλ¨μ κ°μ²΄λ νλ‘κ·Έλ¨μ μ νμ±μ κΉ¨λ¨λ¦¬μ§ μμΌλ©΄μ νμ νμ μ μΈμ€ν΄μ€λ‘ λ°κΏ μ μμ΄μΌ νλ€λ μμΉμ λλ€.
λ€νμ±μμ νμ ν΄λμ€λ μΈν°νμ΄μ€ κ·μ½μ λ€ μ§μΌμΌ νλ€λ λ»μ λλ€.
λ€νμ±μ μ§μνκΈ° μν μμΉμΌλ‘μ¨, μΈν°νμ΄μ€λ₯Ό ꡬνν ꡬν체λ₯Ό λ―Ώκ³ μ¬μ©νλ €λ©΄ μ΄ μμΉμ΄ νμν©λλ€
μλ₯Ό λ€μ΄ μλμ°¨ μΈν°νμ΄μ€μ μμ κΈ°λ₯μ μμΌλ‘ κ°λ κ²μΈλ°, μ΄λ ν ꡬνμ²΄κ° μμ μ λ°μμ λ λ€λ‘ κ°κ² ꡬννλ€λ©΄ μ΄λ LSPλ₯Ό μλ°ν κ²μ λλ€.
ISP : μΈν°νμ΄μ€ λΆλ¦¬ μμΉ
νΉμ ν΄λΌμ΄μΈνΈλ₯Ό μν μΈν°νμ΄μ€ μ¬λ¬κ°κ° λ²μ© μΈν°νμ΄μ€ νλλ³΄λ€ λ«λ€λ μμΉμ λλ€.
μ΄λ₯Ό ν΅ν΄ μΈν°νμ΄μ€κ° λͺ νν΄μ§κ³ , λ체 κ°λ₯μ±μ΄ λμμ§λλ€.
DIP : μμ‘΄κ΄κ³ μμ μμΉ
ꡬ체νκ° μλ μΆμνμ μμ‘΄νλΌλ μμΉμ λλ€.
μ½λλ μΈν°νμ΄μ€μ μμ‘΄νμ¬ μμ±λμ΄μΌ νλ€λ λ»μΌλ‘, νλ‘κ·Έλλ¨Έλ ꡬ체νκ° μλ μΆμνμ μμ‘΄ν΄μΌ νλ€λ λ»μ λλ€.
μμ OCPμμ μ€λͺ ν Memberλ μΈν°νμ΄μ€μ μμ‘΄νμ§λ§, ꡬν ν΄λμ€λ λμμ μμ‘΄ν©λλ€.
public class Member{
private Car myCar = new Lexus();//Carμ μΈν°νμ΄μ€, Lexusλ ꡬν ν΄λμ€
}
μ¦ DIPλ₯Ό μλ°ν κ²μ λλ€.
κ°μ²΄ μ§ν₯ μ€κ³μ μ€νλ§
κ°μ²΄ μ§ν₯μ ν΅μ¬μ λ€νμ±μ λλ€.
κ·Έλ¬λ λ€νμ± λ§μΌλ‘λ OCP, DIPλ₯Ό μ§ν¬ μ μλ€λ κ²μ νμΈνμ΅λλ€.
μ΄λ₯Ό ν΄κ²°νκΈ° μν΄ μ€νλ§μ΄ λ±μ₯νμκ³ , μ€νλ§μ λ€μ κΈ°μ λ‘ λ€νμ± + OCP, DIPλ₯Ό κ°λ₯νκ² μ§μν©λλ€.
- DI(Dependency Injection): μμ‘΄κ΄κ³, μμ‘΄μ± μ£Όμ
- DI 컨ν μ΄λ μ 곡
Reference
http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod
'ποΈ Spring > κΈ°λ³Έ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Spring] @ComponentScan (0) | 2021.12.11 |
---|---|
[Spring] @Configuration (0) | 2021.12.11 |
[Spring] μ±κΈν€ (feat. μ±κΈν€μ ꡬννλ μ¬λ¬ λ°©μ) (2) | 2021.12.11 |
[Spring] μ€νλ§ μ»¨ν μ΄λμ μ€νλ§ λΉ (0) | 2021.12.11 |
[Spring] IoCμ DI (0) | 2021.12.11 |