티스토리 뷰
이번 포스팅은 Proxy Pattern에 대한 내용이다. 모든 사람들이 Proxy Pattern에 대해서 설명할 때 Proxy라는 단어를 먼저 설명하면서 시작하듯이 나 또한 Proxy라는 단어의 뜻을 설명하자면 대리인, 대리자라는 뜻이라는 것으로 설명하려 한다.
단어의 뜻도 중요하지만 디자인패턴을 공부하면서 중요하게 생각해야 할것이 이 Pattern을 어디에 사용하고 사용했을때의 장점은 무엇인지에 대해서 생각하는 것이 매우 중요한것 같다.
그래서 스프링에서는 Proxy Pattern을 어떻게 사용하는지 찾아 보던 중 잘 정리해주신 분의 글을 보았다.
http://aretias.egloos.com/708477
링크에 설명된 내용을 요약하자면 이러하다. 스프링에서는 @Transaction 어노테이션을 사용할 수 있는데 이 어노테이션을 사용하게 되면 스프링은 자동을 Proxy 패턴으로 사용하여 트랜잭션을 관리하게 된다.
아래에서는 위의 링크 내용을 프록시 패턴이 적용된 소스로 설명을 시작하고자한다. 물론 스프링에서 이와 같은 허접한 소스로 되어 있지 않다는것을 생각해주시길 바란다. 아마 동적 프록시 패턴을 사용할 거 같은 느낌이 팍팍들긴한다.
먼저 비지니스 서비스 인터페이스에 대한 소스이며 이 소스는 들어오는 데이터를 insert하는 동작에 대한 구현을 요구하고 있다.
먼저 Proxy가 BusinessServiceImpl의 대리자로서 역할을 하려면 BusinessServiceImpl이 구현하는 인터페이스를 자신도 구현해야한다. 그래야 클라이언트 측에서 동일한 메소드를 호출할 수 있다. 그리고 Proxy가 생성 될 때 위임할 인스턴스를 생성하여 메소드 호출시 위임되는 인스턴스의 메소드가 동작될 수 있도록 한다.
해당 TransactionProxy를 동작시키면 다음과 같은 결과를 확일 할 수 있다.