이 게시글에서는 "스프링 핵심 원리 - 고급편" 강의를 수강하면서 얻은 것들을 기록하려고 한다. 나중에 성장한 후에 현재의 나를 되돌아볼 수 있도록, 다른 글과는 다르게 두서없이 지금의 생각을 그대로 담아 작성할 예정이다.
평소 Spiring AOP를 정말 자주 사용하지만, 원리에 대해서 깊게 알지 못한다는 것에 대해서 답답함을 많이 느끼고 있었다. 특히, aop마다 순서가 존재해요. 지금 프로젝트로 예시를 들자면... 의 Pull Request에서 볼 수 있듯이, AOP 관련 오류를 수정하면서 내가 지금 뭘 알고 오류를 수정하고 있는 것인가? 라는 생각이 들게 되었다. 마치 훈련소 가서 처음으로 K2 소총을 만지고 있는 기분?..
그래서 해당 프로젝트가 끝나자마자, AOP에 대해 제대로 공부하기 위해서 핵심 원리 - 고급편을 수강하게 되었다.
사실 AOP에 대해 공부하는 방법은 강의 말고도 많다. 코드를 디버깅하며 분석해봐도 되고, 이미 다른사람이 분석하면서 정리한 글을 봐도 된다. 하지만 Spring 핵심 원리 - 기본편을 수강하고, 자바 ORM 표준 JPA 프로그래밍을 읽고난 뒤, 김영한님에 대한 믿음(?)이 있었기 때문에 수강하였다.
결론부터 말하자면, 솔직히 김영한님에 대해서 벽을 느끼게 되었다. 이게 재능이구나 싶었다. 특히, 프록시 패턴과 데코레이터 패턴을 소개하며 불편하다는 이유로 자연스럽게 JDK 동적 프록시와 CGLIB 를 소개하고, 또 다시 불편하다는 이유로 프록시 팩토리를 소개하고, 또다시 불편하다는 이유로 빈 후처리기를 소개하고, 또다시 불편하다는 이유로 Spring AOP를 도입하는 부분이 마치 훈련소에서 k2 소총을 손쉽게 분해하는 훈련소 조교를 처음 본 기분이었다.
당연하게도 그 후에 나오는 Spring AOP에 대한 자세한 설명은 최고였다. k2 소총을 직접 총기 손질하며, 몸으로 느낄 수 있었는데 총을 쏘는게 두렵겠는가... 나는 앞으로 AOP를 다루는 것에 무서움이 없을 것이다.