π‘
1. μ μ΄μ μμ (IoC)κ³Ό μμ‘΄μ± μ£Όμ (DI)
2. λΉ(Bean)κ³Ό μ€νλ§ μ»¨ν μ΄λ
3. κ΄μ μ§ν₯ νλ‘κ·Έλλ°(AOP)
4. μ΄μ κ°λ₯ν μλΉμ€ μΆμν(PSA)
μ κΈ°λ° μ§μ
1. μ€νλ§ νλ μμν¬(Spring Framework)
- μΌλ°μ μΈ μ μ: μ€νλ§ νλ μμν¬λ μλ° νλ«νΌμ μν κ°λ ₯ν μ ν리μΌμ΄μ νλ μμν¬μ λλ€. κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ μμΉμ κΈ°λ°νμ¬ μ ν리μΌμ΄μ μ ꡬμ±νκ³ κ΄λ¦¬νλ λ°©μμΌλ‘, μ£Όλ‘ μν°νλΌμ΄μ¦κΈ μ ν리μΌμ΄μ μ ꡬμΆν λ μ¬μ©λ©λλ€.
- μ€μ λ°©μ: μ€νλ§μ μ΄κΈ° μ€μ μ΄ λ³΅μ‘ν μ μμ΅λλ€. XML μ€μ νμΌμ΄λ μλ° κΈ°λ°μ μ€μ ν΄λμ€λ₯Ό ν΅ν΄ λ€μν κΈ°λ₯μ μ§μ ꡬμ±ν΄μΌ ν©λλ€.
- κΈ°λ₯: μ€νλ§μ μμ‘΄μ± μ£Όμ (DI), AOP(κ΄μ μ§ν₯ νλ‘κ·Έλλ°), νΈλμμ κ΄λ¦¬, λ°μ΄ν° μ‘μΈμ€, μΉ μ ν리μΌμ΄μ κ°λ°, 보μ λ± κ΄λ²μν κΈ°λ₯μ μ 곡ν©λλ€. κ·Έλ¬λ μ΄ λͺ¨λ κΈ°λ₯μ μ¬μ©νκΈ° μν΄μλ μλΉν μμ μ€μ μμ μ΄ νμν©λλ€.
2. μ€νλ§ λΆνΈ(Spring Boot)
- μΌλ°μ μΈ μ μ: μ€νλ§ λΆνΈλ μ€νλ§ νλ μμν¬μ μλΈ νλ‘μ νΈλ‘, μ€νλ§ κΈ°λ° μ ν리μΌμ΄μ μ λ μ½κ³ λΉ λ₯΄κ² κ°λ°ν μ μλλ‘ λμμ€λλ€. νΉν 볡μ‘ν μ€μ μ μλννκ³ , κΈ°λ³Έμ μΈ κΈ°λ₯μ μ½κ² μ¬μ©ν μ μλλ‘ λ€μν λꡬμ μ€μ μ μ 곡ν©λλ€.
- μ€μ λ°©μ: μ€νλ§ λΆνΈλ "Convention over Configuration(κ΄λ‘μ λ°λ₯Έ μ€μ )" μ² νμ λ°λ¦ λλ€. μ¦, κ°λ°μκ° κΈ°λ³Έ μ€μ μ ν¬κ² μμ ν νμ μμ΄, μλ μ€μ κΈ°λ₯μ ν΅ν΄ λ§μ λΆλΆμ΄ μλμΌλ‘ μ€μ λ©λλ€. μ΄λ₯Ό ν΅ν΄ μ΄κΈ° μ€μ μ΄ κ°λ¨ν΄μ§κ³ , μμ°μ±μ΄ ν¬κ² ν₯μλ©λλ€.
- κΈ°λ₯: μ€νλ§ λΆνΈλ λ΄μ₯ μΉ μλ²(μ: Tomcat, Jetty)λ₯Ό μ 곡νμ¬ λ³λμ μΉ μλ² μ€μ μμ΄ μ ν리μΌμ΄μ μ μ€νν μ μμ΅λλ€. λν, λ€μν μ€νν° μμ‘΄μ±(Starter Dependency)μ ν΅ν΄ νμν κΈ°λ₯μ μ½κ² μΆκ°ν μ μμΌλ©°, κ°λ¨ν λͺ λ Ήμ΄λ‘ νλ‘μ νΈλ₯Ό λΉ λ₯΄κ² μμν μ μμ΅λλ€.
π‘μ°Έκ³
μ€νλ§ λΆνΈμ μ€νλ§μ΄ λ€λ₯Έ λꡬλΌκ³ μκ°ν μ μμ΅λλ€. νμ§λ§ μ€νλ§ λΆνΈλ μ€νλ§μ μν λꡬμ λλ€.
μ¦, μ€νλ§ λΆνΈλ μ€νλ§ νλ μμν¬μ μΌλΆλ‘, μ€νλ§μ κΈ°λ³Έ κΈ°λ₯μ νμ©νλ©΄μ κ°λ°μμ νΈμμ±μ κ·ΉλννκΈ° μν΄ λ§λ€μ΄μ‘μ΅λλ€.
μ€νλ§ λΆνΈμ ν΅μ¬ κ°λ
μ€νλ§ λΆνΈ ν΅μ¬ μ½μ νΈ μ΄ν΄νκΈ°
1. μ μ΄μ μμ (IoC)κ³Ό μμ‘΄μ± μ£Όμ (DI)
μ μ΄μ μμ (Inversion Of Control): μΌλ°μ μΌλ‘ νλ‘κ·Έλ¨μ νλ¦(μ μ΄)μ κ°λ°μκ° κ²°μ ν©λλ€. νμ§λ§ μ€νλ§μμλ μ μ΄μ μμ μ΄ μ΄λ£¨μ΄μ§λλ€. μ¦, κ°μ²΄μ μμ± λ° λΌμ΄νμ¬μ΄ν΄ κ΄λ¦¬κ° μ€νλ§ νλ μμν¬μ μν΄ μλμΌλ‘ μ μ΄λ©λλ€. μ½κ² λ§ν΄, νλ‘κ·Έλ¨μ νλ¦μ μ€νλ§μ΄ κ΄λ¦¬νλ κ²μ λλ€.
μμ‘΄μ± μ£Όμ (Dependency Injection): μ ν리μΌμ΄μ μ κ°λ°ν λ, ν΄λμ€ κ°μ μμ‘΄ κ΄κ³κ° λ°μν©λλ€. μ΄ μμ‘΄μ±μ μ½λμμ μ§μ κ΄λ¦¬νλ λμ , μ€νλ§μ΄ νμν μμ‘΄μ±μ μλμΌλ‘ μ£Όμ ν΄μ€λλ€. μλ₯Ό λ€μ΄, UserService ν΄λμ€κ° UserRepositoryλ₯Ό νμλ‘ ν λ, κ°λ°μλ μ΄λ₯Ό μ§μ μμ±νλ λμ , μ€νλ§μ΄ μ΄ λ κ°μ²΄λ₯Ό μ°κ²°(μ£Όμ )ν΄μ€λλ€. μ΄λ κ² νλ©΄ μ½λκ° λ μ μ°νκ³ ν μ€νΈνκΈ° μ¬μμ§λλ€.
2. λΉ(Bean)κ³Ό μ€νλ§ μ»¨ν μ΄λ
μ€νλ§ μ»¨ν μ΄λ: μ€νλ§ μ ν리μΌμ΄μ μ μ€μ¬μ λλ€. μ΄ μ»¨ν μ΄λλ μ ν리μΌμ΄μ μ΄ νμλ‘ νλ λΉμ μμ±νκ³ , μ΄ λΉλ€ κ°μ μμ‘΄μ±μ μ£Όμ νλ©°, μ ν리μΌμ΄μ μ΄ μ€νλ λ λΉμ μ¬μ©ν μ μλλ‘ κ΄λ¦¬ν©λλ€. μ¦, λΉμ΄ μμ±λκ³ μλ©ΈλκΈ°κΉμ§μ μλͺ μ£ΌκΈ°λ₯Ό μ΄ μ€νλ§ μ»¨ν μ΄λκ° κ΄λ¦¬ ν©λλ€. @Autowrired κ°μ μ λν λμ μ μ¬μ©ν΄ λΉμ μ£Όμ λ°μ μ μκ² DIλ μ§μ ν©λλ€.
λΉ(Bean): μ€νλ§μμ λΉμ μ€νλ§ μ»¨ν μ΄λκ° κ΄λ¦¬νλ κ°μ²΄λ₯Ό μλ―Έν©λλ€. μ€νλ§μ μ ν리μΌμ΄μ μ΄ μ€νλ λ νμν κ°μ²΄(λΉ)λ₯Ό μλμΌλ‘ μμ±νκ³ κ΄λ¦¬ν©λλ€. XML νμΌ μ€μ , μ λν μ΄μ μΆκ° λ±μ λ°©λ²λ±μ μ 곡 ν©λλ€.
3. κ΄μ μ§ν₯ νλ‘κ·Έλλ°(AOP)
κ΄μ μ§ν₯ νλ‘κ·Έλλ°(Aspect Oriented Programming): AOPλ μ ν리μΌμ΄μ μ ν΅μ¬ κΈ°λ₯μ μν₯μ μ£Όμ§ μμΌλ©΄μ, λΆκ°μ μΈ κΈ°λ₯(μ: λ‘κΉ , νΈλμμ κ΄λ¦¬)μ μ½κ² μΆκ°ν μ μλ νλ‘κ·Έλλ° ν¨λ¬λ€μμ λλ€. μλ₯Ό λ€μ΄, λͺ¨λ λ©μλ νΈμΆ μ μ λ‘κ·Έλ₯Ό λ¨κΈ°κ³ μΆλ€λ©΄, λͺ¨λ λ©μλλ§λ€ μ½λλ₯Ό μΆκ°ν νμ μμ΄, AOPλ₯Ό μ¬μ©ν΄ μ΄λ¬ν κΈ°λ₯μ μ½κ² μ μ©ν μ μμ΅λλ€.
- μμ: μν μμ€ν μμ λ‘κ·Έ κΈ°λ₯μ΄ νμνλ€κ³ κ°μ ν΄λ΄ μλ€. λͺ¨λ μλΉμ€ λ©μλλ§λ€ λ‘κ·Έλ₯Ό λ¨κΈ°λ μ½λλ₯Ό μμ±νλ λμ , AOPλ₯Ό ν΅ν΄ "λͺ¨λ μλΉμ€ λ©μλ νΈμΆ μ λ‘κ·Έλ₯Ό λ¨κΈ°μ"λ κ·μΉμ λ§λ€ μ μμ΅λλ€. μ΄λ κ² νλ©΄ μ½λμ μ€λ³΅μ νΌνκ³ , μ ν리μΌμ΄μ μ μ μ§λ³΄μκ° ν¨μ¬ μ¬μμ§λλ€.
μ΄μ κ°λ₯ν μΆμν - PSA(Portable Service Abstraction) :
PSAλ μ€νλ§μμ λ€μν κΈ°μ μ€νμ λν μΆμνλ₯Ό μ 곡ν¨μΌλ‘μ¨, νΉμ κΈ°μ μ μ’ μλμ§ μκ³ μ΄μμ±μ΄ λμ μ½λλ₯Ό μμ±ν μ μλλ‘ λλ κ°λ μ μλ―Έν©λλ€. λνμ μΌλ‘ λ°μ΄ν°λ² μ΄μ€, λ©μμ§ μμ€ν , νΈλμμ κ΄λ¦¬ λ±μ μλΉμ€λ€μ΄ μμ΅λλ€. μλ₯Ό λ€μ΄ λ°μ΄ν°λ² μ΄μ€ κ΄λ ¨ μ½λκ° νΉμ DBMS(MySQL, Oracle λ±)μ μ’ μλμ§ μλλ‘, μ€νλ§μ μΆμν κ³μΈ΅μ ν΅ν΄ λ€μν DBMSμμ λμΌν μ½λκ° μλνλλ‘ λμμ£Όλ©° λν WAS λ PAS μμμ€μ νλλΌκ³ λ³Ό μ μμ΅λλ€. WAS λ₯Ό ν°μΊ£μ΄ μλ μΈλν μ°, λ€ν°μ κ°μ λ€λ₯Έκ³³μμ μ€νν΄λ κΈ°μ‘΄ μ½λλ₯Ό κ·Έλλ‘ μ¬μ©ν μ μλ κ°λ μ λλ€.
μ 리 : μ€νλ§ λΆνΈ ν΅μ¬ μ½μ νΈ
λ¬Έμ 1)
μ€νλ§κ³Ό λΉκ΅ν μ€νλ§ λΆνΈμ μ£Όμ νΉμ§ μ€ μ¬λ°λ₯΄μ§ μμ κ²μ κ³ λ₯΄μΈμ.
- μ€νλ§ λΆνΈλ μ€μ μ μ΅μννκ³ μλμΌλ‘ μ€μ μ μ 곡νμ¬ λΉ λ₯΄κ² μ ν리μΌμ΄μ μ κ°λ°ν μ μλλ‘ λλλ€.
- μ€νλ§ λΆνΈλ λ΄μ₯ μΉ μλ²λ₯Ό μ 곡νμ¬ λ³λμ μΉ μλ² μ€μ μμ΄ μ ν리μΌμ΄μ μ μ€νν μ μλ€.
- μ€νλ§ λΆνΈλ μ€νλ§μ κΈ°λ₯μ κΈ°λ°μΌλ‘ νμ§λ§, μ€νλ§κ³Όλ λ³λμ λ 립μ μΈ νλ μμν¬λ‘ λμνλ€.
- μ€νλ§ λΆνΈλ μ€νν° μμ‘΄μ±(Starter Dependency)μ μ 곡νμ¬ νμν κΈ°λ₯μ μ½κ² μΆκ°ν μ μλ€.
λ¬Έμ 2)
μ€νλ§ λΆνΈμ κΈ°λ³Έ λ΄μ₯ WASλ₯Ό κ³ λ₯΄μΈμ μ λ΅
- Tomcat
- Jetty
- Undertow
- Netty
λ¬Έμ 3)
λ€λ₯Έ κ°μ²΄λ₯Ό μ§μ μμ±νκ±°λ μ μ΄νλ κ²μ΄ μλλΌ μΈλΆμμ κ΄λ¦¬νλ κ°μ²΄λ₯Ό κ°μ Έμ μ¬μ©νλ κ°λ μ λλΌκ³ νλμ?
λ¬Έμ 4)
μ€νλ§μμ IoCλ₯Ό ꡬννκΈ° μν΄ μ¬μ©νλ λ°©λ² μ€μ μΈλΆμμ κ°μ²΄λ₯Ό μ£Όμ λ°μ μ¬μ©νλ κ°λ μ λλΌκ³ νλμ?
λ¬Έμ 5)
λ€μ μ΄λ Έν μ΄μ μ€, λΉμΌλ‘ λ±λ‘λμ§ μλ κ²μ?
- @Component
- @Controller
- @Service
- @Repository
- @Value
λ΅: 1-3 ,2-1, 3- μ μ΄μ μμ (IoC), 4- μμ‘΄μ± μ£Όμ (DI), 5-5