7. AOP
๋ชฉ์ฐจ
์๊ฐ ์ฝ์ค๋ ์ธํ๋ฐ ์คํ๋ง ์ ๋ฌธ ๊ฐ์๋ฅผ ๋ฃ๊ณ ์์ต๋๋ค.
AOP๊ฐ ํ์ํ ์ํฉ
- ๊ฐ๋ น ๋ชจ๋ ๋ฉ์๋์ ํธ์ถ ์๊ฐ์ ์ธก์ ํ๋ ค๋ฉด?
- ์๊ฐ ์ธก์ ๋ก์ง(๊ณตํต ๊ด์ฌ ์ฌํญ)๊ณผ ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง(ํต์ฌ ๊ด์ฌ ์ฌํญ)์ด ์์ด๊ณ , ์๊ฐ ์ธก์ ๋ก์ง์ด ๋ฐ๋๋ฉด ๋ชจ๋ ๋ก์ง์ ์ฐพ์๊ฐ๋ฉฐ ๋ณ๊ฒฝํด์ผ ํ๋ค.
AOP ์ ์ฉ
- ์ํ๋ ๊ณณ์ ๊ณตํต ๊ด์ฌ ์ฌํญ์ ์ ์ฉํ๊ธฐ ์ํด AOP(Aspect Oriented Programming)๊ฐ ๋์ ๋๋ค. => ๊ณตํต ๊ด์ฌ ์ฌํญ๊ณผ ํต์ฌ ๊ด์ฌ ์ฌํญ์ ๋ถ๋ฆฌํ๋ค.
- ๊ฐ๋ น, ์๊ฐ ์ธก์ ๋ก์ง์ ๋ฐ๋ก ๋ง๋ค๊ณ ๊ฐ ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง์ ๊ณตํต์ผ๋ก ์ ์ฉํด์ฃผ๋ ๊ฒ์.
-
@Aspect
์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ๋ค. -
@Around("execution(* hello.hellospring..*(..))")
์ ์ฌ์ฉํด hello.hellospring ๋ฐ์ ๋ชจ๋ ํด๋์ค๊ฐ ์คํ๋ ๋๋ง๋ค AOP๋ฅผ ์ ์ฉํ ์ ์๋ค. - AOP์ ๋์์
- helloController ์คํ
- ํ๋ก์ memberService ์คํ
- AOP๊ฐ ์์ผ๋ฉด ์คํ๋ง๋น์ ๋ฑ๋กํ ๋ ํ๋ก์๋ฅผ ์ค์ ์ฝ๋ ์์ ์ธ์๋๋ค(?) 2.1. joinPoint.proceed() ์คํ
- ์ค์ memberService ์คํ
- CGLIB? ๋ณต์ ๋ฅผ ํด์ ๋ญ๊ฐ ์ฝ๋๋ฅผ ์ ์ฉํ๋ค.
์ด์ ๋ฆฌ
- ์คํ๋ง ์น ๊ฐ๋ฐ ๊ธฐ์ด : ์ ์ ์ปจํ ์ธ , MVC์ ํ ํ๋ฆฟ ์์ง, API(Json ์คํ์ผ๋ก ๊ฐ์ฒด๋ฅผ ๋ณํํด์ ๋ด๋ ค์ฃผ๋ ๊ธฐ์ )
- ํ์ ๊ด๋ฆฌ ์์
- ๋น์ฆ๋์ค ์๊ตฌ์ฌํญ ์ ๋ฆฌ
- ํ์ ๋๋ฉ์ธ๊ณผ ๋ฆฌํฌ์งํ ๋ฆฌ(์ ์ฅ์) ์ ์
- ์ด๋ฅผ ์์ ์๋ฐ ์ฝ๋๋ก ํ ์คํธ ์ผ์ด์ค ์์ฑํด๋ด
- ํ์ ์๋น์ค ๊ฐ๋ฐ, ํ ์คํธ
- ์คํ๋ง ๋น๊ณผ ์์กด๊ด๊ณ
- ์ปจํธ๋กค๋ฌ, ๋ฆฌํฌ์งํ ๋ฆฌ ๋ฑ์ ์คํ๋ง ์ปจํ ์ด๋์ ์ฌ๋ ค์ ์ฐ๊ณ ์ปดํฌ๋ํธ ์ค์บ์ผ๋ก ์๋ ์์กด๊ด๊ณ ์ค์ , ์๋ฐ ์ฝ๋๋ก ์ง์ ์คํ๋ง ๋น ๋ฑ๋กํ ์๋ ์์.
- ์น MVC
- ์คํ๋ง DB ์ ๊ทผ ๊ธฐ์
- H2 ๋ฐ์ดํฐ๋ฒ ์ด์ค (์ค์ต์ฉ, ๋ก์ปฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ์ฌ์ฉ)
- ์์ JDBC๋ก ์ฝ๋ฉํ๋ ๋ฒ (๊ณ ๋ ๊ฐ๋ฐ์๋ค์ ์ฝ๋ฉ)
- ์คํ๋ง ํตํฉ ํ ์คํธ
- ์คํ๋ง JdbcTemplate (์ฌ์ฉํ๋ฉด ๋ฐ๋ณต ์ฝ๋๋ฅผ ํ ์ค์ผ ์ ์์๋ค. sql์ ์ง์ ์์ฑ)
- JPA
- ์คํ๋ง ๋ฐ์ดํฐ JPA (์ธํฐํ์ด์ค๋ง ์์ฑํด์ ์ฌ์ฉ)
- AOP
- ๋ฉ์๋ ์์๊ณผ ๋ ๋ฑ์ ๋ญ๊ฐ๋ฅผ ํด์ผํ ๋ ํ ๋ฐฉ์ ์ํ๋ ๋ฉ์๋๋ฅผ ์ฐ์ด์ ์ฌ์ฉํ ์ ์๋ ๊ธฐ์ .
- ์ด์ ๋ถํฐ๋ ๊ฐ๊ฐ์ ๊ธฐ์ ์ ๊น๊ฒ ์ดํดํด์ผํ๋ค. ์ด์ ์ด๋ก ์ ๊ณต๋ถํ ๋์๋ ์กฐ๊ธ ๋ ์์ํ ๊ฒ.
- ์คํ๋ง์ ๋๋ฌด ๊ฑฐ๋ํด์ ๋ชจ๋ ๊ฒ์ ๋ค ํ๊ธฐ๋ ๋งค์ฐ ์ด๋ ต๋ค. ํ ๋น์ฑ ๋ 1400, 1500ํ์ด์ง ์ ๋ ๋๋๋ฐ, ์ค์ ์์ค์ฝ๋๋ก ์ดํดํ๋ ค๋ฉด ๊ต์ฅํ ์ค๋ ์๊ฐ์ด ๊ฑธ๋ฆฌ๊ณ ๊ทธ์ ๋ ์ดํดํ ํ์๋ ์๋ค. ์คํ๋ง์ ํ์ฉํด ์ค๋ฌด์์ ๋ฐ์ํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋๊ฒ ๊ฐ์ฅ ์ค์ํ๋ค. ์ ์ด๋ฐ ํ๋ ์์ํฌ๊ฐ ํ์ํ๊ณ , ์ด๋ป๊ฒ ์จ์ผํ๋์ง ํต์ฌ ์๋ฆฌ๋ฅผ ์ฐพ๊ณ , ๋๋ต ์ด๋์ฏค์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋์ง๋ฅผ ์์์ฐจ๋ฆฌ๊ณ ์ฐพ์๋ณผ ์ ์๋ ๋ฅ๋ ฅ์ด ์ค์ํ๋ค.
- ์ฐ์ํํ์ ๋ค ์ ์ฌํ ๋์๋ PHP์๋๋ฐ, ๋น์ ์คํ๋ง ๊ต์ก์ ์ํ๋๊ป์ ์งํํ์ จ๋ค๊ณ ํ๋ค. ์คํ๋ง์ ์์ ํ ๋ง์คํฐํ ์ ์๋ ์๋ฆฌ์ฆ๋ฅผ ์ค๋น ์ค์ด๋ฉฐ, ์ค์ ์ค๋ฌด์์ ์ฌ์ฉํ๋ ๊ธฐ๋ฅ ์์ฃผ๋ก ์ค๋ช ํ๊ณ ์ค๋ฌด์์ ์ฌ์ฉํ์ง ์๋ ์ค๋๋ ๊ธฐ๋ฅ์ ์ญ์ ํ ๊ฐ์๋ฅผ ์ค๋น์ค์ด์ฌ.
๋จ์ถํค
-
Ctrl
+Alt
+N
: inline์ผ๋ก ํฉ์น๊ธฐ