๐Ÿ”™๋’ค๋กœ๊ฐ€๊ธฐ

์Šคํ”„๋ง AOP๋Š” Java ๊ธฐ๋ฐ˜์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ Aspect-Oriented Programming(AOP) ์ง€์›์„ ์ œ๊ณตํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ ์ค‘ ํ•˜๋‚˜์ด๋‹ค. Spring Framework์˜ ์ผ๋ถ€๋กœ ๊ฐœ๋ฐœ๋˜์—ˆ์œผ๋ฉฐ, ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ์™€ ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ ๋„๋ชจํ•œ๋‹ค.

Aspect-Oriented Programming์ด๋ž€?

Aspect-Oriented Programming(AOP)์€ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํ•œ ํŒจ๋Ÿฌ๋‹ค์ž„์œผ๋กœ, ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ(cross-cutting concerns)๋ฅผ ๋ชจ๋“ˆํ™”ํ•˜๊ณ  ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ด๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•œ๋‹ค.

ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ๋ž€?

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


์Šคํ”„๋ง AOP์˜ ๊ตฌ์„ฑ ์š”์†Œ

Aspect

ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ๋ฅผ ์ •์˜ํ•œ ๋ชจ๋“ˆ๋กœ, Advice์™€ Pointcut์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

Join Point

ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ๊ฐ€ ์ ์šฉ๋˜๋Š” ์ง€์ ์œผ๋กœ, ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ์ด๋‚˜ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋“ฑ์ด ๋  ์ˆ˜ ์žˆ๋‹ค.

Advice

์‹ค์ œ ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ์˜ ์ฝ”๋“œ๋กœ, Before, After, Around ๋“ฑ ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ ์‹คํ–‰ ์‹œ์ ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

Pointcut

์–ด๋–ค Join Point์— Advice๊ฐ€ ์ ์šฉ๋ ์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ํ‘œํ˜„์‹์ด๋‹ค.

Target

Advice๊ฐ€ ์ ์šฉ๋˜๋Š” ๋Œ€์ƒ ๊ฐ์ฒด๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

Proxy

Target ๊ฐ์ฒด์— Advice๋ฅผ ์ ์šฉํ•œ ํ›„ ์ƒ์„ฑ๋˜๋Š” ๊ฐ์ฒด๋กœ, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ์ฒด์ด๋‹ค.