본 글은 코드스쿼드 백엔드과정에서 마스터 Pobi의 글을 참고하고 작성되었습니다.
Aspected Oriendted Programming(AOP)
Servlet Filter와 Interceptor
최근 Interceptor가 어떻게 흘러가는지(개념과 작동원리는 아직 공부 중입니다) 알게되면 과연 AOP와 무엇이 다른 것인지 궁금했습니다. 왜냐하면 흐름만 본다면 어떤 요청을 처리하기 전과 후에 저희가 필요한 작업을 할 수 있다는 점에서 비슷하다고 생각하였기 때문입니다. 하지만 다음 그림을 보면서 어떠한 것이 다른지 조금이나마 이해할 수 있게되었습니다.
출처 : 코드스쿼드 Pobi의 AOP자료
위 그림을 좀 더 살펴보기 전에 Servlet에 대해 알아야할텐데요. Stackoverflow에 다음과 같은 글이 있네요.
A servlet is simply a class which responds to a particular type of network request - most commonly an HTTP request. Basically servlets are usually used to implement web applications - but there are also various frameworks which operate on top of servlets (e.g. Struts) to give a higher-level abstraction than the "here's an HTTP request, write to this HTTP response" level which servlets provide.
Servlets run in a servlet container which handles the networking side (e.g. parsing an HTTP request, connection handling etc). One of the best-known open source servlet containers is Tomcat.
출처 : https://stackoverflow.com/questions/7213541/what-is-java-servlet
위 글을 한 마디로 정리하면 'HTTP 요청과 같은 네트워크 요청에 대해 처리해주는 하나의 클래스'라고 이해하면 될 것 같네요. 이 Servlet 덕분에 저희가 네트워크에 대한 방대한 지식이 따로 필요하지 않더라도 요청값에 따른 처리만 구현하면 되는 것이죠! 위 그림을 보면 ServletFilter는 요청이 들어오면 입구에서 먼저 맞이를 하구요. 이후에 컨트롤러를 가기전에 Interceptor가 맞이하게 되네요. 그러니까 저희가 작업하기 전과 후에 둘 다 처리할 수 있다는 점에서 유사하지만 실행시점이 다른 것이었네요.
또 다른 블로그 글에서 Interceptor, filter, AOP의 차이에 대해 정리해놓은 글이 있어서 이것도 살펴볼게요.
출처 : http://blog.naver.com/PostView.nhn?blogId=platinasnow&logNo=220035316135
이번엔 AOP까지 등장했죠? 결국 정리하면 Filter가 1등, Interceptor가 2등, AOP가 3등으로 요청을 맞이하구요. 요청 후처리에 대해선 그 역순으로 진행이 됩니다. Filter와 Interceptor는 서블릿 단위에서 실행이 되지만, AOP는 Proxy패턴을 이용해서 실행이 된다고 합니다(이 부분은 무슨 말인지 잘 모르겠네요). 근데 위 블로그 글에서 가장 제가 찾고자 했던 정보이자 알고싶었던 부분을 설명해주는 부분이 있습니다.
AOP의 경우에는 Interceptor나 Filter와 달리 메소드 전후의 지점을 자유롭게 설정가능하고, interceptor와 filter가 주소로 밖에 걸러낼 대상을 구분 할 수 없는 것에 비해서 AOP는 주소, 파라미터, 어노테이션등 다양한 방법으로 대상을 지정할 수 있는 장점이 있습니다
다시 말하면 interceptor와 filter는 작업대상 제한을 주소로 밖에 안되었습니다. 하지만 AOP는 주소 이외에도 파라미터, 어노테이션으로 작업대상 제한을 시킬 수 있다는 점에서 좀 더 활용성이 많은 것입니다.
오늘 제가 궁금해했던 부분에 대해 조금이라도 실마리를 찾게되어서 기쁘네요. 물론 제가 이해한 부분이 아닐지도 모르지만 그래도 궁금해하기만 하고 알아가지 않는 것보단 낫다고 생각합니다. 그냥 이렇게 조금씩 알아가려구요!
'Spring' 카테고리의 다른 글
AOP4 (0) | 2018.12.23 |
---|---|
AOP3 (0) | 2018.12.21 |
AOP (0) | 2018.12.11 |
devtools 사용법 (0) | 2018.12.08 |
IoC/DI & Spring Bean Life Cycle3 (0) | 2018.12.06 |