Design Pattern : Proxy

Victor·2026년 1월 22일

1. Proxy 정의

이미지 출처 : Refactoring Guru

프록시는 다른 객체에 대한 대체제나 대변자를 제공하는 구조적 디자인 패턴이다. 프록시는 원래 객체에 대한 접근을 제어하므로, 요청이 실제 객체에 전달되기 전후에 추가적인 작업을 수행할 수 있도록 한다.

이는 현실 세계에서 신용카드가 현금의 프록시 역할을 수행하며 동일한 결제 인터페이스를 제공하는 것과 유사하다.

2. 구조 및 작동 원리

이미지 출처 : Refactoring Guru

프록시 패턴은 서비스 인터페이스, 실제 서비스 클래스, 프록시 클래스, 클라이언트로 구성된다. 프록시는 서비스 객체와 동일한 인터페이스를 구현하여 서비스 객체로 위장한다.

클라이언트로부터 요청을 받으면 프록시는 실제 서비스 객체를 생성하고 작업을 위임하며, 이 과정에서 객체의 수명 주기를 직접 관리한다.

3. 활용 사례

  • 지연 초기화 (가상 프록시): 자원 소모가 큰 객체를 실제로 필요할 때만 초기화하여 시스템 자원을 절약한다.

  • 접근 제어 (보호 프록시): 클라이언트의 권한을 확인하여 특정 조건이 충족될 때만 요청을 전달한다.

  • 원격 서비스 실행 (원격 프록시): 서비스 객체가 원격 서버에 있을 때 네트워크 통신의 복잡한 세부 사항을 프록시가 대신 처리한다.

  • 로깅 및 캐싱: 서비스 객체에 대한 요청 기록을 유지하거나, 동일한 요청에 대해 결과를 캐싱하여 성능을 향상시킨다.

  • 스마트 참조: 객체를 사용하는 클라이언트가 없을 때 자원을 해제하기 위해 참조 상태를 추적한다.

4. 장점과 단점

클라이언트가 알지 못하는 상태에서 서비스 객체를 제어하거나 수명 주기를 관리할 수 있다는 것이 큰 장점이다. 또한 개방/폐쇄 원칙(OCP)을 준수하여 기존 코드를 수정하지 않고 새로운 프록시를 도입할 수 있다.

하지만 새로운 클래스 도입으로 인한 코드 복잡성 증가와 프록시를 거치는 과정에서 발생하는 응답 지연은 단점으로 작용할 수 있다.

5. 다른 패턴과의 관계 비교

  • Adapter : 어댑터는 다른 인터페이스를 통해 객체에 접근하지만, 프록시는 동일한 인터페이스를 유지한다.

  • Decorator : 구조는 유사하나 데코레이터는 기능 추가에 중점을 두는 반면, 프록시는 객체의 수명 주기를 직접 관리한다.

  • Facade : 복잡한 엔티티를 제어한다는 점은 비슷하지만, 프록시는 서비스 객체와 상호 교환이 가능하다는 특징이 있다.


참고

https://refactoring.guru/design-patterns/proxy

https://refactoring.guru/design-patterns/adapter

0개의 댓글