728x90

๐Ÿ“– AOP(Aspect Oriented Programming)

๊ฐœ๋ฐœ์„ ํ•˜๋‹ค๋ณด๋ฉด ๊ณตํ†ต์ ์ธ ๊ธฐ๋Šฅ์ด ๋งŽ์ด ๋ฐœ์ƒํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ๋ชจ๋“  ๋ชจ๋“ˆ์— ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ƒ์†์„ ํ•˜์ง€๋งŒ ์ž๋ฐ”์—์„œ๋Š” ๋‹ค์ค‘์ƒ์†์ด ๋ถˆ๊ฐ€๋Šฅํ•ด์„œ ์ƒ์†์„ ๋ฐ›์•„ ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ๋ถ€์—ฌํ•˜๊ธฐ์—๋Š” ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค.

AOP๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ค‘๋ณต ์ฝ”๋“œ๊ฐ€ ๋ฐœ์ƒํ•  ์†Œ์ง€๊ฐ€ ์žˆ๊ณ , ์ฝ”๋“œ์˜ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•˜๋ฉด ์—ฌ๋Ÿฌ์ฝ”๋“œ์— ์ข…์†์ ์œผ๋กœ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•˜๊ณ  ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ํ˜ธ์ถœ ์‹œ๊ฐ„ ์ธก์ •์ด๋ผ๋Š” ๋ถ€์ˆ˜์ ์ธ ๋กœ์ง์ด ์ถ”๊ฐ€๋˜์–ด ๊ฐ€๋…์„ฑ๊ณผ ํšจ์œจ์„ฑ์ด ๋–จ์–ด์ง€๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

์ด๋Ÿฌํ•œ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์ดํ•ด์„œ๋Š” AOP๊ฐ€ ํ•„์š”ํ•˜๋‹ค.AOP๋Š” ์ƒˆ๋กœ์šด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์ด ์•„๋‹ˆ๋ผ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(OOP)๋ฅผ ๋•๋Š” ๋ณด์กฐ์ ์ธ ๊ธฐ์ˆ ๋กœ, ํ•ต์‹ฌ์ ์ธ ๊ด€์‹ฌ์‚ฌํ•ญ๊ณผ ๊ณตํ†ต ๊ด€์‹ฌ์‚ฌํ•ญ์œผ๋กœ ๋ถ„๋ฆฌ ์‹œํ‚ค๊ณ  ๊ฐ๊ฐ์„ ๋ชจ๋“ˆํ™” ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

๐Ÿ“–AOP(Aspect Oriented Programming)์˜ ์ฃผ์š” ๊ฐœ๋…

  • Aspect : ํฉ์–ด์ง„ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ชจ๋“ˆํ™” ํ•œ ๊ฒƒ์ด๋‹ค. ์ฃผ๋กœ ๋ถ€๊ฐ€๊ธฐ๋Šฅ์„ ๋ชจ๋“ˆํ™”ํ•œ๋‹ค.
  • Target : Aspect๋ฅผ ์ ์šฉํ•˜๋Š”๊ณณ 
  • Advice : ์‹ค์งˆ์ ์ธ ๋ถ€๊ฐ€๊ธฐ๋Šฅ์„ ๋‹ด์€ ๊ตฌํ˜„์ฒด
  • JoinPoint : Advice๊ฐ€ ์ ์šฉ๋  ์œ„์น˜, ๋ผ์–ด๋“ค ์ˆ˜ ์žˆ๋Š” ์ง€์ . ๋ฉ”์„œ๋“œ ์ง„์ž… ์ง€์ , ์ƒ์„ฑ์ž ํ˜ธ์ถœ ์‹œ์ ,ํ•„๋“œ์—์„œ ๊ฐ’์„ ๊บผ๋‚ด์˜ฌ ๋•Œ ๋“ฑ ๋‹ค์–‘ํ•œ ์‹œ์ ์— ์ ์šฉ๊ฐ€๋Šฅ
  • PointCut : JoinPoint์˜ ์ƒ์„ธํ•œ ์ŠคํŒฉ์„ ์ •์˜ํ•œ ๊ฒƒ.

 

๐Ÿ“–AOP(Aspect Oriented Programming)์˜ ์žฅ์  

  • ๊ณตํ†ต ๊ด€์‹ฌ ์‚ฌํ•ญ์„ ํ•ต์‹ฌ ๊ด€์‹ฌ์‚ฌํ•ญ์œผ๋กœ๋ถ€ํ„ฐ ๋ถ„๋ฆฌ์‹œ์ผœ ํ•ต์‹ฌ ๋กœ์ง์„ ๊น”๋”ํ•˜๊ฒŒ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.
  • ๊ฐ๊ฐ์˜ ๋ชจ๋“ˆ์— ์ˆ˜์ •์ด ํ•„์š”ํ•˜๋ฉด ๋‹ค๋ฅธ ๋ชจ๋“ˆ์˜ ์ˆ˜์ • ์—†์ด ํ•ด๋‹น ๋กœ์ง๋งŒ ๋ณ€๊ฒฝํ•˜๋ฉด ๋œ๋‹ค.
  • ๊ณตํ†ต ๋กœ์ง์„ ์ ์šฉํ•  ๋Œ€์ƒ์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“–AOP(Aspect Oriented Programming)ํŠน์ง•

 

  • ํ”„๋ก์‹œ ํŒจํ„ด ๊ธฐ๋ฐ˜์˜ AOP ๊ตฌํ˜„์ฒด, ํ”„๋ก์‹œ ๊ฐ์ฒด๋ฅผ ์“ฐ๋Š” ์ด์œ ๋Š” ์ ‘๊ทผ ์ œ์–ด ๋ฐ ๋ถ€๊ฐ€๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค.
  • ์Šคํ”„๋ง ๋นˆ์—๋งŒ AOP๋ฅผ ์ ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋ชจ๋“  AOP ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์Šคํ”„๋ง IoC์™€ ์—ฐ๋™ํ•˜์—ฌ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๊ฐ€์žฅ ํ”ํ•œ ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์„ ์ง€์›ํ•˜๋Š” ๊ฒƒ์ด ๋ชฉ์ 



๐Ÿ“–AOP ๊ธฐ๋ณธ์ ์ธ ์‹ค์Šต

ํŠน์ • ์–ด๋…ธํ…Œ์ด์…˜์ด ๋ถ™์€ ํฌ์ธํŠธ์— ํ•ด๋‹น Aspect๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ๋„ ์ œ๊ณตํ•œ๋‹ค. 

 

@Around ์–ด๋…ธํ…Œ์ด์…˜์€ ํƒ€๊ฒŸ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ์‹ธ์„œ ํŠน์ • Advice๋ฅผ ์‹คํ–‰ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. 

@Aspect ์–ด๋…ธํ…Œ์ด์…˜์„ ๋ถ™์—ฌ ์ด ํด๋ž˜์Šค๊ฐ€ Aspect๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํด๋ž˜์Šค๋ผ๋Š” ๊ฒƒ์„ ๋ช…์‹œํ•˜๊ณ  @Component๋ฅผ ๋ถ™์—ฌ ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•œ๋‹ค.

 

@Target์€ ์–ด๋…ธํ…Œ์ด์…˜์ด ์ ์šฉ๋  ๋ ˆ๋ฒจ์„ ์˜๋ฏธํ•œ๋‹ค. 

 

@Retention ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ์–ด๋А ์‹œ์ ๊นŒ์ง€ ์–ด๋…ธํ…Œ์ด์…˜์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ€์ ธ๊ฐˆ ์ง€ ์„ค์ •ํ•˜๊ณ , @Target ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ํ•„๋“œ, ๋ฉ”์†Œ๋“œ, ํด๋ž˜์Šค, ํŒŒ๋ผ๋ฏธํ„ฐ ๋“ฑ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋Š” ํƒ€์ž…์„ ์„ค์ •ํ•˜๋ฉด ๋Œ€๋ถ€๋ถ„ ์ปค์Šคํ…€ ์–ด๋…ธํ…Œ์ด์…˜์€ ์‰ฝ๊ฒŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

๊ฒฐ๊ณผ @ExecutionTimeChecker ๋ฅผ ๋ถ™์ธ ๋ฉ”์„œ๋“œ์— Aspect๊ฐ€ ์ถ”๊ฐ€๋œ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ˜ธGITHUB ์†Œ์Šค์ฝ”๋“œ : https://github.com/ryudongjae/blog-ex

 

GitHub - ryudongjae/blog-ex

Contribute to ryudongjae/blog-ex development by creating an account on GitHub.

github.com


 

REFERENCE

728x90