→ 모든 API 동작 시 성능 측정 할 수 있도록 로그를 좀 남겨주세요
💡 **[Proxy Pattern이란?] - OOP의 극 → 디자인패턴 하나** Proxy pattern은 software design pattern 중 하나입니다. 일반적으로 proxy란 실제 객체(여기서는 Spring bean)에 대한 interface 역할을 수행하는 class의 객체를 말합니다. proxy와 resource는 동일한 interface type을 구현합니다. proxy와 실제 객체는 동일한 interface type이기 때문에 동일한 책임(method)을 수행할 수 있어야 합니다. 하지만 proxy는 직접 책임을 수행하지 않고 실제 객체가 대신 처리하도록 delegation 합니다. 그렇기 때문에 proxy는 실제 객체를 감싸서 client와 실제 객체사이를 중계하는 역할을 하는 wrapper로 사용됩니다. 실제 객체를 수정하지 않고 책임을 추가하거나 접근제어를 하기 원하는 경우 실제 객체 대신 proxy만 수정해주면 되므로 유지보수에 대한 부담을 줄일 수 있습니다.
OOP는 비지니스 로직을 모듈화해 객체를 재사용함으로 코드의 중복을 많이 줄일 수 있었지만, 그럼에도 반복되는 코드를 없앨수는 없다.
AOP가 이러한 부분을 해결해주었다. 기능을 비지니스 로직과 공통 모듈로 구분한 후 개발자의 코드 밖에서 필요한 시점에 비지니스 로직에 삽입하여 실행되도록 한다.
AOP를 사용하므로써 중복 코드를 제거하고, 재활용성이 극대화가 된다.
AOP는 Aspect Oriented Programming의 약자로 관점 지향 프로그래밍이라고 불린다. 관점 지향은 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 모듈화 하겠다는 것이다.
nterceptor, filter, 트랜잭션
예를 들어 핵심적인 관점은 비즈니스 로직이 될 수 있고, 부가적인 관점은 핵심 로직을 실행하기 위해 행해지는 데이터베이스 연결, 로깅, 파일 입출력 등이 될 수 있다.
AOP는 흩어진 관심사(Crosscutting Concerns)를 모듈화 할 수 있는 프로그래밍 기법이다
[그림 1]과 같이 클래스 A, B, C에서 공통적으로 나타나는 색깔 블록은 중복되는 메서드, 필드, 코드 등이다. 이때 예를 들어 클래스 A의 주황색 블록 부분을 수정해야 한다면 클래스 B, C의 주황색 부분도 일일이 찾아 수정해야 한다. 이는 SOLID원칙을 위배하며 유지보수를 어렵게 만든다. 이런 식으로 소스 코드상에서 계속 반복해서 사용되는 부분들을 흩어진 관심사(Crosscutting Concerns)라고 한다.
결국 AOP에서 각 관점을 기준으로 로직을 모듈화한다는 것은 흩어진 관심사를 모듈화하겠다는 의미다. [그림 1]과 같이 주황색, 파란색, 빨간색 블록처럼 모듈화 시켜놓고 어디에 적용시킬지만 정의해주면 되는 것이다. 이때 모듈화 시켜놓은 블럭을 Aspect라고 한다.