티스토리 뷰

왜 쓰게 되었나? 

Spring에서 AOP개념을 공부하다 보면, Spring은 프록시 패턴 기반(정확히는 동적 프록시)이라 AOP 구현체다.라는 말들을 많이 듣게 된다. 프록시라는 용어는 사실 네트워크 때 더 많이 들은 것 같은데, 나에게는 이해와 단어가 따로 노는 단어였다.

 

그래서 프록시가 뭐냐?

위키피디아의 정의를 빌려오자면, 다른 무언가와 연결하는 인터페이스 역할을 하는 놈이란다.  저 그림을 보고 프록시가 이해가 되는가..? 나는 그림만 보고는 왜쓰는지 전혀 이해를 할 수 없었다. (예전엔 이렇게 정의만 보고 외웠으니 나는 이해하지 못할 만하다 -_-;)

 

어떻게 하면 쉽게 이해할 수 있을까?

 

프록시는 관절이다.

 어떤 메서드 내부에서 다른 함수를 호출했다고 가정하자. 프록시 패턴없이 사용한다면,  위 그림대로 함수를 호출하고 반환값이 있다면, 그림과 같이 받게 될 것이다. 

 

그러나 프록시 패턴으로 함수 호출을 한다면, 위와 같은 그림으로 표현될 수 있다. 현재 그림을 해석하자면, 다음과 같이 해석할 수 있다.

  • Proxy라는 녀석은 인터페이스다. (function이란 호출을 받을 수 있으니까)
  • Proxy 라는 녀석은 function이라는 놈을 대신 불러 준다.

즉, 해당 함수를 호출하기 까지 하나의 다리를 더 거친다는 소리다. 여기서 의문이 들 수 있다.

 

"왜 이런 헛짓거리를 하는 거지? 무슨 이득이 있지?"

 

만약, 함수의 지연시간(Latency)를 계산하고 싶다고 하자. 그렇다면 Non-proxy의 경우, 함수 내부에 시작과 끝의 시간 차이를 반환하는 코드를 추가해줘야 할 것이다. 그러나 proxy의 경우, 함수를 건들 필요조차 없다. 프록시가 함수를 부르기 전후에 코드를 추가하면 되기 때문이다.

 

내가 관절이라고 표현한 이유가 바로 이 이유다. 프록시 패턴을 통해 대신 함수를 호출한다. 직접 접근이 아니라, 프록시라는 관절을 통해 호출하기 때문에, 조금 더 유연한 동작들이 가능하다는 의미이다. 여기서 유연하다는 것은 호출을 조금 느리게 한다거나, 호출하기 전에 다른 일을 하고 호출을 한다거나, 혹은 호출한 뒤에 다른 일을 하고 보내 주거나 할 수 있다는 것. 

 

즉, 프록시를 이용하여, 본연의 구조는 바꾸지 않으면서, 호출 전후로 유연하게 다른 일을 끼울 수 있다는 것이다. (이 점에서 매우 데코레이터 패턴과 같은 느낌을 받았다.)

 

 아까 예를 들었던 함수에 대한 지연시간(Latency)에 대해 proxy 패턴의 관점으로 보자면 위와 같다., 더 이상 함수 내부에 코드를 쓰지 않고, 함수 시작 전(파란 타원) 부분에 시작 시간을 넣고,  함수 종료 후(노란 타원) 부분에 끝나는 시간을 계산한다면, 본연의 코드를 유지한 채 Latency를 확인할 수 있는 것이다. 

 

정리하자면, 프록시로 인해 생기는 특징은 다음과 같다.

 

  1.  객체의 접근에 대해 사전 전처리를 할 수 있다.
  2.  본연에 코드를 그대로 유지할 수 있다.(필요한 기능에만 집중할 수 있다.)
  3.  본연 코드를 유지한 채 기능을 추가할 수 있다.

 

프록시 패턴의 의도는 위의 특징처럼, 해당 로직은 필요한 기능에만 집중하도록 하고, 부속적인 기능을 프록시를 통해 추가하는 것이다. 즉, 본연 코드의 로직을 바꾼다거나, 반환값을 바꾸는 것이 아니다. 

 

 

 

프록시 패턴에 대해서는 종류도 다양하지만, 가장 중요한 부분에 대해서만 포스팅을 남겼다.

핵심은 기존 기능은 유지한 채 부가적인 것들을 걷어서 적용할 수 있다는 것 같다.

흐름을 방해하지 않는 선에서 필요한 부속적인 기능들을 추가하기 위한 패턴?이라고 느꼈다. 이 느낌은 AOP를 공부하면, 더욱 확실하게 느껴질 것이다.

 

프록시를 찾아보면서, AOP와 또 디자인 패턴에 대한 학구열이 불타오르는 것 같다. 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   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
글 보관함