Filter,Interceptor,AOP,Argument Resolver
AOP์ OOP
OOP๋ ๊ฐ์ฒด์งํฅ ๊ฐ๋ ์ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ์ฒด์ ๊ตฌ์กฐ์ ํ์๋ฅผ ์ค์ฌ์ผ๋ก ํ๋ก๊ทธ๋๋ฐํ๋ ๋ฐ๋ฉด, AOP๋ ํก๋จ ๊ด์ฌ์ฌ๋ฅผ ๋ชจ๋ํํ์ฌ ์ฝ๋์ ์ฝ์ ํ๋ ๋ฐฉ์์ผ๋ก ํ๋ก๊ทธ๋๋ฐํ๋ ๊ฒ์ ๋๋ค. AOP๋ฅผ ํ์ฉํด ์ธํ๋ผ ๋ก์ง์ ์ค๋ณต์ ์ ๊ฑฐํจ์ผ๋ก์จ ๋น์ฆ๋์ค ๋ก์ง์ ์ง์คํ ์ ์๋ค. ์ด ๋ ๊ฐ์ง ๊ฐ๋ ์ ์ํธ ๋ณด์์ ์ผ๋ก ์ฌ์ฉ๋ ์ ์์ผ๋ฉฐ, ํ๋ก๊ทธ๋จ์ ๊ตฌ์กฐ์ ๊ธฐ๋ฅ์ ๊ฐ์ ํ๋ ๋ฐ์ ํ์ฉ๋ฉ๋๋ค.
AOP
๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ฝ์ด๋ก, ํ๋ก๊ทธ๋จ์ ํก๋จ ๊ด์ฌ์ฌ(cross-cutting concern)๋ฅผ ๋ชจ๋ํํ๋ ๊ฐ๋ฐ ๋ฐฉ๋ฒ๋ก ์ ๋๋ค. ํก๋จ ๊ด์ฌ์ฌ๋ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ฌ๋ฌ ๋ถ๋ถ์ ๊ฑธ์ณ ๋ถ์ฐ๋์ด ์๋ ๋ก๊น , ๋ณด์, ํธ๋์ญ์ ๊ด๋ฆฌ ๋ฑ๊ณผ ๊ฐ์ ๋ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ ์๋ฏธํฉ๋๋ค. AOP๋ ์ด๋ฌํ ํก๋จ ๊ด์ฌ์ฌ๋ฅผ ๊ฐ๊ฐ์ ๋ชจ๋๋ก ๋ถ๋ฆฌํ๊ณ , ์ด๋ฅผ ํ์ํ ์์น์์ ์๋ณธ ์ฝ๋์ ์ฝ์ ํ๋ ๋ฐฉ์์ผ๋ก ์๋ํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ฝ๋์ ๊ฐ๋ ์ฑ, ์ ์ง๋ณด์์ฑ, ์ฌ์ฌ์ฉ์ฑ์ ๊ฐ์ ํ ์ ์์ต๋๋ค.
AOP๋ ์ธํ๋ผ ๋ก์ง ์ค๋ณต์ ์ ๊ฑฐํ๊ธฐ ์ํจ์ด๋ค.
์ธํ๋ผ ๋ก์ง
์ฃผ๋ก ์์คํ ๊ตฌ์ถ๊ณผ ์ด์์ ์ํ ๋ก์ง์ ์๋ฏธํฉ๋๋ค. ์ด๋ ๋ณด์, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ, ๋คํธ์ํฌ ํต์ , ๋ก๊น , ์ธ์ฆ ๋ฐ ์ธ๊ฐ ๋ฑ๊ณผ ๊ฐ์ ๊ธฐ์ ์ ์ธ ์ธก๋ฉด์ ์๊ตฌ์ฌํญ์ ๋ค๋ฃจ๋ ๋ก์ง์ ํฌํจํฉ๋๋ค. ์ธํ๋ผ ๋ก์ง์ ์์คํ ์ ์์ ์ฑ, ํ์ฅ์ฑ, ๋ณด์ ๋ฑ๊ณผ ๊ฐ์ ๊ธฐ์ ์ ์ธ ์ธก๋ฉด์ ์ฒ๋ฆฌํ๋ฉฐ, ์ฃผ๋ก ํ๋ ์์ํฌ, ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ์๋ํํฐ ๋๊ตฌ ๋ฑ์ ์ฌ์ฉํ์ฌ ๊ตฌํ๋ฉ๋๋ค.
OOP
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ฝ์ด๋ก, ํ๋ก๊ทธ๋จ์ ๊ฐ์ฒด๋ค์ ์งํฉ์ผ๋ก ๋ชจ๋ธ๋งํ๋ ๊ฐ๋ฐ ๋ฐฉ๋ฒ๋ก ์ ๋๋ค. OOP์์๋ ๋ฐ์ดํฐ์ ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฉ์๋๊ฐ ๊ฐ์ฒด๋ผ๋ ๋จ์๋ก ์บก์ํ๋์ด ์์ต๋๋ค. ์ด๋ฌํ ๊ฐ์ฒด๋ ์ํ์ ํ์๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ํด๋์ค๋ฅผ ํตํด ์ ์๋ฉ๋๋ค. OOP๋ ์บก์ํ, ์์, ๋คํ์ฑ ๋ฑ์ ๊ฐ๋ ์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ, ์ ์ง๋ณด์์ฑ ๋ฐ ๋ชจ๋ํ๋ฅผ ํฅ์์ํฌ ์ ์์ต๋๋ค.
OOP๋ ๋น์ง๋์ค ๋ก์ง์ ์ค๋ณต์ ์ ๊ฑฐํ๊ธฐ ์ํจ์ด๋ค.
๋น์ง๋์ค ๋ก์ง
ํน์ ๋๋ฉ์ธ ๋๋ ๋น์ฆ๋์ค ์๊ตฌ์ฌํญ์ ๊ด๋ จ๋ ๋ก์ง์ ๋ํ๋ ๋๋ค. ์ด๋ ์ค์ ๋ก ๋น์ฆ๋์ค ๋๋ฉ์ธ์ ๊ท์น, ํ๋ก์ธ์ค, ์์ ํ๋ฆ ๋ฑ์ ๋ค๋ฃจ๋ ๋ก์ง์ ํฌํจํฉ๋๋ค. ๋น์ง๋์ค ๋ก์ง์ ๋น์ฆ๋์ค ์๊ตฌ์ฌํญ์ ์ถฉ์กฑ์ํค๊ธฐ ์ํด ๋ฐ์ดํฐ ์ฒ๋ฆฌ, ๊ณ์ฐ, ์ ํจ์ฑ ๊ฒ์ฌ, ๋น์ฆ๋์ค ๊ท์น ์ ์ฉ ๋ฑ์ ์ํํฉ๋๋ค. ์ด ๋ก์ง์ ์ฃผ๋ก ๋๋ฉ์ธ ๋ชจ๋ธ, ์๋น์ค, ์ปจํธ๋กค๋ฌ ๋๋ ๋น์ฆ๋์ค ๊ณ์ธต ๋ฑ์ ์ปดํฌ๋ํธ๋ก ๊ตฌํ๋ ์ ์์ต๋๋ค.
AOP ์ฉ์ด
Aspect(๊ด์ )
AOP์์ ๊ด์ฌ์ฌ๋ฅผ ๋ชจ๋ํํ ๋จ์๋ฅผ ์๋ฏธํฉ๋๋ค.
๊ด์ฌ์ฌ๋ ํ๋ก๊ทธ๋จ์ ์ฌ๋ฌ ๋ถ๋ถ์ ๊ฑธ์ณ ๋ถ์ฐ๋์ด ์๋ ํก๋จ ๊ด์ฌ์ฌ(cross-cutting concern)๋ฅผ ๋ํ๋ ๋๋ค.
์๋ฅผ ๋ค์ด ๋ก๊น , ๋ณด์, ํธ๋์ญ์ ๊ด๋ฆฌ ๋ฑ์ด ๊ด์ฌ์ฌ๊ฐ ๋ ์ ์์ต๋๋ค. Aspect๋ ์ด๋ฌํ ๊ด์ฌ์ฌ๋ฅผ ๊ตฌํํ ๋ชจ๋์ด๋ฉฐ, AOP์์๋ ์ด๋ฌํ Aspect๋ค์ ์ ์ํ๊ณ ์ ์ฉํฉ๋๋ค.
Join point (๊ฒฐํฉ์ )
ํ๋ก๊ทธ๋จ ์คํ ์ค์ Aspect๊ฐ ์ ์ฉ๋ ์ ์๋ ํน์ ์ง์ ์ ์๋ฏธํฉ๋๋ค.
๋ฉ์๋ ํธ์ถ, ์์ธ ๋ฐ์, ํ๋ ์ ๊ทผ ๋ฑ์ด ๊ฒฐํฉ์ ์ด ๋ ์ ์์ต๋๋ค.
AOP์์๋ ๊ฒฐํฉ์ ์ ์ ์ํ๊ณ ํด๋น ์ง์ ์ Aspect๋ฅผ ์ ์ฉํ์ฌ ์ถ๊ฐ ๋์์ ์ํํฉ๋๋ค.
Pointcut (ํฌ์ธํธ์ปท)
๊ฒฐํฉ์ ์ ํจํด์ ์ง์ ํ์ฌ Aspect๊ฐ ์ ์ฉ๋ ๊ฒฐํฉ์ ์ ์ ํํ๋ ๋ฐ ์ฌ์ฉ๋๋ ํํ์์ ๋๋ค.
ํฌ์ธํธ์ปท์ ํน์ ๊ฒฐํฉ์ ์ ์ ๋ณํ๋ ์ญํ ์ ํ๋ฉฐ, ๊ฒฐํฉ์ ์ ์๊ทธ๋์ฒ, ๋ฉ์๋ ์ด๋ฆ, ํจํค์ง ์ด๋ฆ ๋ฑ์ ๊ธฐ์ค์ผ๋ก ๊ฒฐ์ ๋ ์ ์์ต๋๋ค.
Advice (์กฐ์ธ)
Aspect๊ฐ ๊ฒฐํฉ์ ์ ์ฝ์ ๋์ด ์คํ๋๋ ๋์์ ๋๋ค.
์๋ฅผ ๋ค์ด, ๊ฒฐํฉ์ ์ (before), ํ(after), ์์ธ ๋ฐ์ ์(around)์ ์คํ๋ ์ ์๋ ์ฝ๋ ์กฐ๊ฐ์ ๋๋ค.
Advice๋ Aspect๊ฐ ์ค์ ๋ก ์ํํ๋ ์์ ์ ์ ์ํ๊ณ , Aspect๊ฐ ์ ์ฉ๋๋ ์์ ์ ์คํ๋ฉ๋๋ค.
Weaving (์๋น)
AOP์์ Aspect๋ฅผ ํ๊ฒ ์ฝ๋์ ์ ์ฉํ๋ ๊ณผ์ ์ ์๋ฏธํฉ๋๋ค.
์๋น์ ์ปดํ์ผ ์์ , ํด๋์ค ๋ก๋ฉ ์์ , ๋ฐํ์ ์์ ๋ฑ ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ์ํ๋ ์ ์์ต๋๋ค.
Aspect์ ํ๊ฒ ์ฝ๋๊ฐ ๊ฒฐํฉ๋์ด ์ต์ข ์คํ ๊ฐ๋ฅํ ํ๋ก๊ทธ๋จ์ด ์์ฑ๋ฉ๋๋ค.
Filter:
Servlet ๊ธฐ๋ฐ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉ๋๋ ๊ธฐ๋ฅ์ผ๋ก, HTTP ์์ฒญ๊ณผ ์๋ต์ ๊ฐ๋ก์ฑ์ ์์ฒญ๊ณผ ์๋ต์ ๊ฐ๊ณตํ๊ฑฐ๋ ํํฐ๋งํ๋ ์ญํ ์ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด,
๋ก๊น , ์ธ์ฆ, ์ธ์ฝ๋ฉ ์ฒ๋ฆฌ ๋ฑ์ ์ฌ์ฉ๋ฉ๋๋ค.
์์ฒญ์ ๋ํ ์ธ์ฝ๋ฉ ์ฒ๋ฆฌ๋ฅผ ํ๊ธฐ ์ํด CharacterEncodingFilter๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋๋ Spring Security์์๋ Filter๋ฅผ ์ฌ์ฉํ์ฌ ์ธ์ฆ๊ณผ ๊ถํ ์ฒดํฌ๋ฅผ ์ํํฉ๋๋ค.
Request/Response์ ํค๋ ์ ๋ณด๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ๋ ์บ์ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ํด Filter๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
@Component
public class CustomFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// ํํฐ ์ด๊ธฐํ ์์
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// ํํฐ๋ง ์์
chain.doFilter(request, response);
}
@Override
public void destroy() {
// ํํฐ ์ข
๋ฃ ์์
}
}
Interceptor:
Spring MVC์์ ์ปจํธ๋กค๋ฌ์ ํธ์ถ ์ ํ์ ์คํ๋๋ ๊ธฐ๋ฅ์ผ๋ก, ์์ฒญ ์ฒ๋ฆฌ ์ ์ ๊ณตํต์ผ๋ก ์ํํด์ผ ํ๋ ์์ ์ ๊ตฌํํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด,
๋ก๊น , ๊ถํ ์ฒดํฌ, ํธ๋์ญ์ ์ฒ๋ฆฌ ๋ฑ์ ์ฌ์ฉ๋ฉ๋๋ค.
๋ก๊น ๊ธฐ๋ฅ์ ๊ตฌํํ๊ฑฐ๋, ๊ถํ ์ฒดํฌ๋ฅผ ์ํํ๊ธฐ ์ํด Interceptor๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค
@Component
public class CustomInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// ์ปจํธ๋กค๋ฌ ์คํ ์ ์์
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
// ์ปจํธ๋กค๋ฌ ์คํ ํ ์์
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
// ๋ทฐ ๋ ๋๋ง ํ ์์
}
}
AOP:
Aspect Oriented Programming์ ์ฝ์๋ก, ์ฌ๋ฌ ๋ชจ๋์์ ๊ณตํต์ผ๋ก ์ฌ์ฉ๋๋ ๊ธฐ๋ฅ์ ๋ชจ๋ํํ์ฌ ์ฝ๋ ์ค๋ณต์ ์ ๊ฑฐํ๊ณ ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ์ ๋์ด๋ ๊ธฐ์ ์ ๋๋ค. ๋ฉ์๋ ์คํ ์ ํ๋ ์์ธ ๋ฐ์ ์์ ์ ํน์ ์ฝ๋๋ฅผ ์ฝ์ ํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด,
๋ก๊น , ํธ๋์ญ์ ์ฒ๋ฆฌ, ๋ณด์ ๋ฑ์ ์ฌ์ฉ๋ฉ๋๋ค.
HTTP ์์ฒญ์์ ์ ๋ฌ๋๋ ์ธ์ ๊ฐ์ ๋ณํํ๊ฑฐ๋, ์ปจํธ๋กค๋ฌ ๋ฉ์๋์ ํ๋ผ๋ฏธํฐ์ ๋ณต์กํ ๊ฐ์ฒด๋ฅผ ๋งคํํ๊ธฐ ์ํด Argument Resolver๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
@Aspect
@Component
public class CustomAspect {
@Around("execution(* com.example.service.*.*(..))")
public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable {
// ๋ฉ์๋ ์คํ ์ ์ฒ๋ฆฌ ์์
Object result = joinPoint.proceed();
// ๋ฉ์๋ ์คํ ํ ์ฒ๋ฆฌ ์์
return result;
}
}
Argument Resolver:
Spring MVC์์ ์ปจํธ๋กค๋ฌ์ ๋ฉ์๋ ํ๋ผ๋ฏธํฐ์ HTTP ์์ฒญ(request)์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ฐ๊ฒฐํ์ฌ ํ๋ผ๋ฏธํฐ ๊ฐ์ ์ ๋ฌํ๋ ๊ธฐ๋ฅ์ ๋๋ค.
์๋ฅผ ๋ค์ด,
@RequestParam, @ModelAttribute, @PathVariable ๋ฑ์ ์ ๋ ธํ ์ด์ ๊ณผ ํจ๊ป ์ฌ์ฉ๋ฉ๋๋ค.
@RequestParam์ ์ฌ์ฉํ์ฌ ์์ฒญ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฐ์์ ์ฒ๋ฆฌํ๋ค
@Component
public class CustomArgumentResolver implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter parameter) {
// ๋ณํํ ์ ์๋ ํ์
์ธ์ง ํ์ธ
return parameter.getParameterType().equals(CustomArgument.class);
}
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
// ๋ณํ ์์
CustomArgument customArgument = new CustomArgument();
customArgument.setParam1(webRequest.getParameter("param1"));
customArgument.setParam2(webRequest.getParameter("param2"));
return customArgument;
}
}
Filter, Interceptor, AOP์ ์ฅ๋จ์
Filter:
์ฅ์ :
์์ฒญ ์ฒ๋ฆฌ ์ /ํ์ ์ผ๊ด์ ์ธ ๋ก์ง์ ์ ์ฉํ ์ ์์ด์ ๋ณด์, ์ธ์ฆ, ๋ก๊น ๋ฑ์ ์ฒ๋ฆฌ๋ฅผ ๊ตฌํํ๊ธฐ ์ฉ์ดํจ
์ฝ๋ ์ค๋ณต์ ๋ฐฉ์งํ ์ ์์
๋จ์ :
Spring ApplicationContext์ ์ ๊ทผํ ์ ์์
Spring ApplicationContext์ ์ง์ ์ ์ผ๋ก ์ ๊ทผํ ์ ์๊ธฐ ๋๋ฌธ์, ์ผ๋ถ ๊ธฐ๋ฅ๋ค์ ์ฌ์ฉํ ์ ์๋ค. Spring ApplicationContext๋ ์คํ๋ง์์ ์ค์ํ ์ญํ ์ ์ํํฉ๋๋ค. ApplicationContext๋ฅผ ์ด์ฉํ์ฌ Bean์ ์์ฑํ๊ณ , ๊ด๋ฆฌํ ์ ์์ต๋๋ค. Filter๋ ์๋ธ๋ฆฟ ์ปจํ ์ด๋์์ ์คํ๋๊ธฐ ๋๋ฌธ์ ApplicationContext์ ์ง์ ์ ์ผ๋ก ์ ๊ทผํ ์ ์์ผ๋ฉฐ, ๋ฐ๋ผ์ ApplicationContext๋ฅผ ์ด์ฉํ ๊ธฐ๋ฅ๋ค์ ์ฌ์ฉํ ์ ์๋ ์ ์ฝ์ด ์์ต๋๋ค.
DispatcherServlet ์ด์ ์ ๋์ํ๊ธฐ ๋๋ฌธ์ Spring MVC์ ๋ค๋ฅธ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์
Filter๋ DispatcherServlet ์ด์ ์ ์คํ๋ฉ๋๋ค. ์ด๋ก ์ธํด DispatcherServlet ์ดํ์ ์คํ๋๋ Spring MVC์ ๋ค๋ฅธ ๊ธฐ๋ฅ๋ค์ ์ฌ์ฉํ ์ ์๋ ๋ฑ์ ์ ์ฝ์ด ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, HandlerInterceptor๋ DispatcherServlet ์ดํ์ ์คํ๋๊ธฐ ๋๋ฌธ์, Filter์์ ์ฒ๋ฆฌํ ์ ์๋ ์ผ๋ถ ๊ธฐ๋ฅ๋ค์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
Interceptor:
์ฅ์ :
HandlerMapping, HandlerAdapter ๋ฑ Spring MVC์ ๋ค๋ฅธ ๊ธฐ๋ฅ๊ณผ ๊ฒฐํฉํ์ฌ ์ฌ์ฉ ๊ฐ๋ฅ
์์ฒญ ์ฒ๋ฆฌ ์ /ํ์ ์ผ๊ด์ ์ธ ๋ก์ง์ ์ ์ฉํ ์ ์์ด์ ๋ณด์, ์ธ์ฆ, ๋ก๊น ๋ฑ์ ์ฒ๋ฆฌ๋ฅผ ๊ตฌํํ๊ธฐ ์ฉ์ดํจ
๋จ์ :
Spring ApplicationContext์ ์ง์ ์ ์ผ๋ก ์ ๊ทผํ ์ ์์
Interceptor๋ Filter์ ๋ง์ฐฌ๊ฐ์ง๋ก ์๋ธ๋ฆฟ ์ปจํ ์ด๋์์ ์คํ๋๊ธฐ ๋๋ฌธ์, ApplicationContext์ ์ง์ ์ ์ผ๋ก ์ ๊ทผํ ์ ์์ต๋๋ค. ApplicationContext๋ฅผ ์ด์ฉํ ๊ธฐ๋ฅ๋ค์ ์ฌ์ฉํ ์ ์๋ ์ ์ฝ์ด ์์ต๋๋ค.
AOP:
์ฅ์ :
๊ณตํต์ ์ธ ๊ธฐ๋ฅ์ ๋ณ๋์ ๋ชจ๋๋ก ๋ถ๋ฆฌํ์ฌ ์ฌ์ฌ์ฉ์ฑ์ ๋์ผ ์ ์์
๋น์ฆ๋์ค ๋ก์ง ์ธ์ ๊ธฐ๋ฅ(ํธ๋์ญ์ ์ฒ๋ฆฌ, ๋ก๊น , ๋ณด์, ์บ์ฑ ๋ฑ)์ ๊ตฌํํ๋ ๋ฐ ์ฌ์ฉํ๊ธฐ ์ฉ์ดํจ
OOP์ ๋คํ์ฑ๊ณผ ๊ฐ์ด ์ ์ฐํ ํ๋ก๊ทธ๋๋ฐ์ ํ ์ ์์ด์, ๊ฐ์ฒด์งํฅ์ ์ค๊ณ์ ๊ธฐ์ฌํ ์ ์์
๊ธฐ์กด ์ฝ๋๋ฅผ ์์ ํ์ง ์๊ณ ๋ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์์
๋จ์ :
Proxy๋ฅผ ์ด์ฉํด ๊ตฌํํ๊ธฐ ๋๋ฌธ์ ๋ฉ์๋ ํธ์ถ ์๋๊ฐ ๋๋ ค์ง ์ ์์
์ด๋ ๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฑ๋ฅ์ ์ํฅ์ ์ค ์ ์์ต๋๋ค. AOP๋ ๋๋ถ๋ถ Proxy๋ฅผ ์ด์ฉํ์ฌ ๊ตฌํํฉ๋๋ค. Proxy๋ฅผ ์ด์ฉํ๋ฉด ํธ์ถํ๋ ๋ฉ์๋๋ฅผ ๋ํํ์ฌ ์ถ๊ฐ์ ์ธ ์์ ์ ์ํํ ์ ์์ต๋๋ค. ํ์ง๋ง ์ด๋ก ์ธํด ๋ฉ์๋ ํธ์ถ ์๋๊ฐ ๋๋ ค์ง ์ ์์ผ๋ฉฐ, ์ด๋ ๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฑ๋ฅ์ ์ํฅ์ ์ค ์ ์์ต๋๋ค.
๋์ ํ๋ก์ ๊ธฐ๋ฐ์ ๊ตฌํ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์, ์ผ๋ถ ๊ธฐ๋ฅ์์๋ ์ ํ์ ์
๋ชจ๋ ๊ธฐ๋ฅ์ ๋ํด ์ ์ฉํ๊ธฐ์๋ ์ ํ์ ์ผ ์ ์์ต๋๋ค.
AOP ์์ฒด๊ฐ ๋ณต์กํ ๊ฐ๋ ์ด๊ธฐ ๋๋ฌธ์, ์ฒ์์๋ ์ดํดํ๊ธฐ ์ด๋ ค์ธ ์ ์์ต๋๋ค. AOP๋ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ฌ๋ฌ ๋ถ๋ถ์์ ๋ฐ๋ณต๋๋ ์ฝ๋๋ฅผ ์ ๊ฑฐํ๊ณ , ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ์ฌ ๋ชจ๋ํํ๋ ๊ธฐ๋ฒ์ ๋๋ค. ์ด๋ฅผ ํตํด ์ฝ๋์ ์ ์ง๋ณด์์ฑ์ ํฅ์์ํค๊ณ , ์ฝ๋์ ๊ฐ๋ ์ฑ์ ๋์ผ ์ ์์ต๋๋ค.
๋ก๊ทธ์ ๊ฐ์ ๋๋ฒ๊น ์ ๋ณด๊ฐ ์ ํํ์ง ์์ ์ ์์ด์ ๋๋ฒ๊น ์ด ์ด๋ ค์ธ ์ ์์
๋ํ AOP๋ ๋๋ฒ๊น ์ด ์ด๋ ต๊ณ , ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํ ์ ์๋ ๋ฑ์ ๋จ์ ์ด ์์ต๋๋ค. ๋ฐ๋ผ์ AOP๋ฅผ ์ฌ์ฉํ ๋๋ ์ ์คํ๊ฒ ํ๋จํ์ฌ ์ ์ฉํด์ผ ํฉ๋๋ค.
Last updated
Was this helpful?