좋은 질문입니다. 프록시 패턴(Proxy Pattern)과 AOP(Aspect-Oriented Programming)는 개념적으로 매우 밀접한 관련이 있습니다. 실제로 AOP는 내부적으로 프록시 패턴을 활용해서 구현되는 경우가 많습니다.
이번에는 두 개념을 비교하면서, 어떻게 연관되는지 체계적으로 설명드리겠습니다.
🔷 1. 프록시 패턴 (Proxy Pattern) 이란?
프록시(Proxy)란 어떤 객체에 대한 접근을 제어하기 위한 대리 객체입니다.
✅ 목적
- 실제 객체에 접근하기 전이나 후에 부가적인 작업을 할 수 있도록 도와줍니다.
- 객체를 감싸는 래퍼(wrapper) 역할을 합니다.
✅ 예제
public interface Service {
void doWork();
}
public class RealService implements Service {
public void doWork() {
System.out.println("업무 처리 중...");
}
}
public class LoggingProxy implements Service {
private final Service target;
public LoggingProxy(Service target) {
this.target = target;
}
public void doWork() {
System.out.println("[LOG] 시작");
target.doWork();
System.out.println("[LOG] 끝");
}
}
- LoggingProxy는 실제 서비스(RealService) 앞뒤로 로그를 추가합니다.
- 핵심 로직은 건드리지 않고 부가기능만 추가하는 것이 핵심입니다.
🔷 2. AOP (Aspect-Oriented Programming) 이란?
AOP는 핵심 로직과 부가적인 관심사(로깅, 트랜잭션, 보안 등)를 분리해서 관리하기 위한 프로그래밍 패러다임입니다.
✅ 핵심 개념
- 관심사의 분리 (Separation of Concerns)
- 중복 코드 없이, 여러 곳에 흩어진 부가기능을 한 곳에서 관리 가능
✅ 주요 용어
용어 설명
| Aspect | 부가 기능 (ex: 로깅, 트랜잭션 등) |
| Join Point | 부가 기능이 삽입될 지점 (ex: 메서드 실행 시점 등) |
| Advice | Join Point에 수행할 코드 (before, after 등) |
| Pointcut | 어떤 Join Point에 Advice를 적용할지를 결정 |
| Weaving | 실제로 코드를 조합해서 동작하도록 만드는 작업 |
🔷 3. 프록시 패턴과 AOP의 관계
✅ 공통점
항목 설명
| 핵심 객체를 감싼다 | 실제 객체를 감싸고 추가 로직을 넣는다 |
| 부가기능 삽입 | 핵심 로직은 그대로 두고, 앞뒤에 부가기능을 넣는다 |
| 런타임 동작 가능 | 런타임에 동적으로 프록시 객체를 생성할 수 있음 |
🔷 4. AOP가 프록시 패턴을 사용하는 방식
Spring AOP를 예로 들면:
- Spring은 내부적으로 프록시 객체를 생성해서 AOP를 구현합니다.
- 기본적으로는 JDK 동적 프록시 (인터페이스 기반), 혹은 CGLIB 프록시 (클래스 기반)를 사용합니다.
✅ 예:
@Service
public class OrderService {
public void order() {
System.out.println("주문 처리 중...");
}
}
@Aspect
@Component
public class LogAspect {
@Before("execution(* com.example..*Service.*(..))")
public void beforeLog() {
System.out.println("[LOG] 메서드 시작");
}
}
Spring은 OrderService를 감싸는 프록시 객체를 생성해서, order() 호출 전 beforeLog()를 실행하도록 합니다.
🔷 5. 비교 정리
항목 프록시 패턴 AOP
| 목적 | 객체 접근 제어, 부가기능 삽입 | 관심사의 분리 (SoC) |
| 구현 주체 | 개발자가 직접 구현 | 프레임워크(Spring 등)이 자동 생성 |
| 적용 대상 | 하나의 객체에 수동 적용 | 여러 객체에 자동 적용 |
| 코드 재사용 | 어려움 (중복 많음) | 쉬움 (Aspect로 분리) |
| 내부 구현 | 직접 프록시 클래스 생성 | 내부적으로 프록시 패턴 활용 |
🔷 6. 요약
AOP는 프록시 패턴을 기반으로 동작하며, 여러 객체에 중복 없이 부가기능을 삽입할 수 있게 만든 확장 개념이라고 볼 수 있습니다.
- 프록시 패턴은 AOP의 "구현 수단"
- AOP는 "설계 철학" 또는 "패러다임"
'탐구하기' 카테고리의 다른 글
| Maven과 Gradle의 역할과 기능은 무엇일까? (2) | 2025.06.02 |
|---|---|
| @SpringBootApplication은 어떤역할을 하는 어노테이션일까? (0) | 2025.06.02 |
| Dependency Injection는 무엇일까? (0) | 2025.05.22 |
| POJO란 무엇인가? (3) | 2025.05.20 |
| Spring 프레임워크는 무엇일까? (1) | 2025.05.20 |