μ°μ μ€νλ§μ νμ λ°°κ²½μ μμλ³΄κ² μ΅λλ€.
EJB(Enterprise Java Bean)
EJBλ₯Ό κ²μν΄λ³΄λ©΄ λ€μκ³Ό κ°μ΄ μ€λͺ ν©λλ€.
μν°νλΌμ΄μ¦ μλ°λΉμ¦(Enterprise JavaBeans; EJB)λ κΈ°μ νκ²½μ μμ€ν μ ꡬννκΈ° μν μλ²μΈ‘ μ»΄ν¬λνΈ λͺ¨λΈμ΄λ€. μ¦, EJBλ μ ν리μΌμ΄μ μ μ 무 λ‘μ§μ κ°μ§κ³ μλ μλ² μ ν리μΌμ΄μ μ΄λ€.
μν°νλΌμ΄μ¦ μλ°λΉμ¦ - μν€λ°±κ³Ό, μ°λ¦¬ λͺ¨λμ λ°±κ³Όμ¬μ
μν°νλΌμ΄μ¦ μλ°λΉμ¦(Enterprise JavaBeans; EJB)λ κΈ°μ νκ²½μ μμ€ν μ ꡬννκΈ° μν μλ²μΈ‘ μ»΄ν¬λνΈ λͺ¨λΈμ΄λ€. μ¦, EJBλ μ ν리μΌμ΄μ μ μ 무 λ‘μ§μ κ°μ§κ³ μλ μλ² μ ν리μΌμ΄μ μ΄λ€. EJB μ¬
ko.wikipedia.org
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
μ€νλ§ ν΅μ¬ μ리 - κΈ°λ³ΈνΈ - μΈνλ° | κ°μ
μ€νλ§ μ λ¬Έμκ° μμ λ₯Ό λ§λ€μ΄κ°λ©΄μ μ€νλ§μ ν΅μ¬ μ리λ₯Ό μ΄ν΄νκ³ , μ€νλ§ κΈ°λ³ΈκΈ°λ₯Ό νμ€ν λ€μ§ μ μμ΅λλ€., μ€νλ§ ν΅μ¬ μ리λ₯Ό μ΄ν΄νκ³ , μ±μ₯νλ κ°λ°μκ° λμ΄λ³΄μΈμ! π’ μκ° μ
www.inflearn.com
[Spring] μ€νλ§ κ°λ‘
EJB (Enterprise Java Bean) Java beanμ΄λ μλ° κ°μ²΄λ₯Ό μ¬μ¬μ© κ°λ₯νκ² μ»΄ν¬λνΈν μν¬ μ μλ μ½λ© λ°©μΉ¨μ μ μν κ²μ μλ―Έν©λλ€. ( beanμ μ½κ² component λλ κ°μ²΄λΌκ³ μ΄ν΄νλ©΄ μ’μ΅λλ€. ) κ·Έλ¦¬κ³ Ja
victorydntmd.tistory.com
http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod
ArticleS.UncleBob.PrinciplesOfOod
The Principles of OOD What is object oriented design? What is it all about? What are it's benefits? What are it's costs? It may seem silly to ask these questions in a day and age when virtually every software developer is using an object oriented language
butunclebob.com
'ποΈ 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 |