프록시 패턴이란?

이재윤·2024년 12월 4일
0

디자인 패턴

목록 보기
1/1
post-thumbnail

백기선님의 코딩으로 학습하는 GoF의 디자인 패턴을 참고해서 작성된 글입니다.

1) 프록시 패턴이란?

  • 프록시 패턴은 특정 객체의 오퍼레이션을 직접 접근하지 않고, 중간에 프록시 객체를 거쳐서 접근하는 디자인 패턴입니다.
    프록시 객체는 클라이언트의 요청을 받아서,
    원래의 객체에 대한 접근을 제어하거나 특정 기능을 추가하는 역할을 합니다.

  • 프록시(Proxy)는 사전적으로 '대리인'을 의미합니다.
    클라이언트가 원래 객체를 직접 사용하지 않고,
    중간에 위치한 프록시 객체를 통해 객체에 접근하는 패턴입니다.

  • 클라이언트는 원래의 객체를 직접 호출하는 것이 아니라,
    프록시를 통해 호출하게 됩니다.
    이렇게 함으로써 원래 객체에 대한 접근을 제어하고,
    특정 기능을 추가하거나 성능을 최적화할 수 있습니다.

2) 프록시 패턴의 주요 활용

(1) 접근 제어

  • 예를 들어, Spring Security와 같은 시스템에서 프록시 패턴을 활용하여,
    특정 권한을 가진 사용자만 원래 객체의 기능에 접근할 수 있도록 할 수 있습니다.

(2) 리소스 초기화 지연

  • 객체가 생성하는 데 많은 리소스를 소모한다면,
    프록시를 통해 객체가 처음 사용될 때만 생성되도록 지연 초기화를 할 수 있습니다.

(3) 로깅 및 캐싱

  • 프록시 객체는 요청에 대해 로깅하거나 캐싱과 같은
    부가적인 작업을 할 수 있습니다.
    예를 들어, 데이터를 가져오는 과정에서 프록시를 거쳐서
    캐시된 데이터를 반환하는 방식으로 성능을 최적화할 수 있습니다.

3) 프록시 패턴의 장점

(1) 기존 코드 변경 없이 새로운 기능 추가 가능

  • 원래 객체의 기능을 변경하지 않고, 중간에 프록시를 추가함으로써 기능을 확장할 수 있습니다. 이는 개방-폐쇄 원칙(Open-Closed Principle)을 준수하는 방법입니다.

(2) 단일 책임 원칙(Single Responsibility Principle) 준수

  • 프록시 객체는 객체에 대한 접근 제어나 부가적인 기능을 담당하므로, 원래 객체는 본연의 역할만 수행할 수 있습니다.

(3) 기능 다양화 및 성능 최적화

  • 지연 초기화, 로깅, 캐싱 등 다양한 기능을 프록시 객체에서 처리하여, 원래 객체의 성능을 최적화할 수 있습니다.

4) 프록시 패턴의 단점

(1) 코드 복잡도 증가

  • 프록시 패턴을 사용하면 코드 구조가 복잡해질 수 있으며,
    특히 프록시 객체와 실제 객체 간의 관계를 관리하는 데 어려움이
    있을 수 있습니다.

5)프록시 패턴의 구현

(1) 자바에서의 프록시 패턴

다이나믹 프록시: 자바에서는 java.lang.reflect.Proxy 클래스를 사용하여 런타임에 동적으로 프록시 인스턴스를 생성할 수 있습니다. 이는 객체의 메서드를 가로채고 처리하는 데 유용합니다.

(2) 스프링에서의 프록시 패턴

스프링 AOP(Aspect-Oriented Programming)

  • 스프링에서는 AOP를 통해 프록시를 생성하고,
    특정 메서드 호출 전후에 부가적인 작업을 삽입할 수 있습니다.
    이를 통해 로깅, 트랜잭션 처리, 권한 검증 등을 손쉽게 구현할 수 있습니다.

0개의 댓글