[Spring κ°μ] Springμ΄λ?
μ λ°μ΄νΈ:
1. Spring μ΄λ?
Spring μ νΉμ ν νλλ₯Ό λ»νλκ² μλλΌ, μ¬λ¬ κΈ°μ λ€μ λͺ¨μμ΄λΌκ³ λ³Ό μ μλ€. Ex) μ€νλ§ ννμ΄μ§
μ€νλ§ νλ μμν¬, μ€νλ§ λΆνΈλ₯Ό ν¬ν¨νμ¬, νμ€ν λ°μ΄ν°, μ€νλ§ μΈμ , μ€νλ§ μνλ¦¬ν° λ±..μ ν¬ν¨νλ€.
κ°μ₯ ν° ν΅μ¬μ μ€νλ§ νλ μμν¬μ΄κ³ ,μ΄λ₯Ό νΈλ¦¬νκ² μΈ μ μλλ‘ νλκ² μ€νλ§ λΆνΈμ΄λ€.
μμ¦μ μ€νλ§ λΆνΈλ₯Ό μ£Όλ‘ νμ©ν΄μ μ€νλ§ νλ μμν¬λ₯Ό μ¬μ©νλ€κ³ νλ€.
Spring νλ μ μν¬ κΈ°λ₯λ€
- ν΅μ¬ κΈ°μ : μ€νλ§ DI 컨ν μ΄λ, AOP, μ΄λ²€νΈ, κΈ°ν
- μΉκΈ°μ : μ€νλ§ MVC, μ€νλ§ WebFlux
- λ°μ΄ν° μ κ·Ό κΈ°μ : νΈλμμ , JDBC, ORM μ§μ, XML μ§μ
- κΈ°μ ν΅ν©: μΊμ, μ΄λ©μΌ, μ격 μ κ·Ό, μ€μΌμ€λ§
- ν μ€νΈ: μ€νλ§ κΈ°λ° ν μ€νΈ μ§μ
- μΈμ΄: μ½νλ¦°, 그루λΉ
μ€νλ§ λΆνΈλ μΉ μλ²λ₯Ό λ΄μ₯νκ³ μκΈ° λλ¬Έμ λ°λ‘ μΉμλ²λ₯Ό μ€μΉ μμλ λλ μ₯μ μ΄ μλ€.
λν starterκ° μΈλΆ λΌμ΄λΈλ¬λ¦¬λ λ€ μμμ λμ΄μμ£Όλ©° μΈλΆ λΌμ΄λΈλ¬λ¦¬ λ²μ μ΅μ νκ° λμ΄μκ³ , λ©νΈλ¦ λͺ¨λν°λ§λ±μ μ§μν΄μ€λ€λ μ₯μ μ΄ μμ΄μ μ΅κ·Όμ κΈ°λ³ΈμΌλ‘ μ¬μ© λλ€κ³ νλ€.
νμ§λ§, μ€νλ§ λΆνΈλ₯Ό μ¬μ©νλ€λ λ»μ΄ μ€νλ§ λΆνΈμ μ€νλ§ νλ μμν¬μ λ³λλ‘ μ¬μ©νλ€λ λ»μ΄ μλλ€.
μ€νλ§ λΆνΈλ₯Ό λμμ£Όλ νλ‘κ·Έλ¨μ΄λΌκ³ μκ°νλ©΄ λλ€!
κ·Έλ λ€λ©΄ μ€νλ§μ μ λ§λ€μμκΉ?
Springμ μλ° μΈμ΄ κΈ°λ°μ νλ μμν¬λ‘, κ°μ²΄μ§ν₯ μΈμ΄κ° κ°μ§ κ°λ ₯ν νΉμ§μ μ΄λ €λ΄λ νλ μ μν¬μ΄λ€.
μ¦, μ’μ κ°μ²΄ μ§ν₯ μ΄ν리μΌμ΄μ μ κ°λ°ν μ μλλ‘ λμμ£Όλ νλ μμν¬μ΄λ€!
κΈ°μ μ ν΅μ 컨μ μ νμ λ¨μνκ² μμνλ κ²μ΄λ€. μ΄ μ»¨μ μ΄ μ’μΌλ©΄ μ μ μ΄μ΄ λΆμΌλ©΄μ 컀μ§λ κ²μ΄λ€.
Springμ λ‘λ μ‘΄μ¨μ 3λ§μ€μμ μμλμλ€β¨
2. μ’μ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°?
κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°
β κ°μ²΄λ€μ λͺ¨μμΌλ‘ νλ‘κ·Έλ¨μ μ΄ν΄νλ κ². μ¦ κ°μ²΄λ€μ΄ μλ‘ λ©μΈμ§, λ°μ΄ν° λ₯Ό μ£Όκ³ λ°κ³ νλ ₯μ νλ κ²
β μ μ©νκ³ λ³κ²½μ΄ μ©μ΄ν μ₯μ μ΄ μλ€.
β λΆνμ κ°μλΌμ°λ―μ΄ νλ‘κ·Έλλ°μ ν μ μλ€λ κ²@!
λ€νμ±(Polymorphism)
-
μ€μΈκ³μ μλμ°¨λ₯Ό μλ‘ λ€μ΄λ³΄μ.
μ΄μ μμ μλμ°¨κ° μμ λ, μ£ΌμΈμ΄ μλμ°¨λ₯Ό λ°κΎΈλλΌλ μ΄μ μ νλλ° λ¬Έμ κ° μλ€.
μ¬κΈ°μ μλμ°¨λ₯Ό λ°κΎΈλ κ² λ€νμ±μ΄ μλ―Ένλ κ²μ΄λ€.
β μλμ°¨ μν μ μΈν°νμ΄μ€κ° μ ν΄μ Έμκ³ μ΄κ²μ λ°λΌ λ§λ€μκΈ° λλ¬Έμ, ν΄λΌμ΄μΈνΈκ° λ΄λΆ ꡬ쑰λ₯Ό μ νμκ° μκ³ κ°μ²΄κ° μμ μ μν μ νκ³ μλ€λ©΄ λ¬Έμ κ° μλ€.
β μ¦, μν κ³Ό ꡬνμΌλ‘ μΈμμ ꡬλΆνκΈ° λλ¬Έμ, μλ‘μ΄ μλμ°¨κ° λμλ ν΄λΌμ΄μΈνΈλ μ΄μ μ μλ‘ λ°°μ°μ§ μμλ λλ€.
β μλμ°¨μ μΈκ³λ₯Ό 무νν νμ₯ κ°λ₯ν κ²μ΄λ€.
β ν΄λΌμ΄μΈνΈμκ² μν₯μ μ£Όμ§ μκ³ μλ‘μ΄ κΈ°λ₯μ μ 곡 ν μ μλ κ²μ΄λ€!
λ€λ₯Έ μμ ex) κ³΅μ° λ¬΄λ(κ° μ£ΌμΈκ³΅μ΄ μκΈ° μν λ§ μ λλ‘ μννλ©΄ μλλ°©μ΄ λꡬλ λ¬Έμ κ° μλ€.), ν€λ³΄λ, λ§μ°μ€ λ±λ±
-
μν κ³Ό ꡬνμ λΆλ¦¬
-
μΈμμ΄ λ¨μν΄μ§κ³ ,μ μ°ν΄μ§λ©° λ³κ²½λ νΈλ¦¬ν΄μ§λ€.
-
ν΄λΌμ΄μΈνΈλ λμμ μν (μΈν°νμ΄μ€)λ§ μλ©΄ λλ€.
-
ν΄λΌμ΄μΈνΈλ ꡬν λμμ λ΄λΆ ꡬ쑰λ₯Ό λͺ°λΌλ λλ€.
-
ν΄λΌμ΄μΈνΈλ ꡬν λμμ λ΄λΆ κ΅¬μ‘°κ° λ³κ²½λμ΄λ μν₯μ λ°μ§ μλλ€.
-
ν΄λΌμ΄μΈνΈλ ꡬν λμ μ체λ₯Ό λ³κ²½ν΄λ μν₯μ λ°μ§ μλλ€.
-
μ΄κ±Έ μλ°μ μ μ© νλ©΄ μλμ κ°μ΄ μ μκ° κ°λ₯νλ€.
- μν = μΈν°νμ΄μ€
- ꡬν = μΈν°νμ΄μ€λ₯Ό ꡬνν ν΄λμ€, ꡬν κ°μ²΄
νλ‘κ·Έλ¨μ κ°μ²΄μ νλ ₯μ΄λΌλ κ΄κ³λΆν° μκ°ν΄μΌ νλ€.
νΌμ μλ κ°μ²΄λ μκ³ , μ λ§μ κ°μ²΄ ν΄λΌμ΄μΈνΈμ κ°μ²΄ μλ²λ μλ‘ νλ ₯ κ΄κ³λ₯Ό κ°μ§λ€.
ꡬνλ³΄λ€ μΈν°νμ΄μ€κ° λ¨Όμ μ΄κ³ , νλ ₯μ΄λΌλ κ΄κ³μμ μμνλ κ²μ΄ λ€μ©μ±μ λ³Έμ§μ΄λ€!
μ 리νμλ©΄, μν κ³Ό ꡬνμ λΆλ¦¬ νλ κ²μ
μ₯μ
- μ€μΈκ³μ μν μ ꡬνμ΄λΌλ νΈλ¦¬ν 컨μ μ λ€νμ±μ ν΅ν΄ κ°μ²΄ μΈμμΌλ‘ κ°μ Έμ¬ μ μμ
- μ μ°νκ³ , λ³κ²½μ΄ μ©μ΄
- νμ₯ κ°λ₯ν μ€κ³
- ν΄λΌμ΄μΈνΈμ μν₯μ μ£Όμ§ μλ λ³κ²½μ΄ κ°λ₯
- μΈν°νμ΄μ€λ₯Ό μμ μ μΌλ‘ μ μ€κ³νλ κ²μ΄ μ€μ!
νκ³
- μν (μΈν°νμ΄μ€)μμ²΄κ° λ³νλ©΄, ν΄λ¦¬μμΈνΈ, μλ² λͺ¨λμ ν° λ³κ²½μ΄ λ°μ
μΈν°νμ΄μ€λ₯Ό μ λλ‘ μ€κ³ νλκ² κ°μ₯ μ€μνλ€.
μ΄νμ κ°μ₯ ν¬κ² λ³νμ§ μκ³ κΈ°λ₯ μ λ°μ΄νΈ λ° μΆκ° κ°λ₯νκΈ° λλ¬Έμ΄λ€.
κ°μ²΄ μ§ν₯μ κ½μ λ€νμ±μ΄κ³ , μ€νλ§μ μ΄λ₯Ό κ·Ήλν ν μ μλλ‘ λμμ£Όλ κ²μ΄λ€.
3. μ’μ κ°μ μ§ν₯ μ€κ³μ 5κ°μ§ μμΉ(SOLID)
SOLD : ν΄λ¦° μ½λλ‘ μ λͺ ν λ‘λ²νΈ λ§ν΄μ΄ μ’μ κ°μ²΄ μ§ν₯ μ€κ³μ 5κ°μ§ μμΉμ μ 리
-
SRP: λ¨μΌ μ± μ μμΉ(single responsibility principle)
-
OCP: κ°λ°©-νμ μμΉ (Open/closed principle)
-
LSP: 리μ€μ½ν μΉν μμΉ (Liskov substitution principle)
-
ISP: μΈν°νμ΄μ€ λΆλ¦¬ μμΉ (Interface segregation principle)
-
DIP: μμ‘΄κ΄κ³ μμ μμΉ (Dependency inversion principle)
*μκΈμλ₯Ό λ°μ λ§λ¬
π SRP: λ¨μΌ μ± μ μμΉ
-
ν ν΄λμ€λ νλμ μ± μλ§ κ°μ ΈμΌ νλ€. (λ¬Έλ§₯κ³Ό μν©μ λ°λΌ λ€λ₯΄λ€)
-
μ€μν κΈ°μ€μ λ³κ²½μ΄λ€. λ³κ²½μ΄ μμ λ νκΈ ν¨κ³Όκ° μ μΌλ©΄ λ¨μΌ μ± μ μμΉμ μ λ°λ₯Έ κ²
β κΈ°λ₯μ΄ μ λ°μ΄νΈ, μΆκ° λ λ μΌλ§λ λ³κ²½μ΄ μ κ² νμνμ§κ° μ€μ ν¬μΈνΈ
-
Ex) UI λ³κ²½, κ°μ²΄μ μμ±κ³Ό μ¬μ©μ λΆλ¦¬ β μ μ νκ² μ‘°μ νλκ² λ¬λ―Έμ΄λ€.
π OCP: κ°λ°©-νμ μμΉ βοΈμ€μ
-
μννΈμ¨μ΄ μμλ νμ₯μ μ΄λ € μμ§λ§ λ³κ²½μλ λ«ν μμ΄μΌ νλ€.
-
ꡬν κ°μ²΄λ₯Ό λ³κ²½νλ €λ©΄ ν΄λΌμ΄μΈνΈμ μ½λλ₯Ό λ³κ²½ν΄μΌ νλ κ²½μ°κ° μκΈ΄λ€.
μ΄λ΄λλ λ€νμ±μ νμ©ν΄μΌ νλ€! β κ°μ²΄λ₯Ό μμ±νκ³ μ°κ΄κ΄κ³λ₯Ό λ§Ίμ΄μ£Όλ λ³λμ 쑰립, μ€μ μκ° νμνλ€.
π LSP: 리μ€μ½ν μΉν μμΉ
-
κ°λ¨ν λ§νμλ©΄, μ΄λ€ μΈν°νμ΄μ€κ° μκ³ κ΅¬νμ²΄κ° μλ€λ©΄ μΈν°νμ΄μ€μ μλμ κ°μ΄ λ§λ€μ΄μΌ νλ€.
μ¦, κΈ°λ₯μ μΌλ‘ 보μ₯μ ν΄μΌ νλ κ²μ΄λ€.
β μλμ°¨μ μμ μ λ°μΌλ©΄ λ€λ‘ κ°λκ² μλλΌ μμΌλ‘ κ°μΌνλ€. λ리λλΌλ μμΌλ‘ κ°λκ² λ§λ κ²!
π ISP: μΈν°νμ΄μ€ λΆλ¦¬ μμΉ
-
κ°λ¨ν λ§νμλ©΄ μΈν°νμ΄μ€λ₯Ό μκ² λλλ κ²μ΄λΌ λ³Ό μ μλ€.
μλμ°¨ μΈν°νμ΄μ€ β μ΄μ μΈν°νμ΄μ€, μ λΉ μΈν°νμ΄μ€λ‘ λΆλ¦¬
μλμ°¨κ° μΈν°νμ΄μ€ νλκ° λ무 ν¬λκΉ μ΄μ μ΄λ μ λΉλ‘ λ°λ‘ λλλ κ²μ΄λ€.
κ·ΈλΌ μ¬μ©μ μΈν°νμ΄μ€λ λλ μ μλ€!
μΈν°νμ΄μ€κ° λͺ νν΄μ§κ³ λ체 κ°λ₯μ±μ΄ λμμ§λ€.
π DIP: μμ‘΄κ΄κ³ μμ μμΉ βοΈμ€μ
- μ½κ² λ§νλ©΄ ν΄λΌμ΄μΈνΈ μ½λκ° κ΅¬ν ν΄λμ€λ₯Ό λ°λΌλ³΄μ§ λ§κ³ μΈν°νμ΄μ€λ§ λ°λΌλ³΄μλΌλ κ²μ΄λ€.
- μν κ³Ό ꡬνμ μ² μ νκ² λΆλ¦¬ν΄μ μμ€ν μ μΈμ κ° κ°μ λΌμΈ μ μλλ‘ λ§λλ κ²μ΄λ€.
- μν (Role)μ μμ‘΄ν΄μΌ νλ€. ν΄λΌμ΄μΈνΈκ° μΈν°νμ΄μ€μ μμ‘΄ν΄μΌ νλ€.
μ¬κΈ°κΉμ§ μ 리,
- κ°μ²΄ μ§ν₯μ ν΅μ¬μ λ€νμ±
- λ€νμ± λ§μΌλ‘λ μ½κ² λΆνμ κ°μ λΌμ°λ―μ΄ κ°λ°ν μ μλ€.
- λ€νμ± λ§μΌλ‘λ ꡬν κ°μ²΄λ₯Ό λ³κ²½ν λ ν΄λΌμ΄μΈνΈ μ½λλ ν¨κ» λ³κ²½λλ€.
- λ€νμ± λ§μΌλ‘λ OCP, DIPλ₯Ό μ§ν¬ μ μλ€.
κ·Έλ λ€λ©΄ μ΄λ»κ² ν΄μΌνλκ°?
4. κ°μ²΄ μ§ν₯ μ€κ³μ μ€νλ§
μ€νλ§μ΄μΌκΈ°μ μ κ°μ²΄ μ§ν₯ μ΄μΌκΈ°κ° λμ€λκ°?
- μ€νλ§μ λ€μ κΈ°μ λ‘ λ€νμ± + OCP, DIPλ₯Ό κ°λ₯νκ² μ§μ
- DI(Dependency Injection): μμ‘΄κ΄κ³, μμ‘΄μ± μ£Όμ
- DI 컨ν μ΄λ μ 곡
- ν΄λΌμ΄μΈνΈ μ½λμ λ³κ²½ μμ΄ κΈ°λ₯ νμ₯
- μ½κ² λΆνμ κ΅μ²΄νλ―μ΄ κ°λ°
κ·Έλ κΈ° λλ¬Έμ μ€νλ§μ μ¬μ© νλ κ²μ΄λ€!
5. μ΅μ’ μ 리
- λͺ¨λ μ€κ³μ μν κ³Ό ꡬνμ λΆλ¦¬νμ.
- μλμ°¨, 곡μ°μ μλ₯Ό λ μ¬λ €λ³΄μ.
- μ ν리μΌμ΄μ μ€κ³λ 곡μ°μ μ€κ³ νλ―μ΄ λ°°μλ§ λ§λ€μ΄λκ³ , λ°°μ°λ μΈμ λ μ§ μ μ°νκ² λ³κ²½ν μ μλλ‘ λ§λλ κ²μ΄ μ’μ κ°μ²΄ μ§ν₯ μ€κ³λ€.
- μ΄μμ μΌλ‘λ λͺ¨λ μ€κ³μ μΈν°νμ΄μ€λ₯Ό λΆμ¬νμ
- λ³κ²½μ λ²μκ° μκ³ μ μ°ν΄μ§λ€.
νμ§λ§, μΈν°νμ΄μ€λ₯Ό λμ νλ©΄ μΆμν λΉμ©μ΄ λ°μνλ€.
μΆμνκ° λλ©΄ κ°λ°μκ° νλ² λ μ½λλ₯Ό μ΄μ΄μ ꡬν μΌμ΄μ€κ° 무μμΈμ§ νλ² λ λ΄μΌ νλ€.
μ¦, μ₯μ μ΄ λ¨μ μ΄ λμ΄λ λ μ μ©νλ κ² μ’λ€.
(νμ₯ κ°λ₯μ±μ΄ μμΌλ©΄ μΈν°νμ΄μ€λ₯Ό μμ΄ κ·Έλλ‘ μ°κ³ , λμ€μ 리ν©ν λ§μ νλ κ²λ νλμ λ°©λ²μ΄λ€.)
πΏ μΈνλ° μ€νλ§ ν΅μ¬ μ리 κΈ°λ³ΈνΈ: κΉμν λμ κ°μλ₯Ό λ£κ³ μ 리ν λ΄μ©μ λλ€.