λ°μ΄ν°λ² μ΄μ€ μ£Όλ μ€κ³λ₯Ό νΌνκΈ° μν΄ μμμ± κ³μΈ΅μ μ± κ³μΈ΅μ νλ¬κ·ΈμΈμΌλ‘ λ§λ€μ΄λ³΄μ.
- μ±μ μμμ± κΈ°λ₯ μ¬μ©νκΈ° μν΄ ν¬νΈ νΈμΆ. μ΄ ν¬νΈλ μμμ± μ΄λν°μ μν΄ κ΅¬ν.(DIP)
- μ‘κ°ν μν€ν μ²μμ μμμ± μ΄λν°λ μ±μμ νΈμΆνκΈ° λλ¬Έμ μμκ³ μ μ΄λν°
- ν¬νΈλ μ±κ³Ό μμμ± μ¬μ΄μ κ°μ μ κ³μΈ΅
- μμμ± λ¬Έμ μ μ κ²½μ°μ§ μκ³ λλ©μΈ μ½λ κ°λ°
- μμμ± κ³μΈ΅μ μ½λ μμ‘΄μ±μ μμ€λ€
- μμμ± μ½λλ₯Ό λ³κ²½νλλΌλ μ½μ΄ μ½λμ μν₯μ΄ μλ€
- DIPλ‘ μΈν΄ μ μ μΈ μν©μμλ μμ‘΄μ±μ΄ μμ λμμ§λ§ λμ μΈ νμμλ μ¬μ ν μ±μ΄ μμμ± μ½λμ μμ‘΄νκ³ μλ€. νμ§λ§ μΈν°νμ΄μ€ κ³μ½μ λ§μ‘±νλ ν μμμ± μ½λ μμ μ λ¬Έμ κ° μλ€.
μμμ± μ΄λν°κ° μΌλ°μ μΌλ‘ νλ μΌ.
- μ
λ ₯μ λ°λλ€
- μ λ ₯ λͺ¨λΈμ μΈν°νμ΄μ€μ λλ©μΈ μν°ν°λ νΉμ λ°μ΄ν°λ² μ΄μ€ μ°μ° μ μ© κ°μ²΄
- μ
λ ₯μ λ°μ΄ν°λ² μ΄μ€ ν¬λ§·μΌλ‘ 맀ννλ€
- JPAμΈ κ²½μ° JPA μν°ν° κ°μ²΄λ‘ 맀ν
- λ§₯λ½μ λ°λΌ 맀νμ΄ νμνμ§ μλ κ²½μ°λ μμ -> 8μ₯
- JPAκ° μλ μ΄λ€ κΈ°μ λ μκ΄μμ
-
ν΅μ¬μ μμμ± μ΄λν°μ μ λ ₯ λͺ¨λΈμ΄ μ΄λν°κ° μλ μ½μ΄μ μ‘΄μ¬. μ΄λ‘μΈν΄ μ΄λν° λ³κ²½μ΄ μ½μ΄μ μν₯μ μ£Όμ§ μλλ€
- μ λ ₯μ λ°μ΄ν°λ² μ΄μ€λ‘ 보λΈλ€
- λ°μ΄ν°λ² μ΄μ€ μΆλ ₯μ μ ν리μΌμ΄μ
ν¬λ§·μΌλ‘ 맀ννλ€
μΆλ ₯ λͺ¨λΈλ μ½μ΄μ μμΉ
- μΆλ ₯μ λ°ννλ€
κ·Έλ λ€λ©΄ μμμ±μ λ΄λΉνλ ν¬νΈ μΈν°νμ΄μ€λ₯Ό μ΄λ»κ² λλ μΌ ν κΉ?
- μ κ·Έλ¦Όμ²λΌ νλμ 리ν¬μ§ν°λ¦¬ μΈν°νμ΄μ€μ λ΄μ λλκ² μΌλ°μ μ΄λ€.
- νμ§λ§ μ΄λ΄κ²½μ° 'λμ' ν¬νΈ μΈν°νμ΄μ€ λ¬Έμ μ μ κ°κ² λλ€(SRP μλ°°)
- μ΄λ‘ μΈν΄ λΆνμν μμ‘΄μ΄ μκΈ°κ³
- ν
μ€νΈλ₯Ό μ΄λ ΅κ² νλ€
- μ κ·Έλ¦Όμμ RegisterAccountServiceλ₯Ό ν μ€νΈ νλ€λ©΄ AccountRepository λͺ¨νΉμ ν΄μΌν λ μ΄λ€ λ©μλλ₯Ό λͺ¨νΉν΄μΌ νλμ§ μΌμΌμ΄ μ°Ύμλ΄μΌνλ€.
- λν, λ€μμ μ΄ ν μ€νΈμ μμ νλ μ¬λμ μΈν°νμ΄μ€ μ μ²΄κ° λͺ¨νΉ λμλ€κ³ μ€ν΄λ₯Ό ν μλ μλ€.
- ISP(Interface Segregation Principle μΈν°νμ΄μ€ λΆλ¦¬ μμΉ)μ μ μ©ν΄μΌνλ€.
- ν¬νΈμ μ΄λ¦μ΄ ꡬ체μ μ΄κ³ μν μ μ νννλ€
- ν μ€νΈ μ λͺ¨νΉμ λμμ΄ μ’μμ§κ³ λͺ νν΄μ§λ€
- μ’μ ν¬νΈλ μ½λ©μ νλ¬κ·Έ μ€ νλ μ΄κ° κ°λ₯νκ² νλ€
μ§κΈκΉμ§ μ΄λν° νλλ‘ ν΄κ²°νμΌλ μ΄μ λλ 보μ.
- μμμ± μ°μ°μ΄ νμν λλ©μΈ ν΄λμ€(μ 그리거νΈ) λΉ νλμ μ΄λν° κ΅¬ν
- λλ©μΈ κ²½κ³λ₯Ό λ°λΌ μμ°μ€λ½κ² λλμ΄μ§λ€
- λ¬Όλ‘ μ΄λν°λ₯Ό νμμ λ°λΌ ν¨μ¬ λ μͺΌκ°€ μλ μλ€. μ) JPA μΈμ SQLμ λ°λ‘ μ°κΈ° μν ν¬νΈλ₯Ό ꡬννλ κ²½μ° λ±
- μ΄λ μ¬λ¬ κ°μ λ°μ΄λλ 컨ν μ€νΈμ μμμ± μꡬμ¬νμ λΆλ¦¬νκΈ° μν μ’μ ν λ
- κ° λ°μ΄λλ 컨ν μ€νΈλ μμμ± μ΄λν°λ₯Ό λ°λ‘ κ°μ§κ³ μκ³
- λ°μ΄λλ 컨ν μ€νΈλ μλ‘ λΆλ¦¬λμ΄ μμ‘΄μ±μ΄ μλ€
- λ§μ½ μλ‘ μ κ·Όν νμκ° μλ€λ©΄ μμμ± μ΄λν°μ λ°λ‘ μ κ·Όνμ§ μκ³ μΈμ»€λ° ν¬νΈλ₯Ό ν΅ν΄μ μ κ·Όνκ² λλ€
- λΆλ³μ±
- μ ν¨ν μνμ Account μν°ν°λ§ μμ±νλλ‘ ν©ν 리 λ©μλ μ 곡
- μμμ± μ΄λν°λ₯Ό μν Account μν°ν° λ°λ‘ μ μ
- μμμ± μ΄λν°μμ μ¬μ©ν Activity μν°ν° μ μ
- JPAμ @ManyToOne μ΄λ @OneToMany λ λΆμν¨κ³Όμ λΉν΄ μμ§ ν¬κ² νμνμ§ μλ€ νλ¨λμ΄ μ¬μ©μν¨
- JPAλ μ’μ λꡬμ΄λ κ·Έμ λΉν΄ λ§μ λ¬Έμ κ° μμ μ μλ€
- ActivityRepositoryλ μ€νλ§μ μν΄μ μλμΌλ‘ ꡬνμ²΄κ° μμ±λλ€
- μ€μ μμμ± μ΄λν°
- LoadAccountPort / UpdateAccountStatePort λ κ°μ ν¬νΈλ₯Ό ꡬννλ€
- Accountλ₯Ό λλΉμμ λΆλ¬μ€κ³
- λ² μ΄μ€ λ μ§ μ΄ν Activityλ₯΄ κ°μ Έμ€κ³
- λ² μ΄μ€ μκ³ λ₯Ό ꡬνκΈ° μν΄ λ² μ΄μ€ λ μ§ μ κΉμ§μ μ κΈ / μΆκΈ νλμ λλΉμμ κ°μ Έμμ
- Account Entityλ‘ λ³κ²½μ λ² μ΄μ€ μκ³ λ₯Ό κ³μ°νλ€
- λλ©μΈ μν°ν°μ μμμ± μν°ν° κ°μ μμΌλ‘ μ‘΄μ¬νλ€. κ΅³μ΄ μ΄λμΌ νλ?
- μμΌλ‘ μν°ν°λ₯Ό λ§λ€μ§ μκ³ '맀ννμ§ μκΈ°' μ λ΅μ΄ μ ν¨ν μλ μλ€
- νμ§λ§ μ΄λ° κ²½μ° JPAλ₯Ό μν΄μ λλ©μΈ λͺ¨λΈμ ννν μ λ°μ μλ€(κΈ°λ³Έ μμ±μλΌλ κ°...)
- μ¦, μμμ± μΈ‘λ©΄μ νννμ§ μμ λ μ’ λ νλΆν λλ©μΈ λͺ¨λΈμ μμ±ν μ μλ€.
νΈλμμ μ μμμ μ΄λμ μμΉν΄μΌ ν κΉ?
- νΈλμμ μ νΉμ μ μ€μΌμ΄μ€μ λν΄μ λͺ¨λ μ°κΈ° μμ μ κ±Έμ³ μμ΄μΌνλ€. νλλΌλ μ€ν¨νλ©΄ λ€ κ°μ΄ λ‘€λ°±λμ΄μΌ νκΈ° λλ¬Έ
- μ΄λν° κ°μ κ²½μ° μ΄λ€ μ μ€μΌμ΄μ€μ ν¬ν¨λλμ§ μμ§ λͺ»νκΈ°λλ¬Έμ νλ½
-
νΈλμμ μ μμμ μλΉμ€
- μ€νλ§μμ κ°μ₯ μ¬μ΄ λ°©λ²μ μμ κ°μ΄ μλΉμ€ ν΄λμ€μ λΆμ¬μ λͺ¨λ public λ©μλλ₯Ό νΈλμμ μΌλ‘ κ°μΈλ κ²μ΄λ€
- @Transaction μΌλ‘ μ€μΌμν€κΈ° μ«λ€λ©΄ μλΉμ ν΅νμ¬ ν΄κ²° ν μλ μλ€
- λλ©μΈ μ½λμ νλ‘κ·ΈμΈμ²λΌ λμνλ μμμ± μ΄λν°λ λλ©μΈμ΄ μμμ±μ λΆλ¦¬λμ΄ νλΆν λλ©μΈ λͺ¨λΈμ΄ κ°λ₯νλ€
- μ’μ ν¬νΈ μΈν°νμ΄μ€λ ν¬νΈλ§λ€ λ€λ₯Έ λ°©μμΌλ‘ ꡬν κ°λ₯νκΈ° λλ¬Έμ μ μ°νλ€
- ν¬νΈμ μΈν°νμ΄μ€λ§ μ§ν¨λ€λ©΄ μμμ± κΈ°μ μ νμ μμ λ‘μμ§λ€.