프록시 패턴과 AOP에 대해서 연관성

2025. 5. 22. 13:19·탐구하기

좋은 질문입니다. 프록시 패턴(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
'탐구하기' 카테고리의 다른 글
  • Maven과 Gradle의 역할과 기능은 무엇일까?
  • @SpringBootApplication은 어떤역할을 하는 어노테이션일까?
  • Dependency Injection는 무엇일까?
  • POJO란 무엇인가?
ayinyun
ayinyun
ayinyun 님의 블로그 입니다.
  • ayinyun
    ayinyun 님의 블로그
    ayinyun
  • 전체
    오늘
    어제
    • 분류 전체보기 (75)
      • SQL 개발 공부 (8)
      • JAVA 개발 공부 (4)
      • JavaScript(JS) (1)
      • React (1)
      • 탐구하기 (38)
      • KPT회고록 (14)
      • SpringBoot (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
ayinyun
프록시 패턴과 AOP에 대해서 연관성
상단으로

티스토리툴바