Whiteship's Note

Toby's 스프링 AOP 마무리



지금은 스프링 AOP를 넘어서 스프링 활용 부분을 읽고 있는데 기억에서 떠나기 전에 정리해둬야겠다.

 AOP 챕터가 다소 크다는 느낌을 받았다. 스프링 AOP 기능 뿐 아니라 트랜잭션에 관한 설명도 상당 부분이 나온다. 하지만 스프링 트랜잭션을 이해하려면 스프링 AOP에 대한 이해가 필수적이고 스프링 AOP를 이해하기 위한 좋은 예로 스프링 트랜잭션 만큰 좋은 것도 없다고 생각이 든다. 따라서 스프링 AOP를 설명한 굉장한 분량만큼이나 그 노고를 느낄 수 있었다. 특히 중간 중간 텍스트로 인해 지칠 수 있는 독자들을 위한 그림들은 상당히 단순 명료하면서도 배려적이다.

그 중에서 가장 눈길을 끈 곳은 포인트컷 테스트였다. 정말 대박이었다. 예전에 읽었을 때에도 감명을 받고 사실 그 내용을 바탕으로 포인트컷 표현식 테스트에 대한 블로깅까지 했던적이 있다. AOP를 사용할 때 항상 고민하던 부분이었다. 도대체 이 포인트컷이 어디에 적용이 되는건지 확실하게 알 수 없을까... 이클립스나 인텔리J 도움 없이 조인포인트를 확인할 수 있는 아주 간단한 방법이 있다는 것을 보고는 새삼 놀랐다. 내가 너무 모른다는 사실도 한몫했다.

또한 execution 포인트컷에서 사용하는 표현식을 분석한 표역시 대단하다는 생각밖에 들지 않는다. AOP 용어도 이해하고 대강의 사용법까지 익히더라도 항상 막막한 부분은 바로 표현식 작성이었다. 지금 읽은 부분에서는 아직 args나 this, type같은 건 등장하지 않았지만 아마 2부에서 더 자세하게 다룰 것 같다.

AOP 용어 정의를 거의 맨 뒤에서 설명하는 이럭 획기적인 방식으로도 AOP를 더 쉽고 알차게 학습 할 수 있다는 사실에 여러분도 놀랐것이다.  



top

  1. Favicon of http://lckymn.com BlogIcon Kevin 2010.05.18 23:44 PERM. MOD/DEL REPLY

    역시 트랜잭션 문제 해결하려면, AOP 를 고려해 보는게 좋겠죠?
    저도 최근에 DB Transaction 말고 파일시스템에서 파일 생성, 복사 등등에 관련된
    파일 트랜잭션 문제 해결하느라 AspectJ 사용해서
    FileTransactionManager 를 만들었습니다.

    파일 업로드 하다 실패하면, DB는 Transaction 지원되니,
    스프링에서 알아서 rollback 해 주는데, 파일 시스템에 저장된 파일은 해결이 안되서,
    일단 AOP로 파일 생성/복사 하는 메소드들만 처리해 주다가
    아예 @Transactional 처럼 annotation만 쓰면
    알아서 처리해주는 FileTransactionManager를 만들어 버린거죠.
    만들면서 또한번 '아! 역시 AspectJ 너무 좋아' 라는걸 느꼈습니다.

    Favicon of http://whiteship.me BlogIcon 기선 2010.05.19 12:05 PERM MOD/DEL

    넵. 트랜잭션 관리 코드가 서비스 계층으로 올라오면서 부터 지져분해지는 길의 시작이랄까요..그렇다고 DAO에 둘수는 없자나요ㅋ

    오홋.. 좋군요. 해당 애노테이션 붙어있는 메서드에 포인트컷 걸고 예외 발생했을 때 생성된 파일을 청소해주는 어드바이스 적용하셨나보군요.

    근데 ApsectJ는 조금 귀찮지 않으세요? 위버나 ajc를 사용해야 할텐데요. 하긴 ajc를 메이븐 빌드로 돌리면 별로 귀찮지 않을수도..

  2. Favicon of http://lckymn.com BlogIcon Kevin 2010.06.01 18:39 PERM. MOD/DEL REPLY

    네, 그렇게 되는거죠. :)
    거기에 nested transactions 관련된 부분 조금 신경쓴거 정도겠군요.
    트랜잭션 걸린 메소드 안에서 실행되는 다른 메소드에 트랜잭션이 겹겹이 걸렸다고 이미 지운 파일을 또 지우려고 하면 안돼잖아요. 거기다가 트랜잭션 전체가 끝날때까지 생성된 파일 정보를 가지고 있다가
    모든 트랜잭션이 전부 마무리 되었을때, 관리하에 있던 파일 정보 다 날리는거랑요.

    가끔 privileged aspect 를 쓸일이 있어서
    ajc 를 쓰고 있습니다만, 직접 컴파일 하는게 아니고
    Eclipse에서는 AJDT 와 m2eclipse 를 써서 별 불편없구요.
    빌드시에는 maven으로 aspectj-maven-plugin 써서 하구요.
    그래서 크게 귀찮은거 없는데...

    사실 불편이 없어야 하는데 하나가 좀... :)
    가끔 스프링의 @Transactional 적용한 메소드에
    weaving이 잘 안되는 경우가 있더군요.
    아무래도 aspectLibrary 적용하는 부분때문에 그런거 같습니다만.
    실험좀 해보니까, m2eclipse에서 full-build 를 해야
    이게 정상적으로 위빙이 되는데...

    m2eclipse와 AJDT eclipse-maven-plugin 중에
    어디가 문제인지는 모르겠지만, 아무튼 이게 가끔 제대로 안되더군요.
    수동 clean 빌드를 하면 full-build를 수행해서 정상적으로 되구요.

    해결하려고 이거저거 다 시도 해봤는데, clean말고 더 편한 해결책을
    못 찾았습니다. ㅠ_ㅠ 그냥 m2eclipse가 AJDT 이용해서
    컴파일 하면서 full-build 하면 될것 같은데... 이녀석이 말을 안 듣네요.
    아무튼 그래서 코딩하다가 실행해 보기 전에 clean을 해줘야 하는게
    좀 불편합니다. 그래서 이거 단축기 걸어놓고 쓰고 있어요.

    아... 그리고 그래서 Eclipse 버리기가 힘드네요.
    NetBeans 나 IntelliJ IDEA 다 써봤는데,
    이거 세세하게 제 마음대로 옵션을 바꾸려니 Eclipse 만큼 편한게 없네요.
    저는 foramming 부터 해서 단축키등등 이거저거 제가 편하게 쓸수 있게
    설정해서 쓰기 때문에 NetBeans 처음 사용해보고 불편해서 바로 삭제...ㅡ_ㅡ;

    암튼, 사실 생각보다 크게는 불편하지는 않구요.
    코딩 조금하고 실행해보고 이러지 않고 한참 하고나서 실행해 보니까요.
    (빌드전까지 보통 한번만 실행...^^; )
    실행전에 clean 한번 해주는걸로 해결하고 있습니다.
    중간에 자잘한거 테스트는 테스트 코드가 해주구요.

    아 근데, 쓰다보니 하나 떠오르는게 있네요. 아무래도 AJDT가 이해하게
    따로 aspectPath를 설정해 줘야 할것 같기도하고,
    이게 pom.xml에 되어 있긴 한데... 아무튼 지금은 잘 쓰고 있으니
    시간나면 한번 실험해 봐야겠네요.

    Favicon of http://whiteship.me BlogIcon 기선 2010.06.01 21:38 PERM MOD/DEL

    흠.. 인텔리J도 얼마든지 단축키를 맘대로 바꿔서 사용할 수 있어요. 요즘은 둘다 번갈아 가면서 쓰고 있긴 한데 그래도 인텔리J를 더 자주 쓰게 되네요.

    궁극적으로는 스프링 AOP에서 AspectJ로 넘어가면 좋긴하겠는데(프록시 내부 호출이나 런타임 오버헤드를 해결할 수 있으니) 기능이 너무 강력하단게 어떨땐 흠인것 같기도 하고.. AspectJ까지 사용할만큼 AOP를 즐겨 쓰진 못해서 걍 스프링 AOP로 만족하고 있어요 ㅋㅋ

Write a comment.




: 1 : ··· : 117 : 118 : 119 : 120 : 121 : 122 : 123 : 124 : 125 : ··· : 2638 :