CH 6. μμμ± μ΄λν°
ꡬννκΈ°
1. μμ‘΄μ± μμ

- μλΉμ€κ° μμμ± κΈ°λ₯μ μ¬μ©νκΈ° μν΄ ν¬νΈ μΈν°νμ΄μ€λ₯Ό νΈμΆ
- μ‘κ°ν μν€ν
μ²μμ μμμ± μ΄λν°λ μ£Όλ‘ μμκ³ μ μ΄λν°
=> μ±μμ νΈμΆνκΈ° λλ¬Έ, λ°λμ κ²½μ°λ μλ€. - ν¬νΈλ μ±κ³Ό μμμ± μ¬μ΄μ κ°μ μ κ³μΈ΅
- μμμ± λ¬Έμ μ μ κ²½μ°μ§ μκ³ λλ©μΈ μ½λ κ°λ° λͺ©μ
- μμμ± κ³μΈ΅μ μ½λ μμ‘΄μ±μ μμ°
- μ΄λ΄ κ²½μ°, μμμ± μ½λλ₯Ό λ³κ²½νλλΌλ μ½μ΄ μ½λμ μν₯μ΄ μμ
- λ°νμμλ μ¬μ ν μ±μ΄ μμμ± μ½λμ μμ‘΄νκ³ μλ€.
- μΈν°νμ΄μ€ κ³μ½μ λ§μ‘±νλ ν μμμ± μ½λ μμ μ λ¬Έμ κ° μλ€.
2. μμμ± μ΄λν°μ μ± μ
- μ
λ ₯μ λ°λλ€.
- μ£Όλ‘ λλ©μΈ μν°ν°, DB μ°μ° μ μ© κ°μ²΄
- μ
λ ₯μ λ°μ΄ν°λ² μ΄μ€ ν¬λ§·μΌλ‘ λ§€ννλ€.
- JPA Entity κ°μ²΄ λ§€ν
- JPAλ₯Ό μ μΈν κΈ°μ λ κ³ λ €
- μμμ± μ΄λν°μ μ λ ₯ λͺ¨λΈμ μ ν리μΌμ΄μ μ½μ΄μ μμΌλ―λ‘, μμμ± μ΄λν°μ λ³κ²½μ μλ¬΄λ° μν₯μ κ°νμ§ μλλ€.
- μ λ ₯μ λ°μ΄ν°λ² μ΄μ€λ‘ 보λΈλ€.
- λ°μ΄ν°λ² μ΄μ€ μΆλ ₯μ μ ν리μΌμ΄μ
ν¬λ§·μΌλ‘ λ§€ννλ€.
- μΆλ ₯ λͺ¨λΈ λν μ½μ΄μ μμΉνλ€.
- μΆλ ₯μ λ°ννλ€.
3. ν¬νΈ μΈν°νμ΄μ€ λλκΈ°

- νλμ Repositoryμ λͺ¨λ λ°μ΄ν°λ² μ΄μ€ μ°μ°μ λ΄μ λλ κ² μΌλ°μ μΈ λͺ¨λΈ
- λμ ν¬νΈ μΈν°νμ΄μ€λ₯Ό κ°μ§.
- SRP (Single Responsiblity Principle) μλ°°
- ν μ€νΈκ° μ΄λ ΅κ³ λΆνμν μμ‘΄μ κ°μ§
- ISP (Interface Segregation Principle) μ μ©μ΄ μκΈνλ€.

- ν¬νΈλ₯Ό μ± μμ λ§κ² λλ λͺ¨μ΅
- κ°λ μ±κ³Ό μ± μμ ννμ΄ κ°μ λμλ€.
- ν μ€νΈ μ λͺ¨νΉμ΄ κ°νΈν΄μ‘λ€.
- νλ¬κ·Έ μ€λ νλ μ΄κ° κ°λ₯ν΄μ‘λ€.
- μλΉμ€ μ½λλ₯Ό νμν ν¬νΈμ κ½κΈ° λ§€μ° κ°λ₯.
4. μμμ± μ΄λν° λλκΈ°

- μ΄λν°λ₯Ό λλμΌλ‘μ¨ λλ©μΈ ν΄λμ€(μ 그리거νΈ)λ§λ€ νμν νλμ μ΄λν°λ₯Ό ꡬν.
- λλ©μΈ κ²½κ³λ₯Ό λ°λΌ μμ°μ€λ λλμ΄μ§.
- μ±λ₯μ μν SQLμ μ°κΈ° μν ν¬νΈλ₯Ό λ£κΈ° μν΄ λ μͺΌκ°€ μλ μλ€.
- μΆν μ¬λ¬ κ°μ λ°μ΄λλ 컨ν μ€νΈμ μμμ± μꡬμ¬νμ λΆλ¦¬νκΈ° μν μ’μ ν λκ° λλ€.

- κ·Έλ¦Όμ 보면 λλ©μΈ λ³ λ°μ΄λλ 컨ν
μ€νΈλ κ°μμ μμμ± μ΄λν°λ₯Ό κ°μ§λ€.
- λ°μ΄λλ 컨ν μ€νΈ = κ²½κ³
- κ²½κ³λΌλ¦¬λ μ² μ νκ² λΆλ¦¬λμ΄μλ€.
- λ€λ₯Έ λ§₯λ½μ νμλ‘ ν κ²½μ° μΈμ»€λ° ν¬νΈλ₯Ό ν΅ν΄ μ κ·Όνλ λ°©λ²λ°μ μμ.
5. μ€νλ§ λ°μ΄ν° JPA μμ

- λΆλ³μ±μ λ λλ©μΈ λͺ¨λΈμ μμ±ν μ μλ μ ν¨ν μνμ Account μν°ν° ν΄λμ€
- ν©ν 리 λ©μλλ₯Ό μ 곡

- μμμ± μ΄λν°λ₯Ό μν AccountEntityλ₯Ό μΆκ° μ μ

- μμμ± μ΄λν°μμ μ¬μ©ν ActivityEntity ν΄λμ€ μ μ
- JPAκ° λ§λ₯ μ’μ§ μλ€.
- κ΄κ³ λ§€ν μ λ Έν μ΄μ μ μ¬μ©νλ©΄ λΆμν¨κ³Όκ° μκΈΈ μ μμ.
- μ‘°κΈ λ κ°λ¨ν ORMλ μμ.

- ActivityRepository μΈν°νμ΄μ€
- μ€νλ§μ ꡬν체λ₯Ό μλμΌλ‘ μμ±.


- μμμ± μ΄λν°
- LoadAccountPort & UpdateAccountStatePort 2κ°μ ν¬νΈ ꡬν
- Account λ°μ΄ν°λ₯Ό DBμμ μ‘°ν
=> νΉμ μκ° λ²μμ Activity μ‘°ν
=> μκ° λ²μμ μκ³ λ₯Ό ꡬνκ³ μκ° λ²μ μ μ μ , μΆκΈ Activityλ₯Ό DBμμ μ‘°ν
=> Account Entityλ‘ λ³κ²½ν κ²½μ° μκ³ λ₯Ό κ³μ°νλ€.

- Domain μν°ν° & μμμ± μν°ν°κ° μμΌλ‘ μ‘΄μ¬
- JPA νΉμ±μ 기보본 μμ±μλ₯Ό νμλ‘ νκΈ° λλ¬Έμ λ§€ν μ§ν.
- νλΆν λλ©μΈ λͺ¨λΈμ μμ±νκ³ μΆμ κ²½μ° λλ©μΈ, μμμ± λͺ¨λΈμ λ§€ννλ κ²μ΄ μ’λ€.
- μμμ± μΈ‘λ©΄κ³Όμ ννμ νκ³ μΆμ§ μμ κ²½μ°.
6. λ°μ΄ν°λ² μ΄μ€ νΈλμμ μ μ΄λ»κ² ν΄μΌ ν κΉ?
νΈλμμ μ νλμ μ μ€μΌμ΄μ€μ λν΄ μΌμ΄λλ λͺ¨λ μ°κΈ° μμ μ κ±Έμ³μΌ ν¨.
- μ€ν¨ μ λͺ¨λ λ‘€λ°± νμ
μμμ± μ΄λν°μ κ²½μ° μ μ€μΌμ΄μ€λ₯Ό λͺ¨λ₯΄κΈ° λλ¬Έμ μ± μμ κ°μ§κΈ° λΆμ ν©.
@Transactional μ λ Έν μ΄μ μΌλ‘ μ€μΌμ μμΉ μμ κ²½μ° AspectJμ μλΉμ ν΅ν΄ ν΄κ²°νλ λ°©λ²λ κ³ λ €ν μ μλ€.
7. μ μ§λ³΄μ κ°λ₯ν μννΈμ¨μ΄λ₯Ό λ§λλ λ° μ΄λ»κ² λμμ΄ λ κΉ?
- λλ©μΈ μ½λμ νλ‘κ·ΈμΈμ²λΌ λμνλ μμμ± μ΄λν°λ λλ©μΈμ΄ μμμ±μ λΆλ¦¬λμ΄ νλΆν λλ©μΈ λͺ¨λΈμ΄ κ°λ₯νλ€.
- μ’μ ν¬νΈ μΈν°νμ΄μ€λ ν¬νΈλ§λ€ λ€λ₯Έ λ°©μμΌλ‘ ꡬν κ°λ₯νκΈ° λλ¬Έμ μ μ°νλ€.
- ν¬νΈμ μΈν°νμ΄μ€λ§ μ§ν¨λ€λ©΄ μμμ± κΈ°μ μ νμ μμ λ‘μμ§λ€.
λ°μν