AOP 관점지향프로그래밍
AOP
직역하면 관점지향프로그래밍 인데, 한국말로 들으면 전혀 와닿지 않습니다.
좀 더 이해가 가기 쉬운 의미로 해석해보자면, 애플리케이션 전체에 걸쳐 사용되는 기능을 재사용하도록 지원하는 것입니다.
실무에서는 흔히 공통적인 흐름의 코드를 적용시켜 줄 때 주로 사용합니다.
지금 이 글에서는 AOP를 구현하는 방법들에 대해 이론만 설명하겠습니다.
AOP를 구현하는 방뻡
- 컴파일 코드 파일을 컴파일링 할 때 AspectJ 라는 걸로 AOP를 구현하는 코드를 넣은 것 처럼 컴파일 해줍니다.
- 바이트 코드 조작 컴파일 된 클래스 파일에는 실제로 AOP에 대한 코드는 컴파일 되어있지 않지만, 코드를 실행하기 위해 클래스 로더가 클래스를 읽을 때 메모리 상에서 바이트 코드를 조작하여 AOP를 구현 해줍니다. (이것 역시 AspectJ에서도 지원)
- 프록시 패턴 스프링에서 사용하는 핵심적인 기능 Proxy: 클라이언트 레벨에서의 코드 변경이 필요하지 않게 하면서, 실제 내부적으로는 같은 인터페이스를 구현하고 있는 원래의 클래스를 감싸고 있는 형태의 대체 객체를 사용하는 것입니다. 스프링 에서는 이러한 개념을 사용해서 AOP를 프록시 객체에서 구현 해줍니다.
참고
- https://jojoldu.tistory.com/71\
- “백기선”님의 스프링 프레임워크 AOP강좌