π μ€νλ§ μν리ν°λ₯Ό μ¬μ©ν΄ νμκ΄λ¦¬νλ λ°©λ²μ μμλλ₯Ό ν΅ν΄ μ λ¦¬ν΄ λ³΄μΈμ.
- νμκ°μ , λ‘κ·ΈμΈ, λ‘κ·ΈμΈ μ μ§ λ°©λ²μΌλ‘ λλ μ μ 리
- 4κ°μ λͺ¨λ (Client, Server, Session, DB) λ‘ λλμ΄ μ 리
π λ¨μ ν μ€νΈ μ½λ μμ± μ μ₯/λ¨μ μ μ λ¦¬ν΄ λ³΄μΈμ.
λ¨μ ν μ€νΈ(Unit Test)
- νλμ λͺ¨λμ κΈ°μ€μΌλ‘ λ 립μ μΌλ‘ μ§νλλ κ°μ₯ μμ λ¨μμ ν μ€νΈλ₯Ό λ§νλ©°, μΌλ°μ μΌλ‘ μ€λ¬΄μμ ν μ€νΈ μ½λλΌ ν¨μ λ¨μ ν μ€νΈλ₯Ό μλ―Ένλ€.
- νλ‘κ·Έλ¨μ μμ λ¨μλ‘ μͺΌκ° μ΄λμ λ¬Έμ κ° λ°μνλμ§ μ ννκ² λμνλμ§ λΉ λ₯΄κ² νμΈ κ°λ₯ν΄ λλ²κΉ μκ° λ¨μΆν μ μλ€.
- 리νν λ§μ νμ¬λ μμ κΈ°λ₯ νΉμ λ©μλ λ¨μμ΄κΈ°μ λΉ λ₯΄κ² λ¬Έμ μ¬λΆλ₯Ό νμ νμ¬ μμ μ±μ ν보ν μ μλ€.
- ν μ€νΈμ λν μκ°κ³Ό λΉμ©μ μ μ½ ν μ μλ€.
<aside> π‘ μ’κ³ κΉ¨λν ν μ€νΈ μ½λκ° λ°λ₯΄λ FIRST κ·μΉ
β Fast : ν μ€νΈλ λΉ λ₯΄κ² λμνλ©° μμ£Ό λ릴 μ μμ΄μΌ νλ€.
β‘ Independent : κ°κ°μ ν μ€νΈλ λ 립μ μ΄λ©° μλ‘ μμ‘΄νλ©΄ μλλ€.
β’ Repeatable : μ΄λ νκ²½μμλ λ°λ³΅ κ°λ₯ν΄μΌ νλ€.
β£ Self-Validation : ν μ€νΈλ boolκ°μΌλ‘ κ²°κ³Όλ₯Ό μΆλ ₯ν΄ μ체 κ²μ¦μ΄ λμ΄μΌ νλ€.
β€ Timely : μ€μ μ½λλ₯Ό ꡬννκΈ° μ§μ μ ꡬνν΄μΌ νλ€.
</aside>
λ¨μ :
- ν μ€νΈ μ½λκΉμ§ μμ±ν΄μΌν΄ κ°λ° μκ°μ΄ κΈΈμ΄μ§λ€.
- μ΄ν리μΌμ΄μ μ λ³κ²½ μ¬νμ ν μ€νΈ μ½λμλ μ μ©ν΄μΌ νκΈ° λλ¬Έμ μ΄μ λν μ μ§λ³΄μ λΆλ΄μ΄ μ¦κ°νλ€.
AOPλ 무μμΈκ°?
π AOP ?
: AOP(Aspect Oriented Programming) κ΄μ μ§ν₯ νλ‘κ·Έλλ°
: μ΄λ€ λ‘μ§μ κΈ°μ€μΌλ‘ ν΅μ¬μ μΈ κ΄μ , λΆκ°μ μΈ κ΄μ μΌλ‘ λλμ΄ κ·Έ κ΄μ μ κΈ°μ€μΌλ‘ κ°κ° λͺ¨λννμ¬ κ°λ°νλ νλ‘κ·Έλλ° κΈ°λ²
μ κ·Έλ¦Όμ μλ λΈλλ€ μ²λΌ μμ€μ½λ μμμ λ°λ³΅λλ μ½λλ€μ ν©μ΄μ§ κ΄μ¬μ¬λΌκ³ νκ³ ,
ν©μ΄μ§ κ΄μ¬μ¬λ₯Ό Aspectλ‘ λͺ¨λν + ν΅μ¬ λΉμ¦λμ€ λ‘μ§μμ λΆλ¦¬νμ¬ μ¬μ¬μ©νλκ²μ΄ AOPμ μ·¨μ§μ΄λ€.
π’ AOPλ‘ λλμ΄μ§λ κ°λ°μ λ μ’ λ₯ κ΄μ
- μ 무
- μ 무 μ΄μΈ λΆκ° κΈ°λ₯(λ‘μ§, μμΈμ²λ¦¬)
π Aspect?
: ν©μ΄μ§ κ΄μ¬μ¬λ₯Ό λ¬Άμ΄μ λͺ¨λν νκ²μΌλ‘ Adviceμ Point Cutμ΄ λ€μ΄κ°λ€.
- Advice : ν΄μΌν μΌλ€μ λν μ 보λ₯Ό κ°μ§κ³ μμ
- Join Point : λ©μλ μ€ν μμ μΌλ‘ Advice μ μ©μμΉ / λΌμ΄λλ μ§μ / λ±λ±μ μ 보λ₯Ό κ°μ§κ³ μμ
- Point Cut : Join Pointμ μμΈ μ€ν©μ μ μνκ² μ΄λ€ ν΄λμ€μ μ΄λ€ λ©μλλ₯Ό μ μ©ν λ νΈμΆν΄λΌ! λΌλ μ 보λ₯Ό κ°μ§κ³ μλ€.
κ·Έλμ AOPκ° λλ°!
AOPλ μ¬μ©μκ° νμλ‘νλ μν κ³Ό μ΄κ²μ λμμΌλ‘ λΆκ°μ μΈ νμλ₯Ό νλ μν μ ꡬλΆμ§λ κ²μ΄λ€.
AOPλ₯Ό ν΅ν΄ κ° μν μ΄ μνν΄μΌ νλ νμλ€μλ§ μ§μ€ν΄μ κ°λ°μ ν μ μλ μ₯μ μ΄ μκΈ΄λ€.
π νΈλμμ ?
νΈλμμ μ λ°μ΄ν°λ² μ΄μ€ κ΄λ¦¬ μμ€ν μ΄λ, μ μ¬ν μμ€ν μμμ μνΈμμ© λ¨μλ‘
λ°μ΄ν°λ² μ΄μ€λ₯Ό λ€λ£° λ νΈλμμ μ μ μ©νλ©΄ λ°μ΄ν° μΆκ°, κ°±μ , μμ λ±μΌλ‘ μ΄λ£¨μ΄μ§ μμ μ μννλ€κ°
μ²λ¦¬ μ€ μ€λ₯κ° λ°μνμ λ λͺ¨λ μμ μ μμνλ‘ λλλ €μ£Όκ³ , λͺ¨λ μμ μ΄ μ±κ³΅ν΄μΌλ§ μ΅μ’ μ μΌλ‘ λ°μ΄ν°λ² μ΄μ€μ λ°μνλ μν μ ν¨ μ€νλ§μ μ΄λ Έν μ΄μ μ μ΄μ©ν νΈλμμ μ²λ¦¬λ₯Ό μ§μνλ€.
πTransactional μ΄λ Έν μ΄μ
ν΄λΉ μ΄λ Έν μ΄μ μ ν΄λμ€λ, λ©μλμ λΆμ¬μ€ κ²¨μ° ν΄λΉ λ²μ λ΄ λ©μλκ° νΈλμμ μ΄ λλλ‘ λ³΄μ₯νλ€.
μ΄μκ°μ΄ μ¬μ©νλκ²μ μ μΈμ νΈλμμ μ΄λΌκ³ νκ³ , κ°μ²΄λ₯Ό λ§λ€ νμ μμ΄ μ μΈλ§μΌλ‘ κ΄λ¦¬λ₯Ό μ©μ΄νκ² νλ€.
β Transactional μ΄λ Έν μ΄μ μ μλ μ리μ νλ¦
- @Transactionalμ΄ λΆμ λ©μλλ₯Ό νΈμΆν κ²½μ°μλ Springμ ν΄λΉ λ©μλμ λν νλ‘μλ₯Ό λ§λ λ€.( νλ‘μ ν¨ν΄ : μ΄λ€ μ½λλ₯Ό κ°μΈλ©΄μ μΆκ°μ μΈ μ°μ°μ μννλλ‘ κ°μ νλ λ°©λ²)
- νΈλμμ μ κ²½μ° νΈλμμ μ μμκ³Ό μ°μ° μ’ λ£μ ν°λ°μ κ³Όμ μ΄ νμνλ―λ‘ νλ‘μλ₯Ό μμ±ν΄ λ©μλ μ λ€μ μΆκ°νκ³ , ν΄λΉ μ½λλ΄μ λ©μλλ₯Ό νΈμΆν λ μμμ± μ»¨ν μ€νΈκ° μ겨λλ€.
- μμμ± μ»¨ν μ€νΈλ νΈλμμ νλ‘μ(AOP)κ° νΈλμμ μ μμν λ μ겨λκ³ , λ©μλκ° μ’ λ£λμ΄ AOPκ° μ°μ° κ²°κ³Όμ λν΄ μ»€λ° ν κ²½μ° μμμ± μ»¨ν μ€νΈκ° Flush λλ©΄μ ν΄λΉ λ΄μ©μ΄ λ°μλκ³ , μ΄ν 컨ν μ€νΈκ° μ’ λ£λλ€.
'β΄ νν΄' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
π₯² (0) | 2022.12.23 |
---|---|
[νν΄99. 5μ£Όμ°¨ - WIL] (0) | 2022.12.19 |
ETC | GithubμΌλ‘ νμ νκΈ° (0) | 2022.12.15 |
[νν΄99. 4μ£Όμ°¨ - WIL] (0) | 2022.12.11 |
*. μ€λμ μμ½ (2) | 2022.12.09 |