Springμ΄ νμνκΈ° μ΄μ μλ EJB(Enterprise Java Bean)κ° Java μ§μμ λνκΈ°μ μ΄μλ€. νμ§λ§ EJBλ μ¬λ¬ λ¬Έμ μ μ κ°μ§κ³ μμλ€. ν κ°λ°μλ EJBμ λ¬Έμ μ μ μ§μ νλ©° λ체 λ°©μμ μμ€μ½λλ‘ μμ±νμ¬ μ± μ μΆκ°νλ€. μ΄ μ± μ λ³Έ λ€λ₯Έ κ°λ°μλ€ λͺλͺμ΄ λͺ¨μκ³ μ€νμμ€ννλ©΄μ Springμ΄ νμλμλ€.
μ€νλ§, JPA λ±λ±μ κΈ°λ₯λ€μ΄ λͺ¨λ λ€ ν©μ³μ§ κ²μ΄λ€. μλ° νμ€ κΈ°μ μ΄μκΈ° λλ¬Έμ κ΄λ²μνκ² λ³΄κΈλ μ μμκ³ μΈμ€ν΄μ€ νλ§, μ€μ μ μν νΈλμμ μ²λ¦¬ λ±μ κ³ κΈ κΈ°μ λ€μ μ§μνμκΈ° λλ¬Έμ κΈμ΅κΆ κ°μ λΆμΌμμ λ리 μ¬μ©λμλ€.
EJBλ λ€μ κΈ°μ μ μ§μνλ©° κΈ°μ μ© μ΄ν리μΌμ΄μ κ°λ°μ λ¨μνκ² νλ € νλ€.
νμ§λ§, EJB νλ μμν¬λ λ무 볡μ‘νκ³ λν΄νκ³ , μ¬μ§μ΄ 무κ²κ³ λ리기κΉμ§ νλ€. κ·Έλμ μ μ λ§μ κ°λ°μλ€μκ² μΈλ©΄λΉνκ² λμλ€.
μλλ EJB νλ μμν¬μ λͺκ°μ§ λ¬Έμ μ μ΄λ€.
λ§ν΄ νμΈλ¬(Martin Fowler)κ° μ»¨νΌλ°μ€λ₯Ό μ€λΉνλ€ νμν POJO(Plain Old Java Object)λΌλ μ©μ΄λ λ¨μ΄μ λ» κ·Έλλ‘ μμνκ³ μ€λλ μλ° μ€λΈμ νΈ
λ₯Ό μ§ν₯νλ€λ μλ―Έλ₯Ό κ°μ§κ³ μλ€. μ΄ λ©μμ§λ μλ°κ° νΉμ νλ μμν¬μ μ’
μλλ ν¨ν΄μ 극볡νκ³ μμν λ³Έλ ννλ‘ λμκ°μΌ νλ€λ EJBλ₯Ό 겨λ₯νκ³ κ°νμ μΈ λ©μΈμ§λ₯Ό λ΄κ³ μμλ€.
λ‘λ μ‘΄μ¨(Rod Johnson)μ EJBμ λ¬Έμ μ μ μ§μ νκ³ EJB μμ΄ μμν μλ°λ§μΌλ‘λ μ’μ κ°μ²΄μ§ν₯ μ΄ν리μΌμ΄μ μ κ°λ°ν μ μλ€λ κ²μ 보μ¬μ£Όμλ€. κ·Έλ 3λ§μ¬ μ€μ μ½λλ₯Ό μΈμμ 곡κ°νλλ° κ·Έ μ½λλ νμ¬ μ€νλ§μ μΆμ μ΄λ£¨λ ν΅μ¬ κΈ°λ₯μ λͺ¨μ²΄κ° λμλ€. μ΄ν, κ² ν λ¬(Juergen Hoeller)μ μ μΉ΄λ‘ν(Yann Caroff)κ° λ‘λ μ‘΄μ¨μκ² μ€νμμ€ νλ‘μ νΈλ₯Ό μ μνκ² λλ©΄μ μ€νλ§ νλ μ μν¬κ° νμνκ² λλ€.
μ€νλ§μ λ§€μ° λ°©λνκ³ ν¬λ€. μ€νλ§μ μΌλ°μ μΌλ‘ 3κ°μ§μ νν μ€ νλλ‘ μ¬μ©λλ€.
μ€μ λ‘ μ€νλ§ κ³΅μ ννμ΄μ§μ μ μνκ² λλ©΄ μ€νλ§ μμλ μ λ§ λ§μ νλ‘μ νΈκ° ν¬ν¨λμ΄ μλ κ²μ μ μ μλ€.
μ€νλ§μ λ¨μν νλ μμν¬λΌκ³ νννκΈ°λ νμ§λ§ μ€νλ§ λΆνΈ, μ€νλ§ λ°μ΄ν°, μ€νλ§ μΈμ
, μ€νλ§ μνλ¦¬ν° λ± μ€νλ§μ ꡬμ±νλ μ λ§μ μνκ³λ₯Ό μλ―ΈνκΈ°λ νλ€.
μμμ μΈκΈν μ€νλ§μ νμ λ°°κ²½μλν΄μ μ 리ν΄λ³΄λ©΄ EJBλ₯Ό μμμΌλ‘ μμ μλ°λ‘ λμκ°κΈ° μν POJOκ° νμλκ³ , κ·Έ κΈ°λ°μ ν΅ν΄ μ€νλ§μ΄ νμνλ€.
μ¦, μ€νλ§μ μλ° μΈμ΄ κΈ°λ°μ νλ μ μν¬
μ΄λ€.
μλ°λ₯Ό 곡λΆνλ©΄ κ°μ₯ μ²μμ λ£κ² λλ κ°λ
μ΄ μλλ°, λ°λ‘,
μλ° μΈμ΄λ κ°μ²΄ μ§ν₯ μΈμ΄λΌλ κ²μ΄λ€. μ€νλ§μ λ€νμ±
, μΊ‘μν
, μΆμν
, μμμ±
κ°μ μλ° μΈμ΄μ νΉμ§μ μ μ΄λ €μ€ μ μλ νλ μ μν¬μΈ κ²μ΄λ€.
μ¦, POJOμ νλ¦λλ‘ μμν μλ°μ λͺ¨μλλ‘ νλ‘κ·Έλλ°μ ν μ μλλ‘ λμμ£Όλ ν΄μ΄λΌλ κ²μ΄λ€.
κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ ν΅μ¬μ μ½λμ μΌλΆλΆμ μΆμΆν΄ λͺ¨λν ν μ μλ€.
μλ₯Ό λ€μ΄ λ κ³ λΈλμ 쑰립νλ κ²μ²λΌ νΉμ λ‘μ§λ€μ λλ λͺ¨λνλ₯Ό νκ³ λμ€μ 쑰립μ νλ λ°©μμ΄λ€.
μ΄λ‘ μΈν΄μ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ μ½λκ° μμ‘΄μ μ΄κ±°λ μ’
μμ μ΄μ§ μκ² μ€κ³ν μ μλλ° μ΄λ λκ·λͺ¨μ μμ
μ νκΈ° μ©μ΄νλ€. (μν μ λλ κ°μ 맑μ λΆλΆμ κ°λ°νλ©΄ λκΈ° λλ¬Έ)
μ€νλ§μ μμ‘΄μ± μ£Όμ
(DI)
, μ μ΄μ μμ (IoC)
λΌλ κΈ°λ₯λ€μ νμ©ν΄ λ€νμ±
μ μ΄λ¦° νλ‘κ·Έλλ°μ λμΈ μ μλ€. μ΄κ² μ€νλ§μ΄ μ λͺ
ν΄μ§ ν΅μ¬μ μΈ μ΄μ μ΄λ€.
μ€νλ§μ DIμ IoC λ±μ ν΅ν΄ SOLID μμΉμ μλ°°νμ§ μλλ‘ λμμ€λ€. κ·Έλ κΈ° λλ¬Έμ μμ§κΉμ§ λ§μ λ°±μλ κ°λ°μλ€μ΄ μ€νλ§μ μ¬μ©νκ³ μλ κ²μ΄λ€.
SOLID
ν΄λ¦°μ½λλ‘ μ λͺ ν λ‘λ²νΈ λ§ν΄μ΄ μ’μ κ°μ²΄ μ§ν₯ μ€κ³μ 5κ°μ§ μμΉμ μ 리νλ€.
- SRP: λ¨μΌ μ± μ μμΉ
- OCP: κ°λ°©-νμ μμΉ
- LSP: 리μ€μ½ν μΉν μμΉ
- ISP: μΈν°νμ΄μ€ λΆλ¦¬ μμΉ
- DIP: μμ‘΄κ΄κ³ μμ μμΉ
μμΈν λ΄μ©μ λ§ν¬ μ°Έμ‘°(λ Έμ ): μ’μ κ°μ²΄ μ§ν₯ μ€κ³μ 5κ°μ§ μμΉ(SOLID)
JPAλ Java μ§μμ νμ€ ORM κΈ°μ μΈλ°, νμ¬ λ리 μ°μ΄κ³ μλ Hibernateκ° JPA ꡬν체 μ€ νλμ΄λ€.
Spring μ΄μ μ EJBκ° μμλ€λ©΄, Hibernate μ΄μ μλ Entity Beanμ΄ μμλ€. Entity Beanμ EJBκ° μ§μνλ κΈ°λ₯ μ€ νλμλλ° μ΄ λν μ§μ₯μ΄μλμ§ ν κ°λ°μκ° μμ₯ μμ HibernateλΌλ λμμ λ΄λμλ€. JPAλ Hibernateλ₯Ό κ±°μ 볡μ¬+λΆμ¬λ£κΈ° ν΄μ λ§λ€μλ€κ³ ν΄λ κ³ΌμΈμ΄ μλλ§νΌ λ§μ λΆλΆ μ°Έκ³ νμ¬ λ§λ νμ€ μΈν°νμ΄μ€μ΄λ€.
πΊ κΉμνλμ μ€νλ§ ν΅μ¬ μ리 - κΈ°λ³ΈνΈ
π¨π»βπ» κ°λ°μ μμ΄λμ λΈλ‘κ·Έ
π¨π»βπ» μ μ§λμ κΈ°μ λΈλ‘κ·Έ