λ°±μλ/πΏ Spring
μ€νλ§ ν΅μ¬ μ리 - κΈ°λ³ΈνΈ [Section 1. κ°μ²΄ μ§ν₯ μ€κ³μ μ€νλ§]
Damgome
2023. 11. 20. 18:54
μ€νλ§ μμ¬
- κ°λ°μ λ‘λ μ‘΄μ¨ → EJB μ λ¬Έμ μ μ§μ , μ± μΆν
- μ κ² ν λ¬, μ μΉ΄λ‘νκ° λ‘λ μ‘΄μ¨μκ² μ€νμμ€ νλ‘μ νΈ μ μ
μ€νλ§μ΄λ?
μ€νλ§ μνκ³
- νμ
- μ€νλ§ νλ μμν¬, μ€νλ§ λΆνΈ
- μ ν
- μ€νλ§ λ°μ΄ν°, μ€νλ§ μΈμ , μ€νλ§ μν리ν°, μ€νλ§ Rest Docs, μ€νλ§ λ°°μΉ, μ€νλ§ ν΄λΌμ°λ
μ€νλ§ νλ μμν¬
- ν΅μ¬ κΈ°μ : μ€νλ§ DI 컨ν μ΄λ, AOP, μ΄λ²€νΈ, κΈ°ν
μ€νλ§ λΆνΈ
- μ€νλ§μ νΈλ¦¬νκ² μ¬μ©ν μ μκ² μ§μ
- ν°μΊ£ κ°μ μΉ μλ² λ΄μ₯ → λ³λμ μΉ μλ² μ€μΉ λΆνμ
- λ²μ μ μ§μ ν΄μ λ€μ΄λ‘λ νκ² ν΄μ€
- λ©νΈλ¦/μν νμΈ/μΈλΆ κ΅¬μ± κ°μ νλ‘λμ μ€λΉ κΈ°λ₯ μ 곡
- μ€νλ§κ³Ό λ³λλ‘ μ¬μ©ν μ μλ κ² μλ
μ€νλ§μ΄λΌλ λ¨μ΄
- λ¬Έλ§₯μ λ°λΌ!
- μ€νλ§ DI 컨ν μ΄λ κΈ°μ
- μ€νλ§ νλ μμν¬
- μ€νλ§ λΆνΈ, μ€νλ§ νλ μμν¬ λ± ν¬ν¨ μ€νλ§ μνκ³
μ€νλ§ μ λ§λ€μλ?
μ€νλ§μ ν΅μ¬ κ°λ
- μλ° μΈμ΄ κΈ°λ° νλ μμν¬
- μλ° → κ°μ²΄ μ§ν₯ μΈμ΄
- κ°μ²΄ μ§ν₯ μΈμ΄κ° κ°μ§ κ°λ ₯ν νΉμ§ μ΄λ €λ΄λ νλ μμν¬
- μ’μ κ°μ²΄ μ§ν₯ μ ν리μΌμ΄μ κ°λ°μ λμμ£Όλ νλ μμν¬
μ’μ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ΄λ?
κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°?
- κ°μ²΄λ€μ λͺ¨μ
- κ°μ²΄λ€μ μλ‘ λ©μμ§λ₯Ό μ£Όκ³ λ°μ μ μμ
- μ μ°, λ³κ²½μ΄ μ©μ΄
μ μ°, λ³κ²½μ΄ μ©μ΄?
→ κ°μ²΄ μ§ν₯μ ν΅μ¬ : λ€νμ±
λ€νμ±μ μ€μΈκ³ λΉμ
- μ€μΈκ³μ κ°μ²΄ μ§ν₯μ 1:1λ‘ λ§€μΉ
(μμ1)
μλμ°¨κ° λ°λμ΄λ μ΄μ μλ μ΄μ ν μ μμ
→ ν μ¬λΌλ₯Ό μ°λ€κ³ ν΄μ λ€λ₯Έ μ΄μ λ©΄νλ₯Ό λ°μΌνλ κ² μλ
μ΄μ μλ μλμ°¨ μν (μΈν°νμ΄μ€)μλ§ μμ‘΄
λ€λ₯Έ λμμΌλ‘ λ³ν κ°λ₯. κΈ°μ‘΄μ μλμ°¨ μν κ·Έλλ‘ λ°λΌκ° μ μμ
μλμ°¨λ₯Ό 무ν νμ₯ κ°λ₯
→ μλ‘μ΄ μλμ°¨κ° λμλ, ν΄λΌμ΄μΈνΈλ μλ‘μ΄ κ±Έ λ°°μ°μ§ μμλ λ¨
(μμ2)
λ‘λ―Έμ€ μν : μ₯λ건, μλΉ λ± λ¨μ λ°°μ°
μ€λ¦¬μ£ μν : κΉνν¬, μ‘νκ΅ λ±μ μ¬μ λ°°μ° λͺ¨λ κ°λ₯!
→ μ€λ¦¬μ£μ ꡬνμ΄ λ°λλ€κ³ ν΄μ λ‘λ―Έμ€μκ² μν₯ λ―ΈμΉμ§ μμ
μν κ³Ό ꡬνμ λΆλ¦¬
- μν κ³Ό ꡬνμΌλ‘ ꡬλΆνλ©΄ μΈμμ΄ λ¨μν΄μ§κ³ , μ μ°ν΄μ§. λ³κ²½λ νΈλ¦¬ν΄μ§
- μ₯μ
- ν΄λΌμ΄μΈνΈλ λμμ μν (μΈν°νμ΄μ€)λ§ μλ©΄ λ¨
- ν΄λΌμ΄μΈνΈλ ꡬν λμμ λ΄λΆ ꡬ쑰λ₯Ό λͺ°λΌλ λ¨
- ν΄λΌμ΄μΈνΈλ ꡬν λμμ λ΄λΆ κ΅¬μ‘°κ° λ³κ²½λμ΄λ μν₯ λ°μ§ X
- ν΄λΌμ΄μΈνΈλ ꡬν λμ μ체λ₯Ό λ³κ²½ν΄λ μν₯μ λ°μ§ μμ
in μλ° μΈμ΄
→ μλ° μΈμ΄μ λ€νμ±μ νμ©!
- μν μ μΈν°νμ΄μ€
- ꡬνμ μΈν°νμ΄μ€λ₯Ό ꡬννλ κ°μ²΄. (ꡬν κ°μ²΄)
- κ°μ²΄ μ€κ³ν λ μν /ꡬν λͺ νν λΆλ¦¬!
- κ°μ²΄ μ€κ³μ μν λ¨Όμ λΆμ¬, κ·Έ μν μννλ ꡬν κ°μ²΄ λ§λ€μ
κ°μ²΄μ νλ ₯μ΄λΌλ κ΄κ³λΆν° μκ°
- νΌμ μλ κ°μ²΄λ μμ
- ν΄λΌμ΄μΈνΈ : μμ²
- μλ² : μλ΅
- μ λ§μ κ°μ²΄ ν΄λΌμ΄μΈνΈμ κ°μ²΄ μλ²λ μλ‘ νλ ₯ κ΄κ³
ν΄λΌμ΄μΈνΈ → MemberRepository μ μμ‘΄ (μμ‘΄ : μκ³ μλ€λ λ»μ)
λ€νμ±μ λ³Έμ§
- μΈν°νμ΄μ€λ₯Ό ꡬνν κ°μ²΄ μΈμ€ν΄μ€λ₯Ό μ€ν μμ μ μ μ°νκ² λ³κ²½ κ°λ₯
- ν΄λΌμ΄μΈνΈλ₯Ό λ³κ²½νμ§ μκ³ , μλ²μ ꡬν κΈ°λ₯μ μ μ°νκ² λ³κ²½ν μ μμ
μΈν°νμ΄μ€λ₯Ό μμ μ μΌλ‘ μ€κ³νλ κ²μ΄ κ°μ₯ μ€μν¨
μ€νλ§κ³Ό κ°μ²΄ μ§ν₯
- λ€νμ±μ΄ κ°μ₯ μ€μ
- μ€νλ§μ λ€νμ±μ κ·Ήλνν΄ μ΄μ©ν μ μκ² λμμ€
- μ μ΄μ μμ , μμ‘΄κ΄κ³ μ£Όμ → λ€νμ± νμ©, μν κ³Ό ꡬν νΈλ¦¬νκ² λ€λ£° μ μλλ‘ μ§μν¨
μ’μ κ°μ²΄ μ§ν₯ μ€κ³μ 5κ°μ§ μμΉ(SOLID)
SRP (λ¨μΌ μ± μ μμΉ)
νλμ ν΄λμ€λ νλμ μ± μλ§ κ°μ§μ.
- νλμ μ±
μμ΄ λμ ? λͺ¨νΈνμλμ¬!
- ν΄ μλ μκ³ μμ μλ μκ³ ..
- λ¬Έλ§₯/μν©μ λ°λΌ λ€λ¦
- μ€μν κΈ°μ€μ λ³κ²½! → λ³κ²½ μμ λ νκΈ ν¨κ³Όκ° μ μΌλ©΄ λ¨μΌ μ± μ μμΉμ μ λ°λ₯Έ κ²μ
OCP (κ°λ°©-νμ μμΉ)****
μννΈμ¨μ΄ μμλ νμ₯μλ μ΄λ € μμΌλ, λ³κ²½μλ λ«ν μμ΄μΌ ν¨!
(λ¨Έμ λ§μΈλ°?)
- λ€νμ±μ νμ©ν΄λ³΄μ
- κ·ΈλκΉ μλμ°¨-μ΄μ μμ κ°λ μμ
- μΈν°νμ΄μ€λ₯Ό νλ λ λ§λλ κ±°λ κΈ°μ‘΄ μ½λλ₯Ό λ³κ²½νλ κ² μλ(νμ₯)
- λ¬Έμ μ
- ꡬν κ°μ²΄λ₯Ό λ³κ²½νλ €λ©΄ ν΄λΌμ΄μΈνΈ μ½λλ₯Ό λ³κ²½ν΄μΌ ν¨..
- λΆλͺ λ€νμ± μ¬μ©νλλ°λ OCP μ§ν¬ μ μκ² λ¨
- κ°μ²΄ μμ±/μ°κ΄κ΄κ³ λ§Ίμ΄μ£Όλ λ³λμ 쑰립, μ€μ μκ° νμ!
LSP (리μ€μ½ν μΉν μμΉ)
νλ‘κ·Έλ¨μ κ°μ²΄λ νλ‘κ·Έλ¨μ μ νμ±μ κΉ¨μ§ μμΌλ©΄μ νμ νμ μ μΈμ€ν΄μ€λ‘ λ°κΏ μ μμ΄μΌ ν¨!
ISP (μΈν°νμ΄μ€ λΆλ¦¬ μμΉ)
- νΉμ ν΄λΌμ΄μΈνΈ μν μΈν°νμ΄μ€ μ¬λ¬ κ°κ° λ²μ© μΈν°νμ΄μ€ νλλ³΄λ€ λ«λ€
DIP (μμ‘΄κ΄κ³ μμ μμΉ)****
- νλ‘κ·Έλλ¨Έλ μΆμνμ μμ‘΄ν΄μΌμ§, ꡬ체νμ μμ‘΄νλ©΄ μ λ¨
- μ¦, ꡬν ν΄λμ€λ³΄λ€ μΈν°νμ΄μ€μ μμ‘΄νλΌλ λ»
- DIP μλ°
- OCPμμ μ€λͺ ν MemberServiceλ μΈν°νμ΄μ€μ μμ‘΄νμ§λ§ ꡬν ν΄λμ€λ λμμ μμ‘΄ν¨
- MemberService ν΄λΌμ΄μΈνΈκ° ꡬν ν΄λμ€λ₯Ό μ§μ μ ν
MemberRepository m = new MemoryMemberRepository();
κ°μ²΄ μ§ν₯ μ€κ³μ μ€νλ§
- μ€νλ§μ λ€μ κΈ°μ λ‘ λ€νμ± + OCP, DIP κ°λ₯νκ² μ§μν΄μ£Όλ κΈ°μ
- DI : μμ‘΄κ΄κ³/μμ‘΄μ± μ£Όμ
- DI 컨ν μ΄λ μ 곡
- ν΄λΌμ΄μΈνΈ μ½λ λ³κ²½ μμ΄ κΈ°λ₯ νμ₯
μ 리
- λͺ¨λ μ€κ³μ μν κ³Ό ꡬνμ λΆλ¦¬νμ
- μ΄μμ → λͺ¨λ μ€κ³μ μΈν°νμ΄μ€λ₯Ό λΆμ¬νμ