๐ก ๊น์ํ๋์ ์คํ๋ง ํต์ฌ ์๋ฆฌ ๊ณ ๊ธํธ ๊ฐ์๋ฅผ ๋ฃ๊ณ ์ ๋ฆฌํ ๋ด์ฉ์
๋๋ค.
AOP ํต์ฌ ๊ธฐ๋ฅ๊ณผ ๋ถ๊ฐ ๊ธฐ๋ฅ
ํต์ฌ ๊ธฐ๋ฅ๊ณผ ๋ถ๊ฐ ๊ธฐ๋ฅ
์ ํ๋ฆฌ์ผ์ด์ ๋ก์ง์ ํฌ๊ฒ ํต์ฌ ๊ธฐ๋ฅ๊ณผ ๋ถ๊ฐ ๊ธฐ๋ฅ์ผ๋ก ๋๋ ์ ์๋ค.
- ํต์ฌ ๊ธฐ๋ฅ์ ํด๋น ๊ฐ์ฒด๊ฐ ์ ๊ณตํ๋ ๊ณ ์ ์ ๊ธฐ๋ฅ์ด๋ค. ์๋ฅผ ๋ค์ด์ OrderService์ ํต์ฌ ๊ธฐ๋ฅ์ ์ฃผ๋ฌธ ๋ก์ง์ด๋ค.
- ๋ถ๊ฐ ๊ธฐ๋ฅ์ ํต์ฌ ๊ธฐ๋ฅ์ ๋ณด์กฐํ๊ธฐ ์ํด ์ ๊ณต๋๋ ๊ธฐ๋ฅ์ด๋ค. ์๋ฅผ ๋ค์ด์ ๋ก๊ทธ ์ถ์ ๋ก์ง, ํธ๋์ญ์ ๊ธฐ๋ฅ์ด ์๋ค. ์ด๋ฌํ ๋ถ๊ฐ ๊ธฐ๋ฅ์ ๋จ๋ ์ผ๋ก ์ฌ์ฉ๋์ง ์๊ณ , ํต์ฌ ๊ธฐ๋ฅ๊ณผ ํจ๊ป ์ฌ์ฉ๋๋ค. ์๋ฅผ ๋ค์ด์ ๋ก๊ทธ ์ถ์ ๊ธฐ๋ฅ์ ์ด๋ค ํต์ฌ ๊ธฐ๋ฅ์ด ํธ์ถ๋์๋์ง ๋ก๊ทธ๋ฅผ ๋จ๊ธฐ๊ธฐ ์ํด ์ฌ์ฉํ๋ค. ๊ทธ๋ฌ๋๊น ๋ถ๊ฐ ๊ธฐ๋ฅ์ ์ด๋ฆ ๊ทธ๋๋ก ํต์ฌ ๊ธฐ๋ฅ์ ๋ณด์กฐํ๊ธฐ ์ํด ์กด์ฌํ๋ค.
์ฌ๋ฌ ๊ณณ์์ ๊ณตํต์ผ๋ก ์ฌ์ฉํ๋ ๋ถ๊ฐ ๊ธฐ๋ฅ
๋ณดํต ๋ถ๊ฐ ๊ธฐ๋ฅ์ ์ฌ๋ฌ ํด๋์ค์ ๊ฑธ์ณ์ ํจ๊ป ์ฌ์ฉ๋๋ค.
์๋ฅผ ๋ค์ด์ ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์ ํธ์ถ์ ๋ก๊น ํด์ผ ํ๋ ์๊ตฌ์ฌํญ์ ์๊ฐํด๋ณด์.
์ด๋ฌํ ๋ถ๊ฐ ๊ธฐ๋ฅ์ ํก๋จ ๊ด์ฌ์ฌ(cross-cutting concerns)๊ฐ ๋๋ค.
์ฝ๊ฒ ์ด์ผ๊ธฐํด์ ํ๋์ ๋ถ๊ฐ ๊ธฐ๋ฅ์ด ์ฌ๋ฌ ๊ณณ์ ๋์ผํ๊ฒ ์ฌ์ฉ๋๋ค๋ ๋ป์ด๋ค.

๋ถ๊ฐ ๊ธฐ๋ฅ ์ ์ฉ ๋ฌธ์
๊ทธ๋ฐ๋ฐ ์ด๋ฐ ๋ถ๊ฐ ๊ธฐ๋ฅ์ ์ฌ๋ฌ ๊ณณ์ ์ ์ฉํ๋ ค๋ฉด ๋๋ฌด ๋ฒ๊ฑฐ๋กญ๋ค. ์๋ฅผ ๋ค์ด์ ๋ถ๊ฐ ๊ธฐ๋ฅ์ ์ ์ฉํด์ผ ํ๋ ํด๋์ค๊ฐ 100๊ฐ๋ฉด 100๊ฐ ๋ชจ๋์ ๋์ผํ ์ฝ๋๋ฅผ ์ถ๊ฐํด์ผ ํ๋ค. ๋ถ๊ฐ ๊ธฐ๋ฅ์ ๋ณ๋์ ์ ํธ๋ฆฌํฐ ํด๋์ค๋ก ๋ง๋ ๋ค๊ณ ํด๋, ํด๋น ์ ํธ๋ฆฌํฐ ํด๋์ค๋ฅผ ํธ์ถํ๋ ์ฝ๋๊ฐ ๊ฒฐ๊ตญ ํ์ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ถ๊ฐ ๊ธฐ๋ฅ์ด ๊ตฌ์กฐ์ ์ผ๋ก ๋จ์ ํธ์ถ์ด ์๋๋ผ try~catch~finally๊ฐ์ ๊ตฌ์กฐ๊ฐ ํ์ํ๋ค๋ฉด ๋์ฑ ๋ณต์กํด์ง๋ค. (์: ์คํ ์๊ฐ ์ธก์ )
๋ ํฐ ๋ฌธ์ ๋ ์์ ์ด๋ค. ๋ง์ฝ ๋ถ๊ฐ ๊ธฐ๋ฅ์ ์์ ์ด ๋ฐ์ํ๋ฉด, 100๊ฐ์ ํด๋์ค ๋ชจ๋๋ฅผ ํ๋์ฉ ์ฐพ์๊ฐ๋ฉด์ ์์ ํด์ผ ํ๋ค. ์ฌ๊ธฐ์ ์ถ๊ฐ๋ก ๋ถ๊ฐ ๊ธฐ๋ฅ์ด ์ ์ฉ๋๋ ์์น๋ฅผ ๋ณ๊ฒฝํ๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น? ์๋ฅผ ๋ค์ด์ ๋ถ๊ฐ ๊ธฐ๋ฅ์ ๋ชจ๋ ์ปจํธ๋กค๋ฌ, ์๋น์ค, ๋ฆฌํฌ์งํ ๋ฆฌ์ ์ ์ฉํ๋ค๊ฐ, ๋ก๊ทธ๊ฐ ๋๋ฌด ๋ง์ด ๋จ์์ ์๋น์ค ๊ณ์ธต์๋ง ์ ์ฉํ๋ค๊ณ ์์ ํด์ผํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น? ๋ ์ ๋ง ์ ์ฝ๋๋ฅผ ๊ณ ์ณ์ผ ํ ๊ฒ์ด๋ค.
๋ถ๊ฐ ๊ธฐ๋ฅ ์ ์ฉ ๋ฌธ์ ๋ฅผ ์ ๋ฆฌํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
- ๋ถ๊ฐ ๊ธฐ๋ฅ์ ์ ์ฉํ ๋ ์์ฃผ ๋ง์ ๋ฐ๋ณต์ด ํ์ํ๋ค.
- ๋ถ๊ฐ ๊ธฐ๋ฅ์ด ์ฌ๋ฌ ๊ณณ์ ํผ์ ธ์ ์ค๋ณต ์ฝ๋๋ฅผ ๋ง๋ค์ด๋ธ๋ค.
- ๋ถ๊ฐ ๊ธฐ๋ฅ์ ๋ณ๊ฒฝํ ๋ ์ค๋ณต ๋๋ฌธ์ ๋ง์ ์์ ์ด ํ์ํ๋ค.
- ๋ถ๊ฐ ๊ธฐ๋ฅ์ ์ ์ฉ ๋์์ ๋ณ๊ฒฝํ ๋ ๋ง์ ์์ ์ด ํ์ํ๋ค.
์ํํธ์จ์ด ๊ฐ๋ฐ์์ ๋ณ๊ฒฝ ์ง์ ์ ํ๋๊ฐ ๋ ์ ์๋๋ก ์ ๋ชจ๋ํ ๋์ด์ผ ํ๋ค.
๊ทธ๋ฐ๋ฐ ๋ถ๊ฐ ๊ธฐ๋ฅ์ฒ๋ผ ํน์ ๋ก์ง์ ์ ํ ๋ฆฌ์ผ์ด์ ์ ๋ฐ์ ์ ์ฉํ๋ ๋ฌธ์ ๋ ์ผ๋ฐ์ ์ธ OOP ๋ฐฉ์์ผ๋ก๋ ํด๊ฒฐ์ด ์ด๋ ต๋ค.
https://www.inflearn.com/questions/551417
์ ์คํํธ
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ถ๊ฐ ๊ธฐ๋ฅ์ ํต์ฌ ๊ธฐ๋ฅ์์ ๋ถ๋ฆฌํ๊ณ ํ ๊ณณ์์ ๊ด๋ฆฌํ๋๋ก ํ๋ค. ๊ทธ๋ฆฌ๊ณ ํด๋น ๋ถ๊ฐ ๊ธฐ๋ฅ์ ์ด๋์ ์ ์ฉํ ์ง ์ ํํ๋ ๊ธฐ๋ฅ๋ ๋ง๋ค์๋ค. ์ด๋ ๊ฒ ๋ถ๊ฐ ๊ธฐ๋ฅ๊ณผ ๋ถ๊ฐ ๊ธฐ๋ฅ์ ์ด๋์ ์ ์ฉํ ์ง ์ ํํ๋ ๊ธฐ๋ฅ์ ํฉํด์ ํ๋์ ๋ชจ๋๋ก ๋ง๋ค์๋๋ฐ ์ด๊ฒ์ด ๋ฐ๋ก ์ ์คํํธ(aspect)์ด๋ค. ์ ์คํํธ๋ ์ฝ๊ฒ ์ด์ผ๊ธฐํด์ ๋ถ๊ฐ ๊ธฐ๋ฅ๊ณผ, ํด๋น ๋ถ๊ฐ ๊ธฐ๋ฅ์ ์ด๋์ ์ ์ฉํ ์ง ์ ์ํ ๊ฒ์ด๋ค. ์๋ฅผ ๋ค์ด์ ๋ก๊ทธ ์ถ๋ ฅ ๊ธฐ๋ฅ์ ๋ชจ๋ ์ปจํธ๋กค๋ฌ์ ์ ์ฉํด๋ผ ๋ผ๋ ๊ฒ์ด ์ ์๋์ด ์๋ค.
๊ทธ๋ ๋ค ๋ฐ๋ก ์ฐ๋ฆฌ๊ฐ ์ด์ ์ ์์๋ณธ @Aspect ๋ฐ๋ก ๊ทธ๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์คํ๋ง์ด ์ ๊ณตํ๋ ์ด๋๋ฐ์ด์ ๋ ์ด๋๋ฐ์ด์ค(๋ถ๊ฐ ๊ธฐ๋ฅ)๊ณผ ํฌ์ธํธ์ปท(์ ์ฉ ๋์)์ ๊ฐ์ง๊ณ ์์ด์ ๊ฐ๋ ์ ํ๋์ ์ ์คํํธ์ด๋ค. ์ ์คํํธ๋ ์ฐ๋ฆฌ๋ง๋ก ํด์ํ๋ฉด ๊ด์ ์ด๋ผ๋ ๋ป์ธ๋ฐ, ์ด๋ฆ ๊ทธ๋๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ๋ผ๋ณด๋ ๊ด์ ์ ํ๋ํ๋์ ๊ธฐ๋ฅ์์ ํก๋จ ๊ด์ฌ์ฌ(cross-cutting concerns) ๊ด์ ์ผ๋ก ๋ฌ๋ฆฌ ๋ณด๋ ๊ฒ์ด๋ค. ์ด๋ ๊ฒ ์ ์คํํธ๋ฅผ ์ฌ์ฉํ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ ๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ AOP(Aspect-Oriented Programming)์ด๋ผํ๋ค
์ฐธ๊ณ ๋ก AOP๋ OOP๋ฅผ ๋์ฒดํ๊ธฐ ์ํ ๊ฒ์ด ์๋๋ผ ํก๋จ ๊ด์ฌ์ฌ๋ฅผ ๊น๋ํ๊ฒ ์ฒ๋ฆฌํ๊ธฐ ์ด๋ ค์ด OOP์ ๋ถ์กฑํ ๋ถ๋ถ์ ๋ณด์กฐํ๋ ๋ชฉ์ ์ผ๋ก ๊ฐ๋ฐ๋์๋ค.
AspectJ ํ๋ ์์ํฌ
AOP์ ๋ํ์ ์ธ ๊ตฌํ์ผ๋ก AspectJ ํ๋ ์์ํฌ(https://www.eclipse.org/aspectj/)๊ฐ ์๋ค.
๋ฌผ๋ก ์คํ๋ง๋ AOP๋ฅผ ์ง์ํ์ง๋ง ๋๋ถ๋ถ AspectJ์ ๋ฌธ๋ฒ์ ์ฐจ์ฉํ๊ณ , AspectJ๊ฐ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ ์ผ๋ถ๋ง ์ ๊ณตํ๋ค.
AspectJ ํ๋ ์์ํฌ๋ ์ค์ค๋ก๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ค๋ช ํ๋ค.
- ์๋ฐ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ํ ์๋ฒฝํ ๊ด์ ์งํฅ ํ์ฅ
- ํก๋จ ๊ด์ฌ์ฌ์ ๊น๋ํ ๋ชจ๋ํ
- ์ค๋ฅ ๊ฒ์ฌ ๋ฐ ์ฒ๋ฆฌ
- ๋๊ธฐํ
- ์ฑ๋ฅ ์ต์ ํ(์บ์ฑ)
- ๋ชจ๋ํฐ๋ง ๋ฐ ๋ก๊น
AOP ์ ์ฉ ๋ฐฉ์
AOP๋ฅผ ์ฌ์ฉํ๋ฉด ํต์ฌ ๊ธฐ๋ฅ๊ณผ ๋ถ๊ฐ ๊ธฐ๋ฅ์ด ์ฝ๋์ ์์ ํ ๋ถ๋ฆฌ๋์ด์ ๊ด๋ฆฌ๋๋ค.
๊ทธ๋ ๋ค๋ฉด AOP๋ฅผ ์ฌ์ฉํ ๋ ๋ถ๊ฐ ๊ธฐ๋ฅ ๋ก์ง์ ์ด๋ค ๋ฐฉ์์ผ๋ก ์ค์ ๋ก์ง์ ์ถ๊ฐ๋ ์ ์์๊น?
ํฌ๊ฒ 3๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค.
- ์ปดํ์ผ ์์
- ํด๋์ค ๋ก๋ฉ ์์
- ๋ฐํ์ ์์ (ํ๋ก์)
์ปดํ์ผ ์์

.java ์์ค ์ฝ๋๋ฅผ ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํด์ .class๋ฅผ ๋ง๋๋ ์์ ์ ๋ถ๊ฐ ๊ธฐ๋ฅ ๋ก์ง์ ์ถ๊ฐํ ์ ์๋ค. ์ด๋๋ AspectJ๊ฐ ์ ๊ณตํ๋ ํน๋ณํ ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค. ์ปดํ์ผ ๋ .class๋ฅผ ๋์ปดํ์ผ ํด๋ณด๋ฉด ์ ์คํํธ ๊ด๋ จ ํธ์ถ ์ฝ๋๊ฐ ๋ค์ด๊ฐ๋ค.
์ดํดํ๊ธฐ ์ฝ๊ฒ ํ์ด์ ์ด์ผ๊ธฐํ๋ฉด ๋ถ๊ฐ ๊ธฐ๋ฅ ์ฝ๋๊ฐ ํต์ฌ ๊ธฐ๋ฅ์ด ์๋ ์ปดํ์ผ๋ ์ฝ๋ ์ฃผ๋ณ์ ์ค์ ๋ก ๋ถ์ด ๋ฒ๋ฆฐ๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค. AspectJ ์ปดํ์ผ๋ฌ๋ Aspect๋ฅผ ํ์ธํด์ ํด๋น ํด๋์ค๊ฐ ์ ์ฉ ๋์์ธ์ง ๋จผ์ ํ์ธํ๊ณ , ์ ์ฉ ๋์์ธ ๊ฒฝ์ฐ์ ๋ถ๊ฐ ๊ธฐ๋ฅ ๋ก์ง์ ์ ์ฉํ๋ค. ์ฐธ๊ณ ๋ก ์ด๋ ๊ฒ ์๋ณธ ๋ก์ง์ ๋ถ๊ฐ ๊ธฐ๋ฅ ๋ก์ง์ด ์ถ๊ฐ๋๋ ๊ฒ์ ์๋น(Weaving)์ด๋ผ ํ๋ค.
์ปดํ์ผ ์์ - ๋จ์
์ปดํ์ผ ์์ ์ ๋ถ๊ฐ ๊ธฐ๋ฅ์ ์ ์ฉํ๋ ค๋ฉด ํน๋ณํ ์ปดํ์ผ๋ฌ๋ ํ์ํ๊ณ ๋ณต์กํ๋ค.
ํด๋์ค ๋ก๋ฉ ์์

์๋ฐ๋ฅผ ์คํํ๋ฉด ์๋ฐ ์ธ์ด๋ .class ํ์ผ์ JVM ๋ด๋ถ์ ํด๋์ค ๋ก๋์ ๋ณด๊ดํ๋ค.
์ด๋ ์ค๊ฐ์์ .class ํ์ผ์ ์กฐ์ํ ๋ค์ JVM์ ์ฌ๋ฆด ์ ์๋ค.
์๋ฐ์ธ์ด๋ .class๋ฅผJVM์ ์ ์ฅํ๊ธฐ ์ ์ ์กฐ์ํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
์ฐธ๊ณ ๋ก ์ ๋ง์ ๋ชจ๋ํฐ๋ง ํด๋ค์ด ์ด ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
์ด ์์ ์ ์ ์คํํธ๋ฅผ ์ ์ฉํ๋ ๊ฒ์ ๋ก๋ ํ์ ์๋น์ด๋ผ ํ๋ค.
ํด๋์ค ๋ก๋ฉ ์์ - ๋จ์
๋ก๋ ํ์ ์๋น์ ์๋ฐ๋ฅผ ์คํํ ๋ ํน๋ณํ ์ต์ ( java -javaagent )์ ํตํด ํด๋์ค ๋ก๋ ์กฐ์๊ธฐ๋ฅผ ์ง์ ํด์ผ ํ๋ ๋ฐ, ์ด ๋ถ๋ถ์ด ๋ฒ๊ฑฐ๋กญ๊ณ ์ด์ํ๊ธฐ ์ด๋ ต๋ค.
๋ฐํ์ ์์

๋ฐํ์ ์์ ์ ์ปดํ์ผ๋ ๋ค ๋๋๊ณ , ํด๋์ค ๋ก๋์ ํด๋์ค๋ ๋ค ์ฌ๋ผ๊ฐ์ ์ด๋ฏธ ์๋ฐ๊ฐ ์คํ๋๊ณ ๋ ๋ค์์ ๋งํ๋ค. ์๋ฐ์ ๋ฉ์ธ( main ) ๋ฉ์๋๊ฐ ์ด๋ฏธ ์คํ๋ ๋ค์์ด๋ค. ๋ฐ๋ผ์ ์๋ฐ ์ธ์ด๊ฐ ์ ๊ณตํ๋ ๋ฒ์ ์์์ ๋ถ๊ฐ ๊ธฐ๋ฅ์ ์ ์ฉํด์ผ ํ๋ค. ์คํ๋ง๊ณผ ๊ฐ์ ์ปจํ ์ด๋์ ๋์์ ๋ฐ๊ณ ํ๋ก์์ DI, ๋น ํฌ์คํธ ํ๋ก์ธ์ ๊ฐ์ ๊ฐ๋ ๋ค์ ์ด ๋์ํด์ผ ํ๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ต์ข ์ ์ผ๋ก ํ๋ก์๋ฅผ ํตํด ์คํ๋ง ๋น์ ๋ถ๊ฐ ๊ธฐ๋ฅ์ ์ ์ฉํ ์ ์๋ค. ๊ทธ๋ ๋ค. ์ง๊ธ๊น์ง ์ฐ๋ฆฌ๊ฐ ํ์ตํ ๊ฒ์ด ๋ฐ๋ก ํ๋ก์ ๋ฐฉ์์ AOP์ด๋ค.
ํ๋ก์๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ AOP ๊ธฐ๋ฅ์ ์ผ๋ถ ์ ์ฝ์ด ์๋ค. ํ์ง๋ง ํน๋ณํ ์ปดํ์ผ๋ฌ๋, ์๋ฐ๋ฅผ ์คํํ ๋ ๋ณต์กํ ์ต์ ๊ณผ ํด๋์ค ๋ก๋ ์กฐ์๊ธฐ๋ฅผ ์ค์ ํ์ง ์์๋ ๋๋ค. ์คํ๋ง๋ง ์์ผ๋ฉด ์ผ๋ง๋ ์ง AOP๋ฅผ ์ ์ฉํ ์ ์๋ค.
๋ถ๊ฐ ๊ธฐ๋ฅ์ด ์ ์ฉ๋๋ ์ฐจ์ด๋ฅผ ์ ๋ฆฌํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
- ์ปดํ์ผ ์์ : ์ค์ ๋์ ์ฝ๋์ ์ ์คํฉํธ๋ฅผ ํตํ ๋ถ๊ฐ ๊ธฐ๋ฅ ํธ์ถ ์ฝ๋๊ฐ ํฌํจ๋๋ค. AspectJ๋ฅผ ์ง์ ์ฌ์ฉํด์ผ ํ ๋ค.
- ํด๋์ค ๋ก๋ฉ ์์ : ์ค์ ๋์ ์ฝ๋์ ์ ์คํฉํธ๋ฅผ ํตํ ๋ถ๊ฐ ๊ธฐ๋ฅ ํธ์ถ ์ฝ๋๊ฐ ํฌํจ๋๋ค. AspectJ๋ฅผ ์ง์ ์ฌ์ฉํด์ผ ํ๋ค.
- ๋ฐํ์ ์์ : ์ค์ ๋์ ์ฝ๋๋ ๊ทธ๋๋ก ์ ์ง๋๋ค. ๋์ ์ ํ๋ก์๋ฅผ ํตํด ๋ถ๊ฐ ๊ธฐ๋ฅ์ด ์ ์ฉ๋๋ค. ๋ฐ๋ผ์ ํญ์ ํ๋ก์๋ฅผ ํตํด์ผ ๋ถ๊ฐ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋ค. ์คํ๋ง AOP๋ ์ด ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
AOP ์ ์ฉ ์์น
AOP๋ ์ง๊ธ๊น์ง ํ์ตํ ๋ฉ์๋ ์คํ ์์น ๋ฟ๋ง ์๋๋ผ ๋ค์๊ณผ ๊ฐ์ ๋ค์ํ ์์น์ ์ ์ฉํ ์ ์๋ค.
- ์ ์ฉ ๊ฐ๋ฅ ์ง์ (์กฐ์ธ ํฌ์ธํธ): ์์ฑ์, ํ๋ ๊ฐ ์ ๊ทผ, static ๋ฉ์๋ ์ ๊ทผ, ๋ฉ์๋ ์คํ
- ์ด๋ ๊ฒ AOP๋ฅผ ์ ์ฉํ ์ ์๋ ์ง์ ์ ์กฐ์ธ ํฌ์ธํธ(Join point)๋ผ ํ๋ค.
- AspectJ๋ฅผ ์ฌ์ฉํด์ ์ปดํ์ผ ์์ ๊ณผ ํด๋์ค ๋ก๋ฉ ์์ ์ ์ ์ฉํ๋ AOP๋ ๋ฐ์ดํธ์ฝ๋๋ฅผ ์ค์ ์กฐ์ํ๊ธฐ ๋๋ฌธ์ ํด๋น ๊ธฐ๋ฅ์ ๋ชจ๋ ์ง์ ์ ๋ค ์ ์ฉํ ์ ์๋ค.
- ํ๋ก์ ๋ฐฉ์์ ์ฌ์ฉํ๋ ์คํ๋ง AOP๋ ๋ฉ์๋ ์คํ ์ง์ ์๋ง AOP๋ฅผ ์ ์ฉํ ์ ์๋ค.
- ํ๋ก์๋ ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ ๊ฐ๋ ์ผ๋ก ๋์ํ๋ค. ๋ฐ๋ผ์ ์์ฑ์๋ static ๋ฉ์๋, ํ๋ ๊ฐ ์ ๊ทผ์๋ ํ๋ก์ ๊ฐ๋ ์ด ์ ์ฉ๋ ์ ์๋ค.
- ํ๋ก์๋ฅผ ์ฌ์ฉํ๋ ์คํ๋ง AOP์ ์กฐ์ธ ํฌ์ธํธ๋ ๋ฉ์๋ ์คํ์ผ๋ก ์ ํ๋๋ค. ํ๋ก์๋ ๋ฉ์๋๋ฅผ ์คํํ๋ ์ง์ ์์๋ง ๋ค์ ํ๊ฒ์ ํธ์ถํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ํ๋ก์ ๋ฐฉ์์ ์ฌ์ฉํ๋ ์คํ๋ง AOP๋ ์คํ๋ง ์ปจํ ์ด๋๊ฐ ๊ด๋ฆฌํ ์ ์๋ ์คํ๋ง ๋น์๋ง AOP๋ฅผ ์ ์ฉํ ์ ์๋ค. ์คํ๋ง ์ปจํ ์ด๋์ ๋ฑ๋กํ์ง ์๊ณ ๊ทธ๋ฅ ๋จ์ํ new๋ก ์์ฑํ ๊ฐ์ฒด์๋ AOP๋ฅผ ์ ์ฉํ ์ ์๋ค.
AOP ์ฉ์ด ์ ๋ฆฌ
์กฐ์ธ ํฌ์ธํธ(Join point)
- ์ด๋๋ฐ์ด์ค๊ฐ ์ ์ฉ๋ ์ ์๋ ์์น, ๋ฉ์๋ ์คํ, ์์ฑ์ ํธ์ถ, ํ๋ ๊ฐ ์ ๊ทผ, static ๋ฉ์๋ ์ ๊ทผ ๊ฐ์ ํ๋ก๊ทธ๋จ ์คํ ์ค ์ง์
- ๊ทธ๋ฅ ์กฐ์ธ ํฌ์ธํธ๋ ์ถ์์ ์ธ ๊ฐ๋ ์ด๋ค. AOP๋ฅผ ์ ์ฉํ ์ ์๋ ์์น๋ผ๊ณ ๋ณด๋ฉด ๋๋ค.
- ์คํ๋ง AOP๋ ํ๋ก์ ๋ฐฉ์์ ์ฌ์ฉํ๋ฏ๋ก ์กฐ์ธ ํฌ์ธํธ๋ ํญ์ ๋ฉ์๋ ์คํ ์ง์ ์ผ๋ก ์ ํ๋๋ค.
- ๋ฉ์๋ ์คํ ์ง์ ์ AOP๋ฅผ ๊ฑธ ์ ์๋ค๊ณ ๋ณด๋ฉด ๋๋ค.
ํฌ์ธํธ์ปท(Pointcut)
- ์กฐ์ธ ํฌ์ธํธ ์ค์์ ์ด๋๋ฐ์ด์ค๊ฐ ์ ์ฉ๋ ์์น๋ฅผ ์ ๋ณํ๋ ๊ธฐ๋ฅ
- ์ฃผ๋ก AspectJ ํํ์์ ์ฌ์ฉํด์ ์ง์
- ํ๋ก์๋ฅผ ์ฌ์ฉํ๋ ์คํ๋ง AOP๋ ๋ฉ์๋ ์คํ ์ง์ ๋ง ํฌ์ธํธ์ปท์ผ๋ก ์ ๋ณ ๊ฐ๋ฅ
ํ์ผ(Target)
- ์ด๋๋ฐ์ด์ค๋ฅผ ๋ฐ๋ ๊ฐ์ฒด, ํฌ์ธํธ์ปท์ผ๋ก ๊ฒฐ์
- ์ด๋๋ฐ์ด์ค(๋ถ๊ฐ ๊ธฐ๋ฅ)๋ฅผ ์ ์ฉ ๋ฐ๋ ๊ฐ์ฒด.
์ด๋๋ฐ์ด์ค(Advice)
- ๋ถ๊ฐ ๊ธฐ๋ฅ(๊ทธ๋ฅ ๋ถ๊ฐ ๊ธฐ๋ฅ์ด๋ผ๋ ๋ณด๋ฉด ๋๋ค.)
- ํน์ ์กฐ์ธ ํฌ์ธํธ์์ Aspect์ ์ํด ์ทจํด์ง๋ ์กฐ์น
- Around(์ฃผ๋ณ), Before(์ ), After(ํ)์ ๊ฐ์ ๋ค์ํ ์ข ๋ฅ์ ์ด๋๋ฐ์ด์ค๊ฐ ์์
์ ์คํํธ(Aspect)
- ์ด๋๋ฐ์ด์ค + ํฌ์ธํธ์ปท์ ๋ชจ๋ํ ํ ๊ฒ
- @Aspect๋ฅผ ์๊ฐํ๋ฉด ๋จ
- ์ฌ๋ฌ ์ด๋๋ฐ์ด์ค์ ํฌ์ธํธ ์ปท์ด ํจ๊ป ์กด์ฌ
์ด๋๋ฐ์ด์ (Advisor)
- ํ๋์ ์ด๋๋ฐ์ด์ค์ ํ๋์ ํฌ์ธํธ ์ปท์ผ๋ก ๊ตฌ์ฑ
- ์ด๋๋ฐ์ด์ ๋์คํ๋ง AOP์์๋ง ์ฌ์ฉํ๋ ์ฉ์ด๋ค.
- ์คํ๋ง AOP์์๋ง ์ฌ์ฉ๋๋ ํน๋ณํ ์ฉ์ด
์๋น(Weaving)
- ํฌ์ธํธ์ปท์ผ๋ก ๊ฒฐ์ ํ ํ์ผ์ ์กฐ์ธ ํฌ์ธํธ์ ์ด๋๋ฐ์ด์ค๋ฅผ ์ ์ฉํ๋ ๊ฒ
- ์๋น์ ํตํด ํต์ฌ ๊ธฐ๋ฅ ์ฝ๋์ ์ํฅ์ ์ฃผ์ง ์๊ณ ๋ถ๊ฐ ๊ธฐ๋ฅ์ ์ถ๊ฐ ํ ์ ์์
- AOP ์ ์ฉ์ ์ํด ์ ์คํํธ๋ฅผ ๊ฐ์ฒด์ ์ฐ๊ฒฐํ ์ํ
- ์ปดํ์ผ ํ์(AspectJ compiler)
- ๋ก๋ ํ์
- ๋ฐํ์, ์คํ๋ง AOP๋ ๋ฐํ์, ํ๋ก์ ๋ฐฉ์
AOP ํ๋ก์
- AOP ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ํด ๋ง๋ ํ๋ก์ ๊ฐ์ฒด, ์คํ๋ง์์ AOP ํ๋ก์๋ JDK ๋์ ํ๋ก์ ๋๋ CGLIB ํ๋ก์์ด๋ค.
'Spring > AOP' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํฌ์ธํธ์ปท ์ง์์ (2) | 2024.11.14 |
---|---|
์คํ๋ง AOP ๊ตฌํ (0) | 2024.11.13 |
@Aspect AOP (0) | 2024.11.12 |
๋น ํ์ฒ๋ฆฌ๊ธฐ (0) | 2024.11.12 |
ํฌ์ธํธ์ปท, ์ด๋๋ฐ์ด์ค, ์ด๋๋ฐ์ด์ (0) | 2024.11.11 |