๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
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 ์ƒˆ๋กœ์šด ๋…€์„์„ ๋ฐฐ์› ๋Š”๋ฐ, ์ด๋ก ์„ ์•Œ์ง€๋งŒ ํ™œ์šฉ์„ ํ•  ์ˆ˜ ์žˆ์„์ง€.. ์—ด์‹ฌํžˆ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.