06. AOP (Aspect Oriented Programming)

์—ฌ๋Ÿฌ ๊ฐ์ฒด์— ๊ณตํ†ต์ ์œผ๋กœ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐœ๋…์„ ๋”ฐ๋กœ ์ •์˜ํ•ด์„œ ์–ด๋…ธํ…Œ์ด์…˜ ๋“ฑ์œผ๋กœ ๊ฐ๊ฐ์˜ ํด๋ž˜์Šค์— ์ ์šฉ์‹œ์ผœ์ฃผ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋ฒ•์ด๋‹ค. ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์—ฌ์ฃผ๊ณ  ํ•ต์‹ฌ ๊ด€์‹ฌ ์‚ฌํ•ญ(์„œ๋น„์Šค) ์„ ๊น”๋”ํ•˜๊ฒŒ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

1๏ธโƒฃ ย  AOP ! ์ „์ฒด์ ์ธ ํ๋ฆ„ ๋ฐ ์šฉ์–ด ์ •๋ฆฌ

์ถœ์ฒ˜: ๊น€์˜ํ•œ์˜ ์Šคํ”„๋ง ์ž…๋ฌธ ๊ฐ•์˜์ž๋ฃŒ (์ธํ”„๋Ÿฐ)

  1. Spring AOP ๋Š” ๋Ÿฐํƒ€์ž„ ๋•Œ (์ž๋ฐ” ํŒŒ์ผ์ด ์ปดํŒŒ์ผ๋˜๊ณ  JVM์— ๋กœ๋“œ๋˜๊ณ  ๋‚˜์„œ ์‹คํ–‰์ค‘์ผ ๋•Œ) ์‹คํ–‰๋œ๋‹ค.

  2. ๋Ÿฐํƒ€์ž„ ๋˜๋ฉด ์ปจํŠธ๋กค๋Ÿฌ๋Š” ํ”„๋ก์‹œ ๊ฐ์ฒด (๋ถ€๊ฐ€๊ธฐ๋Šฅ์„ ์ •์˜ํ•œ ๊ฐ์ฒด์ด๋‹ค. ํŽธ์˜์ƒ ๊ฐ€์งœ ๊ฐ์ฒด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์ดํ•ด๊ฐ€ ์ž˜ ๋  ๊ฒƒ ๊ฐ™๋‹ค) ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ณ  join point ์—์„œ ๋ถ€๊ฐ€๊ธฐ๋Šฅ์„ ์‹คํ–‰์‹œํ‚จ ๋’ค ์ง„์งœ ๊ฐ์ฒด๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

ย ย ย ย ย  ๐Ÿ“— ย  ์šฉ์–ด ์‚ฌ์ „ ย  ๐Ÿ“—

  • Aspect : ์—ฌ๋Ÿฌ ๊ฐ์ฒด์— ๊ณตํ†ต์œผ๋กœ ์ ์šฉ๋˜๋Š” ๊ธฐ๋Šฅ. advise + point cut์„ ๋ชจ๋“ˆํ™”ํ•œ ๊ฒƒ์ด๋‹ค.

  • Join point : ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ํ๋ฆ„์—์„œ AOP ๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์„ ๋งํ•œ๋‹ค. ์Šคํ”„๋ง AOP ๋Š” ํ”„๋ก์‹œ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์กฐ์ธ ํฌ์ธํŠธ๋Š” ๋ฉ”์†Œ๋“œ ์‹คํ–‰ ์ง€์  ์œผ๋กœ ์ œํ•œ๋œ๋‹ค.

  • Advice : ์กฐ์ธํฌ์ธํŠธ์—์„œ ์ˆ˜ํ–‰๋˜๋Š” ์ฝ”๋“œ๋ฅผ ๋งํ•œ๋‹ค.

  • Point cut : ์กฐ์ธํฌ์ธํŠธ ์ค‘์—์„œ๋„ ์–ด๋“œ๋ฐ”์ด์Šค๊ฐ€ ์ ์šฉ๋  ์œ„์น˜๋ฅผ ์„ ๋ณ„ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ํ•œ๋‹ค.

  • weaving : ํฌ์ธํŠธ์ปท์—์„œ ๊ฒฐ์ •ํ•œ ํƒ€๊ฒŸ์— ์–ด๋“œ๋ฐ”์ด์Šค๋ฅผ ์ ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

  • AOP proxy : ์›๋ž˜ ๊ฐ์ฒด๋ฅผ ๊ฐ์‹ธ๊ณ  ์žˆ๋Š” ๊ฐ์ฒด. AOP ๋ถ€๊ฐ€๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฐ์ฒด์ด๋‹ค.

  • target : AOP ๋ถ€๊ฐ€๊ธฐ๋Šฅ์„ ์ ์šฉํ•  ๋Œ€์ƒ.

  • Advisor : ํ•˜๋‚˜์˜ advise์™€ ํ•˜๋‚˜์˜ point cut์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

๐Ÿ™‹๐Ÿปโ€โ™€๏ธ ย  ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹คโ€ฆ ์‹ค์Šตํ•˜๋ฉฐ ์ดํ•ดํ•ด๋ณด์ž !

๐Ÿ’ญ โ€ฆ์นดํŠธ์— โ€ฆ

AOP ์“ธ ใ…กใ„น๋ž˜์Šค์— @Aspect ๊ฑธ๊ณ ใ„ด ๊ทธ ํด๋ž˜์Šฌ๋ฅด ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•ด์•ผํ•œ๋‹ค (๋‹น์—ฐํžˆ ๊ทธ๋ž˜์•ผ ์Šฌ ์ˆ˜ ์žˆ์ง€) ํ•ด๋‹น ๋ฉ”์†Œ๋“œ์— @Around ์ฐ๊ณ  ์ ์šฉ๋ฒ”์œ„ excution ์จ์ค˜์•ผํ•จ.

ํ˜ธ์ถœ์ด ๋  ๋•Œ๋งˆ๋‹ค ํ”„๋ก์‹œ. ๊ฐ€์งœ ์„œ๋น„์Šค(proxy)๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. join.proceed..?๊ฐ€ ์—ฌ๊ธฐ์„œ ๊ธฐ๋Šฅ?