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

[Spring] AOP๋ž€

by Bhinney 2022. 8. 17.

๐Ÿ“‹ ๋ชฉ ์ฐจ

1๏ธโƒฃ AOP๋ž€?

2๏ธโƒฃ AOP์˜ ์žฅ์ 

3๏ธโƒฃ AOP ์šฉ์–ด


AOP(Aspect Oriented Programming)๋ž€?

 

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

 

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๋‹ค ๋ณด๋ฉด, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „๋ฐ˜์— ์‚ฌ์šฉ๋˜๋Š” ๊ณตํ†ต์ ์ธ ๊ธฐ๋Šฅ์ด ์กด์žฌํ•˜๊ธฐ ๋งˆ๋ จ์ด๋‹ค. ์ด๋Ÿฌํ•œ ๊ณตํ†ต ๊ธฐ๋Šฅ๋“ค์— ๋Œ€ํ•œ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๊ณตํ†ต ๊ด€์‹ฌ ์‚ฌํ•ญ(Cross-Cutting Concern)์ด๋ผ๊ณ  ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ฃผ ๋ชฉ์ ์„ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ํ•ต์‹ฌ ๋กœ์ง์˜ ๋Œ€ํ•œ ๊ด€์‹ฌ์‚ฌ๋ฅผ ํ•ต์‹ฌ ๊ด€์‹ฌ ์‚ฌํ•ญ(Core Concern)์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

์€ํ–‰ ์—…๋ฌด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์˜ˆ์‹œ๋ฅผ ์œ„ํ•œ ๊ทธ๋ฆผ

 

์€ํ–‰ ์—…๋ฌด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์˜ˆ๋กœ ๋“ค์–ด๋ณด์ž. ๊ณ„์ขŒ๋ฅผ ์ด์ฒดํ•˜๊ณ , ์ž…๊ธˆ๊ณผ ์ถœ๊ธˆ์„ ํ•˜๊ณ , ์ด์ž๋ฅผ ๊ณ„์‚ฐํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ•ต์‹ฌ ๊ด€์‹ฌ ์‚ฌํ•ญ์— ํ•ด๋‹นํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์€ํ–‰ ์—…๋ฌด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ณด์•ˆ์— ๊ด€๋ จ๋œ ๋ถ€๋ถ„์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ „์ฒด์˜ ๊ณตํ†ต์œผ๋กœ ์ ์šฉ๋˜๋Š” ๊ธฐ๋Šฅ์ด๋ฏ€๋กœ, ๊ณตํ†ต ๊ด€์‹ฌ ์‚ฌํ•ญ(๋ถ€๊ฐ€์ ์ธ ๊ด€์‹ฌ ์‚ฌํ•ญ)์ด๋‹ค.

 

์ฆ‰, ํ•ต์‹ฌ ๊ด€์‹ฌ ์‚ฌํ•ญ์€ ์—…๋ฌด ๋กœ์ง์„ ํฌํ•จํ•œ ๊ฐ์ฒด๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ณ ์œ ์˜ ๊ธฐ๋Šฅ์„ ๋งํ•˜๋Š” ๊ฒƒ์ด๋ฉฐ, ๊ณตํ†ต ๊ด€์‹ฌ ์‚ฌํ•ญ(๋ถ€๊ฐ€์ ์ธ ๊ด€์‹ฌ ์‚ฌํ•ญ)์€ ๋ณด์•ˆ์ด๋‚˜ ํŠธ๋žœ์ง์…˜ ๋“ฑ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ๋ณด์กฐํ•˜๊ธฐ ์œ„ํ•ด ์ œ๊ณต๋˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค. ๊ณตํ†ต ๊ด€์‹ฌ ์‚ฌํ•ญ(๋ถ€๊ฐ€์ ์ธ ๊ด€์‹ฌ ์‚ฌํ•ญ)์€ ๋‹จ๋…์œผ๋กœ ์‚ฌ์šฉ๋˜์ง€ ์•Š๊ณ  ํ•ต์‹ฌ ๊ธฐ๋Šฅ ๋“ฑ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉ๋œ๋‹ค.

 

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

 

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

 

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


AOP์˜ ์žฅ์ 

 

์œ„์—์„œ ์‚ดํŽด ๋ณด์•˜๋“ฏ, AOP๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๋งˆ๋‹ค ์ƒ๊ฒจ๋‚œ ์ค‘๋ณต ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ฝ”๋“œ๊ฐ€ ๊ฐ„๊ฒฐํ•ด์ง€๊ณ , ์ดํ›„์— ์œ ์ง€ ๋ณด์ˆ˜๊ฐ€ ์‰ฌ์›Œ์ง„๋‹ค. ๊ทธ๋Ÿฌ๋ฉด์„œ ์ฝ”๋“œ์˜ ์žฌํ™œ์šฉ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.


AOP ์šฉ์–ด

1๏ธโƒฃ Aspect

2๏ธโƒฃ Advice

3๏ธโƒฃ Target

4๏ธโƒฃ Proxy

5๏ธโƒฃ JoinPoint

6๏ธโƒฃ PointCut

7๏ธโƒฃ Weaving

8๏ธโƒฃ Advisor

๋Œ“๊ธ€