본문 바로가기

AOP4

Parameter AOP 설정하기 간단 팁 보통 메소드단위의 AOP를 많이 사용하시는데 유저정보에 대한 값을 파라미터에서 AOP방식으로 캐치하여 User객체로 전환시키는 방법을 간단한 예제를 통해 알아보겠습니다.@Target(ElementType.PARAMETER) @Retention(RetentionPolicy.RUNTIME) public @interface User { }위의 예제소스를 보시면 User 어노테이션을 PARAMETER타입으로 선언하였습니다. 어노테이션의 매개변수가 필요하시다면 내부에 생성하시면 됩니다.@Controller public class Controller { @GetMapping(value = "/test") public String test(@User User user, HttpSession session) { ..... 2017. 6. 9.
토비의 스프링 | 6장. AOP4 - AOP란 무엇인가? 이제까지 UserService에 트랜잭션을 적용해 온 과정을 되짚어 보자.1. 트랜잭션 서비스 추상화트랜잭션 적용을 비즈니스 로직과 함께 넣었을 때 문제가 발생한다. 트랜잭션을 제외한 부분에서 수정작업이 있더라도 트랜잭션 적용 코드를 수정해야 하는 심각한 문제가 있었다. 그래서 인터페이스와 DI를 통해 무엇을 하는지를 남기고 분리하는 트랜잭션 추상화를 수행하였다. 트랜잭션 적용은 더 이상 비즈니스 로직 코드에는 영향을 주지 않고 독립적으로 변경할 수 있게 되었다.2. 프록시와 데코레이션 패턴여전히 비즈니스 로직에는 트랜잭션을 어디에 적용할지 경계설정을 담당하는 코드가 남아 있었다. 이를 제거하기 위해 DI를 이용한 데코레이터 패턴을 적용하였다. 클라이언트가 인터페이스와 DI를 통해 접근하도록 설계하고 데.. 2017. 5. 2.
토비의 스프링 | 6장. AOP3 - 프록시 팩토리빈과 포인트컷 프록시 팩토리 빈 방식의 장점/한계장점데코레이터 패턴과 같은 프록시를 도입하려고 했을 때 고민했던 문제점을 거의 완벽하게 해결해 준다.다이내믹 프록시를 이용하여 타깃 인터페이스를 구현하는 클래스를 일일이 만들지 않아도 된다.하나의 핸들러 메소드를 구현하여 부가기능 코드의 중복 문제를 해결한다.DI 설정만으로 다양한 타깃 오브젝트에 적용 가능하다.한계하나의 클래스 안에 여러개의 메소드 적용은 가능하지만 여러 개의 클래스에 공통적인 부가기능을 제공하는 일은 불가능하다.하나의 타깃에 여러 개의 부가기능을 적용하려 할 때도 문제이다.트랜잭션, 보안 기능, 기타 부가기능을 담은 프록시를 추가하려 해도 설정 코드는 그만큼 추가로 늘어나는 한계가 생긴다.TransactionHandler 오브젝트가 프록시 팩토리 빈 .. 2017. 4. 17.
토비의 스프링 | 6장. AOP2 - 다이내믹 프록시 6.3 다이내믹 프록시와 팩토리 빈우리는 트랜잭션 경계설정과 비즈니스 로직 코드를 분리하기 위해 전형적인 전략 패턴을 사용하였다.부가기능은 자신이 핵심기능을 가진 것처럼 꾸며서 클라이언트가 자신을 거쳐 핵심기능을 사용하도록 했다.그렇게 하기 위해 인터페이스를 통해 부가, 핵심기능을 접근도록 하였다.이렇게 마치 자신이 클라이언트가 사용하려고 하는 실제 대상인 것처럼 위장해서 클라이언트의 요청을 받아주는 것을 대리자, 대리인과 같은 역할을 한다고 하여 프록시(Proxy)라 부른다. 프록시를 통해 최종적으로 요청을 위임받아 처리하는 실제 오브젝트를 타깃(tartget) or 실체(real subject)라 부른다.프록시의 특징은 타깃과 같은 인터페이스를 구현했다는 것과 프록시가 타깃을 제어할 수 있는 것이다... 2017. 4. 7.