AOP(1) - AOP๋
Last updated
Last updated
AOP(Aspect Oriented Programming)๋ ๊ธฐ๋ฅ์ ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ๊ณตํต๋ชจ๋(๋ณด์์ธ์ฆ, ๋ก๊น ๋ฑ)๋ก ๊ตฌ๋ถํ๊ณ , ํต์ฌ ๋ก์ง์ ์ํฅ์ ๋ฏธ์น์ง ์๊ณ ์ฌ์ด์ฌ์ด์ ๊ณตํต๋ชจ๋์ ํจ๊ณผ์ ์ผ๋ก ์ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค.
์ฝ๋ ๋ฐ์์ ์ค์ ๋๋ค๋ ๊ฒ์ด ํต์ฌ์ด๋ฉฐ, ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒด์ ๊ฑธ์ณ ์ฌ์ฉ๋๋ ๊ธฐ๋ฅ์ ์ฌ์ฌ์ฉํ ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค.
ํต์ฌ๊ธฐ๋ฅ์ ๊ด์ ์์ ๋ณด์์ ๋, BoardService, UserService, XXXService๋ ๊ณตํต๋ ์์๊ฐ ์๋ค. ํ์ง๋ง, ์ด ๊ด์ ์ ๋ถ๊ฐ๊ธฐ๋ฅ ๊ด์ ์์ ๋ฐ๋ผ๋ณด๋ฉด ๊ฐ๊ฐ์ Service๋ ์ํ์๊ฐ์ ์ธก์ ํ๋ before()์ after()๊ฐ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉ๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ฆ, AOP๋ ๊ธฐ์กด์ OOP์์ ๋ฐ๋ผ๋ณด๋ ๊ด์ ์ ๋ถ๊ฐ์ ์ธ ์ธก๋ฉด์์ ๋ณด์์ ๋ ๊ณตํต์ ์ธ ์ธก๋ฉด์ ์ถ์ถํ์๋ ๊ฒ์ด๋ค. ์ด๋, ๊ฐ๋ก(ํก๋จ) ์์ญ์ ๊ณตํต๋ ๋ถ๋ถ์ ์๋๋ค๊ณ ํ์ฌ Cross-Cutting ์ด๋ผ ๋ถ๋ฅด๊ธฐ๋ ํ๋ค.
๊ฐ๋จํ ๋ฉ์๋ ์ฑ๋ฅ ๊ฒ์ฌ
DB์ ๋ค๋์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ณ ๋นผ๋ ๋ฑ์ ๋ฐฐ์น ์์ ์ ๋ํ ์๊ฐ ์ธก์
Transaction ์ฒ๋ฆฌ
๋งค๋ฒ try catch
๋ฌธ์ ์ฝ๋๋ ๋ฒ๊ฑฐ๋กญ๊ณ ์์ค๋ฅผ ๋์ฑ ๋ณต์กํ๊ฒ ํ๋ค.
์์ธ๋ฐํ
๊ตฌ์กฐ๊ฐ ์ข์ง ์์ ์์ธ๊ฐ ๋ฐ์ํ์์๋ ์ ์ ์๋์ด ์๋ ์์ธ ๊ณ์ธต ๊ตฌ์กฐ๋ก ๋ณํํ๊ณ ์ถ์ ๊ฒฝ์ฐ
์ํคํ ์ฒ ๊ฒ์ฆ
๊ธฐํ(๋ก๊น , ๋ณด์)
AOP ์ฉ์ด
์ค๋ช
Target(ํ๊ฒ)
Aspect(๋ถ๊ฐ๊ธฐ๋ฅ)์ ๋ถ์ฌํ ๋์์ผ๋ก ํต์ฌ ๊ธฐ๋ฅ์ ๋ด๋น
Aspect
๋ถ๊ฐ๊ธฐ๋ฅ ๋ชจ๋, ํต์ฌ๊ธฐ๋ฅ์ ๋ถ๊ฐ๋์ด ์๋ฏธ๋ฅผ ๊ฐ๋ ํน๋ณํ ๋ชจ๋ Advice + PointCut์ผ๋ก ์ด๋ฃจ์ด์ ธ์๋ค. JoinPoint๋ฅผ ๊ธฐ์ค์ผ๋ก ์ธํฐ์ ํฐ ์ฒด์ธ์ด ์ ์ง๋๋ฏ๋ก, ํ๋์ ์กฐ์ธํฌ์ธํธ์ ์ฌ๋ฌ ๊ฐ์ advice ์ ์ฉ ๊ฐ๋ฅ
Advice
์ค์ง์ ์ผ๋ก ๋ถ๊ฐ ๊ธฐ๋ฅ์ ๋ด์ ๊ตฌํ์ฒด์ด๋ค. ํน์ JoinPoint์ Aspect๊ฐ ์ํํ๋ ํ์๋ก์ @around, @before, @after ๋ฑ ๋ค์ํ ํ์ ์ด ์กด์ฌํ๋ค. Target์ ์ข ์๋์ง ์๊ธฐ ๋๋ฌธ์ ์์ํ๊ฒ ๋ถ๊ฐ ๊ธฐ๋ฅ์๋ง ์ง์คํ ์ ์๋ค.
JoinPoint
Advice๊ฐ ์ ์ฉ๋ ์ ์๋ ์์น (๋ผ์ด๋ค ์ ์๋ ์ง์ . ๋ฉ์๋ ์ง์ ์ง์ , ์์ฑ์ ํธ์ถ ์์ , ํ๋์์ ๊ฐ์ ๊บผ๋ด์ฌ ๋ ๋ฑ) ๋ค์ํ ์์ ์ ์ ์ฉ๊ฐ๋ฅ
PointCut
Advice(๋ถ๊ฐ ๊ธฐ๋ฅ)๊ฐ ์ ์ฉ๋ ๋์(JoinPoint)๋ฅผ ์ ์ ํ๋ ๋ฐฉ๋ฒ์ ์ ์ํ ๋ชจ๋ JointPoint์ ์์ธํ ์คํ์ ์ ์ํ ๊ฒ. 'A๋ ๋ฉ์๋์ ์ง์ ์์ ์ ํธ์ถํ ๊ฒ'๊ณผ ๊ฐ์ด ๋์ฑ ๊ตฌ์ฒด์ ์ผ๋ก Advice๊ฐ ์คํ๋ ์ง์ ์ ์ ํ ์ ์์ ์คํ๋ง์์๋ ์ ๊ท ํํ์์ด๋ AspectJ์ ๋ฌธ๋ฒ์ ์ด์ฉํ์ฌ Poincut์ ์ฌ์ ์ ํ ์ ์๋ค.
Proxy
Target์ ๊ฐ์ธ Target์ ์์ฒญ์ ๋์ ๋ฐ์์ฃผ๋ Wrapping Object์ด๋ค. ํธ์ถ์์์ ํ๊ฒ์ ํธ์ถํ๊ฒ๋๋ฉด ํ๊ฒ์ด ์๋ ํ๋ก์๊ฐ ํธ์ถ๋์ด, ํ๊ฒ ๋ฉ์๋ ์คํ์ ์ ์ฒ๋ฆฌโํ๊ฒ ๋ฉ์๋โํ์ฒ๋ฆฌ๋ฅผ ์คํํ๋ค.
Introduction
ํ๊ฒ ํด๋์ค์ ์ฝ๋ ๋ณ๊ฒฝ์์ด ์ ๊ท ๋ฉ์๋, ๋ฉค๋ฒ ๋ณ์ ์ถ๊ฐ๊ฐ ๊ฐ๋ฅ
Weaving
Aspect์ ๋์์ด ๋๋ ํต์ฌ ์ฝ๋๋ฅผ ์ฐ๊ฒฐํ๋ ํ๋ก์ธ์ค. ์ฆ, Advice(๊ณตํต์ฝ๋)๋ฅผ ํต์ฌ๋ก์ง์ฝ๋์ ์ฝ์ ํ๋ ๊ฒ ์ง์ ๋ ๊ฐ์ฒด์ Aspect๋ฅผ ์ ์ฉํด ์๋ก์ด Proxy ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ณผ์ ์ฌ์ฉํ๋ AOP ํ๋ ์์ํฌ์ ๋ฐ๋ผ์ ์ปดํ์ผํ์, ๋ก๋ ํ์, ๋ฐํ์ ์์ ์ผ๋ก ํ๋ก์ธ์ค๊ฐ ์คํ๋๋ ์์ ์ด ๋ค๋ฅด๋ค.
ํ๋ก์ ํจํด ๊ธฐ๋ฐ์ AOP ๊ตฌํ์ฒด์ด๋ค. Proxy๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ์ ๊ทผ ์ ์ด ๋ฐ ๋ถ๊ฐ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ธฐ ์ํด์์ด๋ค.
Spring Bean์๋ง AOP ์ ์ฉ๊ฐ๋ฅ
๋ชจ๋ AOP ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๊ฒ์ด ์๋ ์คํ๋ง ์ปจํ ์ด๋์ ์ฐ๋ํ์ฌ ๊ฐ์ฅ ํํ ๋ฌธ์ (์ค๋ณต์ฝ๋, ํ๋ก์ ํด๋์ค ์์ฑ์ ๋ฒ๊ฑฐ๋ก์, ๊ฐ์ฒด๋ค ๊ฐ ๊ด๊ณ ๋ณต์ก๋ ์ฆ๊ฐ)์ ๋ํ ํด๊ฒฐ์ฑ ์ ์ง์ํ๋ ๊ฒ์ด ๋ชฉ์