06. AOP (Aspect Oriented Programming)
์ฌ๋ฌ ๊ฐ์ฒด์ ๊ณตํต์ ์ผ๋ก ์ ์ฉํ ์ ์๋ ๊ฐ๋ ์ ๋ฐ๋ก ์ ์ํด์ ์ด๋ ธํ ์ด์ ๋ฑ์ผ๋ก ๊ฐ๊ฐ์ ํด๋์ค์ ์ ์ฉ์์ผ์ฃผ๋ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฒ์ด๋ค. ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ์ ๋์ฌ์ฃผ๊ณ ํต์ฌ ๊ด์ฌ ์ฌํญ(์๋น์ค) ์ ๊น๋ํ๊ฒ ์ ์งํ ์ ์๋ค.
1๏ธโฃ ย AOP ! ์ ์ฒด์ ์ธ ํ๋ฆ ๋ฐ ์ฉ์ด ์ ๋ฆฌ
์ถ์ฒ: ๊น์ํ์ ์คํ๋ง ์
๋ฌธ ๊ฐ์์๋ฃ (์ธํ๋ฐ)
Spring AOP ๋ ๋ฐํ์ ๋ (์๋ฐ ํ์ผ์ด ์ปดํ์ผ๋๊ณ JVM์ ๋ก๋๋๊ณ ๋์ ์คํ์ค์ผ ๋) ์คํ๋๋ค.
๋ฐํ์ ๋๋ฉด ์ปจํธ๋กค๋ฌ๋ ํ๋ก์ ๊ฐ์ฒด (๋ถ๊ฐ๊ธฐ๋ฅ์ ์ ์ํ ๊ฐ์ฒด์ด๋ค. ํธ์์ ๊ฐ์ง ๊ฐ์ฒด๋ผ๊ณ ์๊ฐํ๋ฉด ์ดํด๊ฐ ์ ๋ ๊ฒ ๊ฐ๋ค) ๋ฅผ ๋ถ๋ฌ์ค๊ณ join point ์์ ๋ถ๊ฐ๊ธฐ๋ฅ์ ์คํ์ํจ ๋ค ์ง์ง ๊ฐ์ฒด๋ฅผ ํธ์ถํ๋ค.
ย ย ย ย ย ๐ ย ์ฉ์ด ์ฌ์ ย ๐
Aspect : ์ฌ๋ฌ ๊ฐ์ฒด์ ๊ณตํต์ผ๋ก ์ ์ฉ๋๋ ๊ธฐ๋ฅ. advise + point cut์ ๋ชจ๋ํํ ๊ฒ์ด๋ค.
Join point : ์ดํ๋ฆฌ์ผ์ด์ ์คํ ํ๋ฆ์์ AOP ๋ฅผ ์ ์ฉํ ์ ์๋ ๋ถ๋ถ์ ๋งํ๋ค. ์คํ๋ง AOP ๋ ํ๋ก์ ๋ฐฉ์์ ์ฌ์ฉํ๋ฏ๋ก ์กฐ์ธ ํฌ์ธํธ๋ ๋ฉ์๋ ์คํ ์ง์ ์ผ๋ก ์ ํ๋๋ค.
Advice : ์กฐ์ธํฌ์ธํธ์์ ์ํ๋๋ ์ฝ๋๋ฅผ ๋งํ๋ค.
Point cut : ์กฐ์ธํฌ์ธํธ ์ค์์๋ ์ด๋๋ฐ์ด์ค๊ฐ ์ ์ฉ๋ ์์น๋ฅผ ์ ๋ณํ๋ ๊ธฐ๋ฅ์ ํ๋ค.
weaving : ํฌ์ธํธ์ปท์์ ๊ฒฐ์ ํ ํ๊ฒ์ ์ด๋๋ฐ์ด์ค๋ฅผ ์ ์ฉํ๋ ๊ฒ์ ๋งํ๋ค.
AOP proxy : ์๋ ๊ฐ์ฒด๋ฅผ ๊ฐ์ธ๊ณ ์๋ ๊ฐ์ฒด. AOP ๋ถ๊ฐ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๊ฐ์ฒด์ด๋ค.
target : AOP ๋ถ๊ฐ๊ธฐ๋ฅ์ ์ ์ฉํ ๋์.
Advisor : ํ๋์ advise์ ํ๋์ point cut์ผ๋ก ๊ตฌ์ฑ๋๋ค.
๐๐ปโโ๏ธ ย ์ ๋ชจ๋ฅด๊ฒ ๋คโฆ ์ค์ตํ๋ฉฐ ์ดํดํด๋ณด์ !
๐ญ โฆ์นดํธ์ โฆ
AOP ์ธ ใ กใน๋์ค์ @Aspect ๊ฑธ๊ณ ใด ๊ทธ ํด๋์ฌ๋ฅด ๋น์ผ๋ก ๋ฑ๋กํด์ผํ๋ค (๋น์ฐํ ๊ทธ๋์ผ ์ฌ ์ ์์ง) ํด๋น ๋ฉ์๋์ @Around ์ฐ๊ณ ์ ์ฉ๋ฒ์ excution ์จ์ค์ผํจ.
ํธ์ถ์ด ๋ ๋๋ง๋ค ํ๋ก์. ๊ฐ์ง ์๋น์ค(proxy)๋ฅผ ์คํํ๋ค. join.proceed..?๊ฐ ์ฌ๊ธฐ์ ๊ธฐ๋ฅ?