λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
TIL

03/13(수) 내일배움캠프 Java 55일차 TIL - Spring AOP

by 감자개발꾼 2024. 3. 13.

 

πŸ“–  μ˜€λŠ˜μ˜ ν•™μŠ΅ ν‚€μ›Œλ“œ

  • Spring AOP

 

πŸ₯”  Spring AOP

Spring AOP (Aspect-Oriented Programming)λŠ” 관점 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ˜ ν•œ ν˜•νƒœλ‘œ,

μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ—¬λŸ¬ λͺ¨λ“ˆμ—μ„œ 반볡적으둜 λ°œμƒν•˜λŠ” 관심사λ₯Ό λΆ„λ¦¬ν•˜μ—¬ λͺ¨λ“ˆν™”ν•˜λŠ” κΈ°μˆ μž…λ‹ˆλ‹€.

이λ₯Ό 톡해 핡심 λΉ„μ¦ˆλ‹ˆμŠ€ 둜직과 각 관심사λ₯Ό λΆ„λ¦¬ν•˜μ—¬ μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±κ³Ό μœ μ§€λ³΄μˆ˜μ„±μ„ ν–₯μƒμ‹œν‚΅λ‹ˆλ‹€.

 

Spring AOP의 μ£Όμš” ꡬ성 μš”μ†Œμ™€ κ°œλ…μ€ μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

 

  1. Aspect (관점) : 관점은 νŠΉμ •ν•œ 관심사λ₯Ό λ‚˜νƒ€λ‚΄λŠ” λͺ¨λ“ˆμž…λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, λ‘œκΉ…, νŠΈλžœμž­μ…˜ 관리, λ³΄μ•ˆ 등이 κ΄€μ μ˜ μ˜ˆμ‹œμž…λ‹ˆλ‹€.
  2. Join Point (κ²°ν•© 지점) : κ²°ν•© 지점은 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰ 쀑에 Aspectκ°€ 적용될 수 μžˆλŠ” 지점을 λ§ν•©λ‹ˆλ‹€.
    λ©”μ†Œλ“œ 호좜, μ˜ˆμ™Έ λ°œμƒ 등이 κ²°ν•© μ§€μ μ˜ μ˜ˆμ‹œμž…λ‹ˆλ‹€.
  3. Advice (μ‘°μ–Έ) : AdviceλŠ” Aspectμ—μ„œ κ²°ν•© 지점에 μ‚½μž…λ˜μ–΄ μ‹€ν–‰λ˜λŠ” μ½”λ“œμž…λ‹ˆλ‹€.
    Spring AOPμ—μ„œλŠ” λ‹€μŒκ³Ό 같은 Adviceλ₯Ό μ§€μ›ν•©λ‹ˆλ‹€.

    - Before Advice : κ²°ν•© 지점 이전에 μ‹€ν–‰λ˜λŠ” μ½”λ“œ.
    - After Returning Advice : κ²°ν•© μ§€μ μ—μ„œ λ©”μ†Œλ“œκ°€ μ •μƒμ μœΌλ‘œ λ°˜ν™˜λœ 후에 μ‹€ν–‰λ˜λŠ” μ½”λ“œ.
    - After Throwing Advice : κ²°ν•© μ§€μ μ—μ„œ μ˜ˆμ™Έκ°€ λ°œμƒν•œ 후에 μ‹€ν–‰λ˜λŠ” μ½”λ“œ.
    - After Advice : κ²°ν•© μ§€μ μ—μ„œ λ©”μ†Œλ“œκ°€ λ°˜ν™˜λ˜κ±°λ‚˜ μ˜ˆμ™Έκ°€ λ°œμƒν•œ 후에 μ‹€ν–‰λ˜λŠ” μ½”λ“œ.
    - Around Advice : κ²°ν•© 지점을 κ°μ‹Έμ„œ λ©”μ†Œλ“œ 호좜 전후에 μ‹€ν–‰λ˜λŠ” μ½”λ“œ.
  4. Pointcut (결합점) : 결합점은 Aspectκ°€ Adviceλ₯Ό μ μš©ν•  κ²°ν•© 지점을 μ •μ˜ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.
    μ •κ·œν‘œν˜„μ‹μ΄λ‚˜ νŠΉμ • λ©”μ†Œλ“œ νŒ¨ν„΄μ„ μ‚¬μš©ν•˜μ—¬ κ²°ν•© 지점을 지정할 수 μžˆμŠ΅λ‹ˆλ‹€.
  5. Introduction (λ„μž…) : λ„μž…μ€ κΈ°μ‘΄ ν΄λž˜μŠ€μ— μƒˆλ‘œμš΄ λ©”μ†Œλ“œλ‚˜ ν•„λ“œλ₯Ό μΆ”κ°€ν•˜λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€.
    Spring AOPμ—μ„œλŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ΄μš©ν•˜μ—¬ ν΄λž˜μŠ€μ— λ„μž…μ„ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Spring AOPλŠ” ν”„λ‘μ‹œ 기반의 AOPλ₯Ό μ‚¬μš©ν•˜μ—¬ κ΅¬ν˜„λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

즉, Aspectλ₯Ό μ μš©ν•œ λΉˆμ€ Spring이 ν•΄λ‹Ή 빈의 ν”„λ‘μ‹œλ₯Ό μƒμ„±ν•˜μ—¬ Adviceλ₯Ό μ μš©ν•©λ‹ˆλ‹€.

이둜써 핡심 λΉ„μ¦ˆλ‹ˆμŠ€ 둜직과 관점 μ½”λ“œλ₯Ό λΆ„λ¦¬ν•˜κ³ , μ½”λ“œ 쀑볡을 ν”Όν•˜λ©°, μœ μ§€λ³΄μˆ˜μ„±μ„ ν–₯μƒμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

 

 

❗️ Sping AOPλ₯Ό μ‚¬μš©ν•  λ•Œ 주의점

  • Proxy 기반 : Spring AOPλŠ” ν”„λ‘μ‹œ 기반의 AOPλ₯Ό μ‚¬μš©ν•˜λ―€λ‘œ, AOPκ°€ μ μš©λ˜λŠ” λŒ€μƒμ€ μΈν„°νŽ˜μ΄μŠ€λ₯Ό
    κ΅¬ν˜„ν•œ λΉˆμ—λ§Œ μ μš©λ©λ‹ˆλ‹€. λ”°λΌμ„œ 클래슀 λ‚΄λΆ€μ—μ„œ λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•  λ•ŒλŠ” AOPκ°€ μ μš©λ˜μ§€ μ•Šμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ„±λŠ₯ μ˜€λ²„ν—€λ“œ : AOPλŠ” μ½”λ“œ μ‹€ν–‰ 쀑간에 관심사λ₯Ό μ‚½μž…ν•˜κΈ° λ•Œλ¬Έμ— μ„±λŠ₯ μ˜€λ²„ν—€λ“œκ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    특히 Around Adviceλ₯Ό μ‚¬μš©ν•  λ•Œ, λ©”μ†Œλ“œ 호좜 전후에 μΆ”κ°€ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λ―€λ‘œ μ„±λŠ₯에 영ν–₯을 쀄 수 μžˆμŠ΅λ‹ˆλ‹€.
  • μˆœμ„œμ— 주의 : μ—¬λŸ¬ 개의 Adviceκ°€ ν•˜λ‚˜μ˜ Join Point에 적용될 경우, Advice의 μˆœμ„œκ°€ μ€‘μš”ν•©λ‹ˆλ‹€.
    Before Adviceκ°€ λ¨Όμ € μ‹€ν–‰λ˜κ³ , After Adviceκ°€ λ‚˜μ€‘μ— μ‹€ν–‰λ©λ‹ˆλ‹€.

 

πŸ₯”  Spring AOP의 λ™μž‘

- κ°œλ…μ  이해

 

- μŠ€ν”„λ§ μ‹€μ œ λ™μž‘

 

 

 

πŸ“š  μ˜€λŠ˜μ˜ 회고

Spring AOP μƒˆλ‘œμš΄ 녀석을 λ°°μ› λŠ”λ°, 이둠을 μ•Œμ§€λ§Œ ν™œμš©μ„ ν•  수 μžˆμ„μ§€.. μ—΄μ‹¬νžˆ ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.