๐ AOP(Aspect Oriented Programming)
๊ฐ๋ฐ์ ํ๋ค๋ณด๋ฉด ๊ณตํต์ ์ธ ๊ธฐ๋ฅ์ด ๋ง์ด ๋ฐ์ํ๋ค. ์ด๋ฌํ ๊ณตํต ๊ธฐ๋ฅ์ ๋ชจ๋ ๋ชจ๋์ ์ ์ฉํ๊ธฐ ์ํด ์์์ ํ์ง๋ง ์๋ฐ์์๋ ๋ค์ค์์์ด ๋ถ๊ฐ๋ฅํด์ ์์์ ๋ฐ์ ๊ณตํต ๊ธฐ๋ฅ์ ๋ถ์ฌํ๊ธฐ์๋ ํ๊ณ๊ฐ ์๋ค.
AOP๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด ์ค๋ณต ์ฝ๋๊ฐ ๋ฐ์ํ ์์ง๊ฐ ์๊ณ , ์ฝ๋์ ๋ณ๊ฒฝ์ด ํ์ํ๋ฉด ์ฌ๋ฌ์ฝ๋์ ์ข ์์ ์ผ๋ก ๋ณ๊ฒฝ์ด ํ์ํ๊ณ ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง์ ํธ์ถ ์๊ฐ ์ธก์ ์ด๋ผ๋ ๋ถ์์ ์ธ ๋ก์ง์ด ์ถ๊ฐ๋์ด ๊ฐ๋ ์ฑ๊ณผ ํจ์จ์ฑ์ด ๋จ์ด์ง๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
์ด๋ฌํ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ธฐ ์ดํด์๋ AOP๊ฐ ํ์ํ๋ค.AOP๋ ์๋ก์ด ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ด ์๋๋ผ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ(OOP)๋ฅผ ๋๋ ๋ณด์กฐ์ ์ธ ๊ธฐ์ ๋ก, ํต์ฌ์ ์ธ ๊ด์ฌ์ฌํญ๊ณผ ๊ณตํต ๊ด์ฌ์ฌํญ์ผ๋ก ๋ถ๋ฆฌ ์ํค๊ณ ๊ฐ๊ฐ์ ๋ชจ๋ํ ํ๋ ๊ฒ์ด๋ค.
๐AOP(Aspect Oriented Programming)์ ์ฃผ์ ๊ฐ๋
- Aspect : ํฉ์ด์ง ๊ด์ฌ์ฌ๋ฅผ ๋ชจ๋ํ ํ ๊ฒ์ด๋ค. ์ฃผ๋ก ๋ถ๊ฐ๊ธฐ๋ฅ์ ๋ชจ๋ํํ๋ค.
- Target : Aspect๋ฅผ ์ ์ฉํ๋๊ณณ
- Advice : ์ค์ง์ ์ธ ๋ถ๊ฐ๊ธฐ๋ฅ์ ๋ด์ ๊ตฌํ์ฒด
- JoinPoint : Advice๊ฐ ์ ์ฉ๋ ์์น, ๋ผ์ด๋ค ์ ์๋ ์ง์ . ๋ฉ์๋ ์ง์ ์ง์ , ์์ฑ์ ํธ์ถ ์์ ,ํ๋์์ ๊ฐ์ ๊บผ๋ด์ฌ ๋ ๋ฑ ๋ค์ํ ์์ ์ ์ ์ฉ๊ฐ๋ฅ
- PointCut : JoinPoint์ ์์ธํ ์คํฉ์ ์ ์ํ ๊ฒ.
๐AOP(Aspect Oriented Programming)์ ์ฅ์
- ๊ณตํต ๊ด์ฌ ์ฌํญ์ ํต์ฌ ๊ด์ฌ์ฌํญ์ผ๋ก๋ถํฐ ๋ถ๋ฆฌ์์ผ ํต์ฌ ๋ก์ง์ ๊น๋ํ๊ฒ ์ ์งํ ์ ์๋ค.
- ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ๋์ผ ์ ์๋ค.
- ๊ฐ๊ฐ์ ๋ชจ๋์ ์์ ์ด ํ์ํ๋ฉด ๋ค๋ฅธ ๋ชจ๋์ ์์ ์์ด ํด๋น ๋ก์ง๋ง ๋ณ๊ฒฝํ๋ฉด ๋๋ค.
- ๊ณตํต ๋ก์ง์ ์ ์ฉํ ๋์์ ์ ํํ ์ ์๋ค.
๐AOP(Aspect Oriented Programming)ํน์ง
- ํ๋ก์ ํจํด ๊ธฐ๋ฐ์ AOP ๊ตฌํ์ฒด, ํ๋ก์ ๊ฐ์ฒด๋ฅผ ์ฐ๋ ์ด์ ๋ ์ ๊ทผ ์ ์ด ๋ฐ ๋ถ๊ฐ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ธฐ ์ํด์์ด๋ค.
- ์คํ๋ง ๋น์๋ง AOP๋ฅผ ์ ์ฉ ๊ฐ๋ฅํ๋ค.
- ๋ชจ๋ AOP ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๊ฒ์ด ์๋ ์คํ๋ง IoC์ ์ฐ๋ํ์ฌ ์ํฐํ๋ผ์ด์ฆ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๊ฐ์ฅ ํํ ๋ฌธ์ ์ ๋ํ ํด๊ฒฐ์ฑ ์ ์ง์ํ๋ ๊ฒ์ด ๋ชฉ์
๐AOP ๊ธฐ๋ณธ์ ์ธ ์ค์ต
ํน์ ์ด๋ ธํ ์ด์ ์ด ๋ถ์ ํฌ์ธํธ์ ํด๋น Aspect๋ฅผ ์คํํ ์ ์๋ ๊ธฐ๋ฅ๋ ์ ๊ณตํ๋ค.
@Around ์ด๋ ธํ ์ด์ ์ ํ๊ฒ ๋ฉ์๋๋ฅผ ๊ฐ์ธ์ ํน์ Advice๋ฅผ ์คํํ๋ค๋ ์๋ฏธ์ด๋ค.
@Aspect ์ด๋ ธํ ์ด์ ์ ๋ถ์ฌ ์ด ํด๋์ค๊ฐ Aspect๋ฅผ ๋ํ๋ด๋ ํด๋์ค๋ผ๋ ๊ฒ์ ๋ช ์ํ๊ณ @Component๋ฅผ ๋ถ์ฌ ์คํ๋ง ๋น์ผ๋ก ๋ฑ๋กํ๋ค.
@Target์ ์ด๋ ธํ ์ด์ ์ด ์ ์ฉ๋ ๋ ๋ฒจ์ ์๋ฏธํ๋ค.
@Retention ์ด๋ ธํ ์ด์ ์ผ๋ก ์ด๋ ์์ ๊น์ง ์ด๋ ธํ ์ด์ ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ์ ธ๊ฐ ์ง ์ค์ ํ๊ณ , @Target ์ด๋ ธํ ์ด์ ์ผ๋ก ํ๋, ๋ฉ์๋, ํด๋์ค, ํ๋ผ๋ฏธํฐ ๋ฑ ์ ์ธํ ์ ์๋ ํ์ ์ ์ค์ ํ๋ฉด ๋๋ถ๋ถ ์ปค์คํ ์ด๋ ธํ ์ด์ ์ ์ฝ๊ฒ ์์ฑํ ์ ์๋ค.
๊ฒฐ๊ณผ @ExecutionTimeChecker ๋ฅผ ๋ถ์ธ ๋ฉ์๋์ Aspect๊ฐ ์ถ๊ฐ๋๊ฒ์ ์ ์ ์๋ค.
๐ธGITHUB ์์ค์ฝ๋ : https://github.com/ryudongjae/blog-ex
GitHub - ryudongjae/blog-ex
Contribute to ryudongjae/blog-ex development by creating an account on GitHub.
github.com
REFERENCE
'Dev > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring] JPA+Spring์ผ๋ก ์นดํ ๊ณ ๋ฆฌ ๋ก์ง ๊ตฌํ - 1 (0) | 2021.12.10 |
---|---|
[Spring] ์ด๋ ธํ ์ด์ ์ผ๋ก ๋ก๊ทธ์ธ ์ฌ๋ถ ํ์ธ(Interceptor) (0) | 2021.09.21 |
ResponseEntity (0) | 2021.08.25 |
@Transactional (1) | 2021.08.24 |
Spring REST Docs (0) | 2021.08.23 |