๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋นˆ ๊ตฌ๋ฉ ์ฑ„์šฐ๊ธฐ

[์šฉ์–ด] AOP Aspect Oriented Programming

์ถœ์ฒ˜

Gemini


AOP(Aspect Oriented Programming)๋Š” ๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ผ๊ณ  ๋ฒˆ์—ญ๋˜๋ฉฐ, ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์—์„œ ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋Šฅ(์˜ˆ: ๋กœ๊ทธ, ํŠธ๋žœ์žญ์…˜, ๋ณด์•ˆ ๋“ฑ)์„ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์—์„œ ๋ถ„๋ฆฌํ•˜์—ฌ ๋ชจ๋“ˆํ™”ํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์ด๋‹ค.

 

ํ•„์š”์„ฑ

์ฝ”๋“œ ์ค‘๋ณต ๋ฐฉ์ง€

์—ฌ๋Ÿฌ ํด๋ž˜์Šค์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋Šฅ์„ ๋ณ„๋„์˜ ๋ชจ๋“ˆ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์ฝ”๋“œ ์ค‘๋ณต์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

์œ ์ง€๋ณด์ˆ˜์„ฑ ํ–ฅ์ƒ

๊ณตํ†ต ๊ธฐ๋Šฅ์„ ํ•œ ๊ณณ์—์„œ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•  ๋•Œ ์ˆ˜์ •ํ•ด์•ผ ํ•  ์ฝ”๋“œ์˜ ์–‘์ด ์ค„์–ด๋“ ๋‹ค.

๋ชจ๋“ˆ์„ฑ ํ–ฅ์ƒ

ํ•ต์‹ฌ ๊ธฐ๋Šฅ์—๋งŒ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•จ์œผ๋กœ์จ ์ฝ”๋“œ์˜ ๋ชจ๋“ˆ์„ฑ์„ ๋†’์ธ๋‹ค.

 

ํ•ต์‹ฌ๊ฐœ๋…

๊ด€์ (Aspect)

๊ณตํ†ต ๊ธฐ๋Šฅ์„ ๋‹ด๋‹นํ•˜๋Š” ๋ชจ๋“ˆ์ด๋‹ค. ๋กœ๊ทธ, ํŠธ๋žœ์žญ์…˜, ๋ณด์•ˆ ๋“ฑ์ด ๋Œ€ํ‘œ์ ์ธ ๊ด€์ ์ด๋‹ค.

์กฐ์ธ ํฌ์ธํŠธ(Join Point)

๊ด€์ ์ด ์ ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์‹œ์ ์„ ์˜๋ฏธํ•œ๋‹ค. ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ „, ํ›„, ์˜ˆ์™ธ ๋ฐœ์ƒ ์‹œ ๋“ฑ์ด ์กฐ์ธ ํฌ์ธํŠธ์˜ ์˜ˆ์‹œ์ด๋‹ค.

ํฌ์ธํŠธ์ปท(Pointcut)

์กฐ์ธ ํฌ์ธํŠธ ์ค‘์—์„œ ์‹ค์ œ๋กœ ๊ด€์ ์ด ์ ์šฉ๋  ์œ„์น˜๋ฅผ ์ง€์ •ํ•˜๋Š” ํŒจํ„ด. ํŠน์ • ๋ฉ”์„œ๋“œ, ํŠน์ • ํด๋ž˜์Šค ๋“ฑ์„ ๊ธฐ์ค€์œผ๋กœ ํฌ์ธํŠธ์ปท์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

์–ด๋“œ๋ฐ”์ด์Šค(Advice)

์กฐ์ธ ํฌ์ธํŠธ์—์„œ ์‹คํ–‰๋  ๊ตฌ์ฒด์ ์ธ ๋™์ž‘์„ ์ •์˜ํ•œ๋‹ค. before, after, around ๋“ฑ ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ ์–ด๋“œ๋ฐ”์ด์Šค๊ฐ€ ์žˆ๋‹ค.

 

 

๋™์ž‘ ๋ฐฉ์‹

1. ๊ด€์  ์ •์˜

๊ณตํ†ต ๊ธฐ๋Šฅ์„ ๋‹ด๋‹นํ•˜๋Š” ๊ด€์ ์„ ์ •์˜ํ•œ๋‹ค.

2. ํฌ์ธํŠธ์ปท ์ง€์ •

๊ด€์ ์ด ์ ์šฉ๋  ์กฐ์ธ ํฌ์ธํŠธ๋ฅผ ์ง€์ •ํ•œ๋‹ค.

3. ์–ด๋“œ๋ฐ”์ด์Šค ์„ค์ •

์กฐ์ธ ํฌ์ธํŠธ์—์„œ ์‹คํ–‰๋  ๊ตฌ์ฒด์ ์ธ ๋™์ž‘์„ ์„ค์ •ํ•œ๋‹ค.

4. ์œ„๋น™(Weaving)

๊ด€์ ๊ณผ ํƒ€๊ฒŸ ๊ฐ์ฒด๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ณผ์ •์ด๋‹ค.

 

์žฅ์ 

์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ฑ ์ฆ๊ฐ€

๊ณตํ†ต ๊ธฐ๋Šฅ์„ ์žฌ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์„ ๋†’์ธ๋‹ค.

๋ชจ๋“ˆ์„ฑ ํ–ฅ์ƒ

ํ•ต์‹ฌ ๊ธฐ๋Šฅ๊ณผ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์ฝ”๋“œ์˜ ์ดํ•ด๋„๋ฅผ ๋†’์ธ๋‹ค.

์œ ์ง€๋ณด์ˆ˜์„ฑ ํ–ฅ์ƒ

๊ณตํ†ต ๊ธฐ๋Šฅ์„ ํ•œ ๊ณณ์—์„œ ๊ด€๋ฆฌํ•˜์—ฌ ๋ณ€๊ฒฝ์ด ์šฉ์ดํ•˜๋‹ค.

 

๋‹จ์ 

ํ•™์Šต ๊ณก์„ ์ด ๋†’๋‹ค

AOP๋Š” ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ๋น„ํ•ด ์ƒ๋Œ€์ ์œผ๋กœ ํ•™์Šตํ•˜๊ธฐ ์–ด๋ ค์šด ๊ฐœ๋…์ด๋‹ค.

์„ฑ๋Šฅ ์˜ค๋ฒ„ํ—ค๋“œ

AOP๋ฅผ ์ ์šฉํ•˜๋ฉด ์„ฑ๋Šฅ์ด ์•ฝ๊ฐ„ ์ €ํ•˜๋  ์ˆ˜ ์žˆ๋‹ค.

  • AOP๋ฅผ ์ ์šฉํ•˜๋ฉด ์„ฑ๋Šฅ์ด ์ €ํ•˜๋˜๋Š” ์ด์œ 
๋”๋ณด๊ธฐ

AOP ์ ์šฉ ์‹œ ์„ฑ๋Šฅ ์ €ํ•˜ ์›์ธ ๋ถ„์„

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

 

AOP ์„ฑ๋Šฅ ์ €ํ•˜์˜ ์ฃผ์š” ์›์ธ

1. ํ”„๋ก์‹œ ์ƒ์„ฑ ์˜ค๋ฒ„ํ—ค๋“œ

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

2. ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ถ”๊ฐ€

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

3. ์บ์‹ฑ ๋ถ€์žฌ

  • AOP๋Š” ๋™์ผํ•œ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์— ๋Œ€ํ•ด ๋งค๋ฒˆ ์–ด๋“œ๋ฐ”์ด์Šค๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. ๋งŒ์•ฝ ์–ด๋“œ๋ฐ”์ด์Šค ๋กœ์ง์˜ ๊ฒฐ๊ณผ๊ฐ€ ์บ์‹ฑ๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, ๋™์ผํ•œ ๊ณ„์‚ฐ์ด ๋ฐ˜๋ณต๋˜์–ด ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ๋‹ค.

4. ๋Ÿฐํƒ€์ž„ ์‹œ์  ๊ฒฐ์ •

  • AOP๋Š” ์ปดํŒŒ์ผ ์‹œ์ ์ด ์•„๋‹Œ ๋Ÿฐํƒ€์ž„ ์‹œ์ ์— ์–ด๋“œ๋ฐ”์ด์Šค๋ฅผ ์ ์šฉํ•œ๋‹ค. ์ด๋Š” ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•˜์ง€๋งŒ, ๋Ÿฐํƒ€์ž„ ์‹œ์ ์— ์ถ”๊ฐ€์ ์ธ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜์—ฌ ์„ฑ๋Šฅ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

 

์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•

 

ํ•„์š”ํ•œ ๊ณณ์—๋งŒ AOP ์ ์šฉ

๋ชจ๋“  ๋ฉ”์„œ๋“œ์— AOP๋ฅผ ์ ์šฉํ•˜๊ธฐ๋ณด๋‹ค๋Š” ์‹ค์ œ๋กœ ํ•„์š”ํ•œ ๊ณณ์—๋งŒ ์„ ํƒ์ ์œผ๋กœ ์ ์šฉํ•˜์—ฌ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์ธ๋‹ค.

๊ฐ„๋‹จํ•œ ์–ด๋“œ๋ฐ”์ด์Šค ๋กœ์ง

์–ด๋“œ๋ฐ”์ด์Šค ๋กœ์ง์„ ์ตœ๋Œ€ํ•œ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑํ•˜์—ฌ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์ตœ์†Œํ™”ํ•œ๋‹ค.

์บ์‹ฑ ํ™œ์šฉ

์–ด๋“œ๋ฐ”์ด์Šค ๊ฒฐ๊ณผ๋ฅผ ์บ์‹ฑํ•˜์—ฌ ๋™์ผํ•œ ๊ณ„์‚ฐ์„ ๋ฐ˜๋ณตํ•˜์ง€ ์•Š๋„๋ก ํ•œ๋‹ค.

CGLIB ๋Œ€์‹  JDK ๋™์  ํ”„๋ก์‹œ ์‚ฌ์šฉ

๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ JDK ๋™์  ํ”„๋ก์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋ก์‹œ ์ƒ์„ฑ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์ธ๋‹ค.

AOP ํ”„๋ ˆ์ž„์›Œํฌ ์ตœ์ ํ™”

์‚ฌ์šฉํ•˜๋Š” AOP ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์„ค์ •์„ ์ตœ์ ํ™”ํ•˜์—ฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚จ๋‹ค.

์ธก์ • ๋ฐ ํ”„๋กœํŒŒ์ผ๋ง

์‹ค์ œ ํ™˜๊ฒฝ์—์„œ ์„ฑ๋Šฅ์„ ์ธก์ •ํ•˜๊ณ  ํ”„๋กœํŒŒ์ผ๋งํ•˜์—ฌ ๋ณ‘๋ชฉ ํ˜„์ƒ์„ ์ฐพ์•„ ๊ฐœ์„ ๋‹ค.

 

 

AOP๋ฅผ ์ง€์›ํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ

  • Spring AOP: ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์ œ๊ณตํ•˜๋Š” AOP ๊ธฐ๋Šฅ์œผ๋กœ, XML ๋˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ„ํŽธํ•˜๊ฒŒ AOP๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • AspectJ: ์ž๋ฐ” ์–ธ์–ด๋ฅผ ํ™•์žฅํ•˜์—ฌ AOP๋ฅผ ์ง€์›ํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ๋‹ค.

 


Gemini์˜ ์ถœ์ฒ˜

AOP ์„ค๋ช… ๊ธ€์˜ ์ถœ์ฒ˜์— ๋Œ€ํ•œ ๋‹ต๋ณ€

์ฃ„์†กํ•˜์ง€๋งŒ, ์ œ๊ฐ€ ์ œ๊ณตํ•œ AOP ์„ค๋ช… ๊ธ€์˜ ์ •ํ™•ํ•œ ์ถœ์ฒ˜๋ฅผ ์•Œ๋ ค๋“œ๋ฆฌ๊ธฐ๋Š” ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

๊ทธ ์ด์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

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