AOP

AOP (Aspect Oriented Programming)

AOP๋Š” Aspect Oriented Programming์˜ ์•ฝ์ž๋กœ ๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ผ๊ณ  ๋ถˆ๋ฆฐ๋‹ค.

๊ด€์  ์ง€ํ–ฅ์€ ์‰ฝ๊ฒŒ ๋งํ•ด ์–ด๋–ค ๋กœ์ง์„ ๊ธฐ์ค€์œผ๋กœ ํ•ต์‹ฌ์ ์ธ ๊ด€์ , ๋ถ€๊ฐ€์ ์ธ ๊ด€์ ์œผ๋กœ ๋‚˜๋ˆ„์–ด์„œ ๋ณด๊ณ  ๊ทธ ๊ด€์ ์„ ๊ธฐ์ค€์œผ๋กœ ๊ฐ๊ฐ ๋ชจ๋“ˆํ™”ํ•˜๊ฒ ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๋ชจ๋“ˆ์„ ํ•ต์‹ฌ-๋ถ€๊ฐ€์ ์ธ ๊ด€์ ์œผ๋กœ ๋‚˜๋ˆˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๋ชจ๋“ˆํ™”๋ž€ ์–ด๋–ค ๊ณตํ†ต๋œ ๋กœ์ง์ด๋‚˜ ๊ธฐ๋Šฅ์„ ํ•˜๋‚˜์˜ ๋‹จ์œ„๋กœ ๋ฌถ๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

์˜ˆ๋กœ๋“ค์–ด ํ•ต์‹ฌ์ ์ธ ๊ด€์ ์€ ๊ฒฐ๊ตญ ์šฐ๋ฆฌ๊ฐ€ ์ ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ๋œ๋‹ค.

๋˜ํ•œ ๋ถ€๊ฐ€์ ์ธ ๊ด€์ ์€ ํ•ต์‹ฌ ๋กœ์ง์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ–‰ํ•ด์ง€๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ, ๋กœ๊น…, ํŒŒ์ผ ์ž…์ถœ๋ ฅ ๋“ฑ์„ ์˜ˆ๋กœ ๋“ค ์ˆ˜ ์žˆ๋‹ค.

AOP์—์„œ ๊ฐ ๊ด€์ ์„ ๊ธฐ์ค€์œผ๋กœ ๋กœ์ง์„ ๋ชจ๋“ˆํ™”ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์ฝ”๋“œ๋“ค์„ ๋ถ€๋ถ„์ ์œผ๋กœ ๋‚˜๋ˆ„์–ด์„œ ๋ชจ๋“ˆํ™”ํ•˜๊ฒ ๋‹ค๋Š” ์˜๋ฏธ๋‹ค.

์ด ๋•Œ, ์†Œ์Šค ์ฝ”๋“œ์ƒ์—์„œ ๋‹ค๋ฅธ ๋ถ€๋ถ„์— ๊ณ„์† ๋ฐ˜๋ณตํ•ด์„œ ์“ฐ๋Š” ์ฝ”๋“œ๋“ค์„ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ ์ด๊ฒƒ์„ ํฉ์–ด์ง„ ๊ด€์‹ฌ์‚ฌ (Crosscutting Concerns)๋ผ ๋ถ€๋ฅธ๋‹ค.

AOP(Aspect-Oriented Programming)๋Š” ์ด๋Ÿฌํ•œ ํฉ์–ด์ง ๊ด€์‹ฌ์‚ฌ ๋ฌธ์ œ๋ฅผ ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์—์„œ ๋ถ„๋ฆฌํ•˜์—ฌ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์ด๋‹ค.

์ฝ”๋“œ์˜ ์ค‘๋ณต์„ ์ตœ๋Œ€ํ•œ์œผ๋กœ ํšŒํ”ผ

ํฉ์–ด์ง„ ๊ด€์‹ฌ์‚ฌ ๋ฌธ์ œ๋Š” ๋กœ๊น…, ๋ณด์•ˆ, ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ ๋ฐ ์บ์‹ฑ๊ณผ ๊ฐ™์€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ์—ฌ๋Ÿฌ ๋ชจ๋“ˆ ๋˜๋Š” ๊ณ„์ธต์— ๊ฑธ์ณ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.

์œ„์—์„œ ๋ถ€๊ฐ€์ ์ธ ๊ด€์ ์œผ๋กœ ์˜ˆ์‹œ๋ฅผ ๋“  ์ฝ”๋“œ๋“ค

๊ธฐ์กด ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ๋Š” ํฉ์–ด์ง„ ๊ด€์‹ฌ์‚ฌ ๋ฌธ์ œ๊ฐ€ ์ฝ”๋“œ ๋ฒ ์ด์Šค ์ „์ฒด์— ํฉ์–ด์ ธ ์žˆ์œผ๋ฏ€๋กœ ์ฝ”๋“œ๋ฅผ ์ฝ๊ณ  ์œ ์ง€ ๊ด€๋ฆฌํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•˜๊ธฐ๊ฐ€ ๋” ์–ด๋ ต๋‹ค.

AOP๋Š” ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ๋Ÿฐํƒ€์ž„ ์‹œ ์ฝ”๋“œ์— ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ์ธก๋ฉด์œผ๋กœ ์ •์˜ํ•˜์—ฌ ๋ชจ๋“ˆํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•œ๋‹ค.

๊ฒฐ๊ตญ AOP์˜ ํ•ต์‹ฌ ๊ฐœ๋…์€ ์œ„์—์„œ ์–˜๊ธฐํ•œ ๋ชจ๋“ˆ ๋‹จ์œ„์˜ Aspect๋‹ค.

๊ฐ ๋ชจ๋“ˆ์—๋Š” Advice์™€ Pointcut์ด ์žˆ๋‹ค.

Advice๋ž€ ํ•ด์•ผ ํ•  ์ผ, ๊ธฐ๋Šฅ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์ด๋‹ค.

Pointcut์ด๋ž€ ์–ด๋””์— ์ ์šฉํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์ด๋‹ค.(ex A๋ผ๋Š” ํด๋ž˜์Šค์˜ Go๋ผ๋Š” ๋ฉ”์„œ๋“œ)

Target์ด๋ž€ ๊ฐ๊ฐ ํด๋ž˜์Šค๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์ด๋‹ค.(ํด๋ž˜์Šค A, B, C) ์ฆ‰, ์ ์šฉ์ด ๋˜๋Š” ๋Œ€์ƒ์„ ๋œปํ•˜๋Š” ์šฉ์–ด์ด๋‹ค.

Join point๋ผ๋Š” ์šฉ์–ด๋Š” ๋ผ์–ด๋“ค ์ง€์ ์„ ๋œปํ•œ๋‹ค.(ex ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ, ํ•„๋“œ์—์„œ ๊ฐ’์„ ๊ฐ€์ ธ๊ฐˆ ๋•Œ ๋“ฑ๋“ฑ)

AOP์˜ ์žฅ์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ: AOP๋Š” ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์—์„œ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ๋ณด๋‹ค ๋ชจ๋“ˆํ™”ํ•˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ ๋‹ค.

  2. ์žฌ์‚ฌ์šฉ์„ฑ: ๋กœ์ง์„ ํ•œ ๋ฒˆ ์ •์˜ํ•˜๊ณ  ์—ฌ๋Ÿฌ ๋ถ€๋ถ„์— ์ ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ค‘๋ณต์ด ์ค„์–ด๋“ค๊ณ  ์žฌ์‚ฌ์šฉ์ƒ์ด ํ–ฅ์ƒ๋œ๋‹ค.

  3. ์œ ์—ฐ์„ฑ: ๋Ÿฐํƒ€์ž„ ์‹œ ํŠน์ • Aspect๋ฅผ ์ถ”๊ฐ€, ์ œ๊ฑฐ ๋˜๋Š” ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ณ€ํ™”ํ•˜๋Š” ์š”๊ตฌ ์‚ฌํ•ญ์— ๋Œ€ํ•œ ์œ ์—ฐ์„ฑ๊ณผ ์ ์‘์„ฑ์„ ์ œ๊ณตํ•œ๋‹ค.

  4. ํ–ฅ์ƒ๋œ ์ฝ”๋“œ ํ’ˆ์งˆ: AOP๋Š” ์ƒ์šฉ๊ตฌ ์ฝ”๋“œ์˜ ์–‘์„ ์ค„์ด๊ณ  ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ž„์œผ๋กœ์จ ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ํ’ˆ์งˆ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋‹ค.

AOP์˜ ๋‹จ์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. ๋ณต์žก์„ฑ: AOP๋Š” ์ฝ”๋“œ๋ฒ ์ด์Šค์— ์ถ”๊ฐ€ ๋ณต์žก์„ฑ์„ ๋„์ž…ํ•˜์—ฌ ๋””๋ฒ„๊น…์ด ์–ด๋ ค์›Œ์งˆ ์ˆ˜ ์žˆ๋‹ค.

  2. ์„ฑ๋Šฅ ์˜ค๋ฒ„ํ—ค๋“œ: ์œ„๋น™ ํ”„๋กœ์„ธ์Šค๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์„ฑ๋Šฅ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋Š” ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ์ค‘์š”ํ•  ์ˆ˜ ์žˆ๋‹ค.

Last updated