티스토리 뷰

DesignPattern

Proxy Pattern

Jodu 2016. 10. 23. 21:01
반응형

이번 포스팅은 Proxy Pattern에 대한 내용이다. 모든 사람들이 Proxy Pattern에 대해서 설명할 때 Proxy라는 단어를 먼저 설명하면서 시작하듯이 나 또한 Proxy라는 단어의 뜻을 설명하자면 대리인, 대리자라는 뜻이라는 것으로 설명하려 한다.


단어의 뜻도 중요하지만 디자인패턴을 공부하면서 중요하게 생각해야 할것이 이 Pattern을 어디에 사용하고 사용했을때의 장점은 무엇인지에 대해서 생각하는 것이 매우 중요한것 같다.

그래서 스프링에서는 Proxy Pattern을 어떻게 사용하는지 찾아 보던 중 잘 정리해주신 분의 글을 보았다.

http://aretias.egloos.com/708477


링크에 설명된 내용을 요약하자면 이러하다. 스프링에서는 @Transaction 어노테이션을 사용할 수 있는데 이 어노테이션을 사용하게 되면 스프링은 자동을 Proxy 패턴으로 사용하여 트랜잭션을 관리하게 된다.


아래에서는 위의 링크 내용을 프록시 패턴이 적용된 소스로 설명을 시작하고자한다. 물론 스프링에서 이와 같은 허접한 소스로 되어 있지 않다는것을 생각해주시길 바란다. 아마 동적 프록시 패턴을 사용할 거 같은 느낌이 팍팍들긴한다.


먼저 비지니스 서비스 인터페이스에 대한 소스이며 이 소스는 들어오는 데이터를 insert하는 동작에 대한 구현을 요구하고 있다.



다음은 이것을 구현하는 비지니스서비스 클래스에 대한 소스이다. 단순히 비지니스 서비스 인터페이스에서 요구하는 insertData 메소드에 대한 구현만을 하고 있다.



이 두개의 내용을 실행시키면 다음과 같은 결과를 볼 수 있다.



위의 결과는 insertData메소드가 동작하였는데 동작한 인스턴스가 BusinessServiceImpl 라는것을 볼 수 있다.


그럼 이제 부터 Proxy Pattern을 적용해서 트랜잭션이 동작하는 모습을 흉내 내보자.
먼저 BusinessServiceImpl인스턴스의 대리자가 Proxy 클래스를 구현한다.


먼저 Proxy가 BusinessServiceImpl의 대리자로서 역할을 하려면 BusinessServiceImpl이 구현하는 인터페이스를 자신도 구현해야한다. 그래야 클라이언트 측에서 동일한 메소드를 호출할 수 있다. 그리고 Proxy가 생성 될 때 위임할 인스턴스를 생성하여 메소드 호출시 위임되는 인스턴스의 메소드가 동작될 수 있도록 한다.


해당 TransactionProxy를 동작시키면 다음과 같은 결과를 확일 할 수 있다.



트랜잭션에 관련된 내용이 적용 되었고 insertData메소드가 동작되었는데 동작한 인스턴스는 TransactionProxy인것을 확인 할 수 있다.

이와 같이 클라이언트 입장에서 단지 프록시에 대한 인스턴스 생성으로 트랜잭션 처리와 비지니스 서비스 동작까지 하게 해준것이 Proxy Pattern이다. Proxy Pattern을 위와 같은 경우 말고 대상이 되는 인스턴스의 생성 비용이 크거나 자원접근에 대한 제어대해서도 사용을 할 수 있다.


반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함