AOP(Aspect Oriented Programming)๋Š” ๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ ํ•˜๋‚˜์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์€ ๊ด€์‹ฌ์‚ฌ์™€ ํ•ต์‹ฌ์ ์ธ ๋กœ์ง์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. 

 

์—ฌ๊ธฐ์„œ ๊ด€์‹ฌ์‚ฌ๋ž€ ์†Œ์Šค ์ฝ”๋“œ์ƒ์—์„œ ๊ณ„์† ๋ฐ˜๋ณต๋˜๋Š” ๋ถ€๋ถ„์œผ๋กœ ์˜ˆ์™ธ์ฒ˜๋ฆฌ, ์ธ์ฆ ๋“ฑ์ด ํ•ด๋‹น๋œ๋‹ค. ์ฆ‰ ์ฃผ๋ณ€ ๋กœ์ง, ๋ถ€๊ฐ€๊ธฐ๋Šฅ์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ’ก ๊ด€์‹ฌ์‚ฌ์˜ ์˜ˆ

1. ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋“ค์–ด์™”์„๊นŒ??

 

2. ์‚ฌ์šฉ์ž์˜ ์ธ์ฆ์„ ์ ์ ˆํžˆ ๋ฐ›์•„์™”์„๊นŒ??

 

3. ์ด ์ž‘์—…์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋Š” ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ??

 

์ฆ‰ AOP์˜ ๋ชฉํ‘œ๋Š” ํ•ต์‹ฌ์ ์ธ ๋กœ์ง์—์„œ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ์žฌ์‚ฌ์šฉํ•˜๊ฒ ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ด๊ฒƒ์„ ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ(=Separate concerns)๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•˜๋ฉด ์ฝ”๋“œ์˜ ๋ฐ˜๋ณต์„ ์ค„์ผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

AOP ๊ฐœ๋ฐœ๋ฐฉ์‹์—์„œ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฃผ์˜ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ ๋ฌด์—‡์ผ๊นŒ โ“

๊ด€์‹ฌ์‚ฌ์™€ ํ•ต์‹ฌ ๋กœ์ง์€ ์ปดํŒŒ์ผ ํ˜น์€ ์‹คํ–‰์‹œ๊ฐ„์— ๊ฒฐํ•ฉ๋˜๊ธฐ์— ์–ด๋–ค ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ™์ผ ๊ฒƒ์ธ์ง€๋งŒ ๊ณ ๋ คํ•˜๋ฉด ๋œ๋‹ค!!

 

๐Ÿ‘€ AOP์šฉ์–ด ์‚ดํŽด๋ณด๊ธฐ

Target : Aspect๋ฅผ ์ ์šฉํ•˜๋Š” ๊ณณ (ํด๋ž˜์Šค, ๋ฉ”์„œ๋“œ..) ์ฆ‰, ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์˜๋ฏธํ•œ๋‹ค.

Proxy : ๋‚ด๋ถ€์ ์œผ๋กœ ๊ด€์‹ฌ์‚ฌ๋“ค์„ ๊ฑฐ์ณ์„œ Target์„ ํ˜ธ์ถœํ•˜๋„๋ก ์ž๋™ ํ˜น์€ ์ˆ˜๋™์œผ๋กœ ์ž‘์„ฑํ•œ๋‹ค.

Proxy ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด Target ๊ฐ์ฒด์˜ JoinPoint์„ ํ˜ธ์ถœํ•œ๋‹ค.

JoinPoint : Target ๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง€๋Š” ์—ฌ๋Ÿฌ ๋ฉ”์„œ๋“œ 

 

Aspect๊ณผ JoinPoint๊ฐ€ ๊ฒฐํ•ฉ๋˜๋Š” ๊ฒƒ์„ ์ž์„ธํžˆ ์‚ดํŽด๋ณด์ž โ—

Aspect : ํฉ์–ด์ง„ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ชจ๋“ˆํ™” ํ•œ ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

Advice : ์‹ค์งˆ์ ์ธ ๋ถ€๊ฐ€๊ธฐ๋Šฅ์„ ๋‹ด์€ ๊ตฌํ˜„์ฒด๋กœ ๊ด€์‹ฌ์‚ฌ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

Pointcut : ๊ด€์‹ฌ์‚ฌ์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ๊ฒฐํ•ฉ๋˜๋Š” ์ง€์ ์„ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์œผ๋กœ Joinpoint๊ฐ€ ๊ฐ€์ง€๋Š” ์—ฌ๋Ÿฌ ๋ฉ”์„œ๋“œ ์ค‘ ์–ด๋–ค ๋ฉ”์„œ๋“œ๋กœ ์—ฐ๊ฒฐํ• ์ง€ ์„ค์ •ํ•œ๋‹ค.

 

๐Ÿ’ก Pointcut ์„ ์–ธ Annotation

๊ตฌ๋ถ„ ์„ค๋ช…
execution(@excution) ๋ฉ”์„œ๋“œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ Pointcut ์„ค์ •
within(@within) ํด๋ž˜์Šค๋ฅผ ๊ธฐ์ค€์œผ๋กœ Pointcut ์„ค์ •
this ์ฃผ์–ด์ง„ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฐ์ฒด์— Pointcut ์„ค์ •
args(@args) ํŠน์ •ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ฐ€์ง€๋Š” ๋Œ€์ƒ๋“ค์— Pointcut ์„ค์ •
@annotaion ํŠน์ •ํ•œ ์–ด๋…ธํ…Œ์ด์…˜์ด ์ ์šฉ๋œ ๋Œ€์ƒ๋“ค์— Pointcut ์„ค์ •

 

 

+ Recent posts