먹고 사는 이야기/프로그래밍

[toby의스프링] 6장 - AOP

Kunner 2011. 10. 5. 21:27

이전 장에서 말한 것처럼 Spring에서 가장 중요한 3가지 개념 중 하나인 AOP(Aspect Oriented Programming:애스펙스 지향 프로그래밍) 이다.
계속 말하지만, Spring이 추구하는 가장 중요한 개념은 서비스 추상화이다. (이것은 결국 객체지향 프로그램의 근본적인 목표이기도 하다.)
그리고 AOP 역시 서비스 추상화의 한 축을 담당하고 있는 것이다.

일반적으로 서비스 추상화를 위해서는 IoC/DI 개념을 바탕으로 인터페이스를 사용하면 된다.
하지만 책에서 소개된 바와 같이 트랜잭션과 같은 경우 각 메소드에 강한 응집력을 가지고 있지만, 해당 메소드의 코드 내에 트랜잭션 관련 코드를 매번 삽입해야 하므로 낮은 결합도를 유지할 수 없다. 따라서 일반적인 방식의 서비스 추상화를 이루기가 어렵다.
AOP는 이에 대한 효과적인 대안을 제시한다.
다시 말해, AOP란 "전통적인 객체지향기술의 설계방법으로는 독립적인 모듈화가 불가능한 트랜잭션 경계설정과 같은 부가 기능을 어떻게 모듈화 할 것인가"(본문 p.506)를 고민한 끝에 나온 OOP(Object Oriented Programming)의 보완적 개념이다.
 
사실 말로 하면 참 어렵게 느껴지지만.. 실제로 개발 경험이 있는 사람들은 이게 뭔 소린지, 그리고 이 개념이 얼마나 중요한 일인지 알 것이다.
이런 기술이 없는 전통적 방식의 개발에서는 Copy & Paste 와 Find & Replace, 그리고 "개발자의 기억력"이 프로젝트에 지대한 영향을 미칠 수 밖에 없었다.
하지만 Spring에서 제시하는 방법들을 사용하면 코드를 획기적으로 개선할 수 있다. 


<그림 6-21> 독립 애스펙트를 이용한 부가기능의 분리와 모듈화. (본문 p.507)



어렵게 들리지만, 사실 실제 개발에 들어가면 어느 정도 기계적 적용이 가능한 부분들일 것이다. 
책에서 다루고 있는 AOP를 이용한 트랜잭션 적용 방법 역시.

처음 Spring 책을 고를 때, 중급 이상 개발자들에게 추천한다는 어떤 독자의 서평이 생각이 난다. 꼭 중급일 필요는 없겠지만, 개발 경험이 없거나 한 사람들에게는 참 어렵지 않을까 싶다. 물론.. 개발 경험이 있다고 다 쉽게 읽힐 리는 없다. 응? -ㅅ-;


이 장에서는 프록시, 다이내믹 프록시, 프록시 패턴, 프록시 팩토리 빈, 포인트 컷, AspectJExpressionPointcut(AspectJ 포인트컷 표현식), 타입 패턴 및 클래스 이름 패턴, 어드바이스, 조인 포인트, 어드바이저, 애스펙트, AOP 네임스페이스 등 다양한 용어와 개념, 기술이 쏟아져 나온다. 이를 모두 완벽히 숙지한다면 참 좋겠지만, 주관식 시험 보는 것도 아니고, 그럴 필요는 없을 것이다. 각 개념들이 AOP에서 어떻게 작동하여 OOP를 보완하는가를 이해하는 것이 더욱 중요할 것이다.
물론 사용법을 숙지해야 한다는 것은 두 말 할 나위가 없을 것이다.



이번 장은 워낙 내용도 많고 다뤄진 개념도 방대하다.
블로그에 올리는 학습정리는 이 정도면 충분하지 않을까 한다.
각 기술의 실제 적용 코드는 학습이 진행될 수록 알아서 정리될 것이다.