inblog logo
|
maestrojava
    design pattern

    2. 프록시 패턴(Proxy Pattern)

    서주홍's avatar
    서주홍
    Aug 14, 2024
    2. 프록시 패턴(Proxy Pattern)
    Contents
    ■ 1. 프록시 패턴■ 2. 예제 코드■ 3. 프록시 패턴을 사용하는 이유■ 4. 스프링 AOP와 프록시 패턴■ 5. 내용 정리
    💡
    프록시 패턴(Proxy Pattern)은 "대리인"이라는 의미에서, 특정 객체에 접근하는 방식을 제어하기 위해 사용되는 디자인 패턴입니다. 주로 실제 객체의 기능을 추가하거나, 접근을 제어하는 목적으로 사용됩니다.
     

    ■ 1. 프록시 패턴

    • 포워드 프록시(Forward Proxy): 클라이언트가 프록시 서버를 통해 다른 서버에 요청을 보내도록 하는 프록시. 클라이언트의 IP 주소를 숨기고, 요청을 대리하는 역할을 합니다.
    • 리버스 프록시(Reverse Proxy): 서버 앞단에 위치하여 클라이언트의 요청을 받아 다른 서버에 전달합니다. 주로 로드 밸런싱, 보안 등의 목적으로 사용됩니다.
     
     

    ■ 2. 예제 코드

    package ex02; public class DoormanProxy { private Doorman doorman; // 기존 Doorman 클래스를 컴퍼지션으로 포함 public DoormanProxy(Doorman doorman) { this.doorman = doorman; } public void 쫓아내(Animal a) { System.out.println("안녕~~~"); // 새로운 기능 추가 doorman.쫒아내(a); // 기존 Doorman 클래스의 기능 호출 } }
    • 위 코드에서 DoormanProxy는 Doorman의 기능을 확장하면서도, 기존 코드에 직접적인 수정을 가하지 않았습니다. 이는 OCP(개방-폐쇄 원칙), 즉 "코드는 확장에는 열려 있고, 수정에는 닫혀 있어야 한다"는 객체 지향 설계 원칙을 잘 따르고 있습니다.
     
     
     

    ■ 3. 프록시 패턴을 사용하는 이유

    • 기존 코드 수정 최소화: 기존 클래스에 대한 변경 없이 기능을 추가하거나 접근을 제어할 수 있다
    • 확장성: 새로운 기능을 추가할 때, 기존 코드를 수정하지 않고 확장할 수 있습니다.
    • 캡슐화: 객체의 내부 구현을 감추고, 접근 제어를 가능하게 합니다.
     
     

    ■ 4. 스프링 AOP와 프록시 패턴

    💡
    스프링 프레임워크에서는 AOP(Aspect-Oriented Programming, 관점 지향 프로그래밍)를 통해, 핵심 로직 이외의 횡단 관심사(로깅, 보안, 트랜잭션 관리 등)를 프록시 패턴을 사용하여 구현합니다.
    • 프록시 객체 생성: 실제 객체를 프록시 객체로 감싸서, 실제 객체에 접근하기 전에 필요한 부가 기능(예: 로깅, 트랜잭션 관리)을 처리합니다.
    • 핵심 로직과 부가 기능의 분리: 개발자는 핵심 로직에만 집중할 수 있고, 부가적인 기능은 AOP 프레임워크가 자동으로 처리합니다.
    • 예시
      • 메서드 호출 전에 특정 조건을 체크합니다.
      • 메서드 호출 후 결과를 로깅하는 기능을 추가할 수 있습니다.
      • 이는 코드의 유지보수성을 높이고, 중복 코드를 줄여줍니다.
     
     

    ■ 5. 내용 정리

    • 프록시 패턴은 기존 코드를 변경하지 않고 기능을 확장할 수 있는 강력한 도구입니다.
    • 특히 스프링의 AOP(Aspect-Oriented Programming)에서 이 패턴을 활용하여,
    • 코드의 유지보수성을 높이고, 핵심 로직에 집중할 수 있는 환경을 제공합니다.
    • 프록시 패턴을 이해하고 활용하는 것은 객체 지향 설계 원칙을 따르는 코드 작성에 매우 유용합니다.
    • 만들어져 있는 프록시 패턴을 보면, 기존에 있는 클래스에 부가 기능이 추가될 수 있음을 쉽게 예측할 수 있습니다.
     
     
    💡
    정리 사이트 참고
    프록시 패턴
    프록시는 다른 객체에 대한 대체 또는 자리표시자를 제공할 수 있는 구조 디자인 패턴입니다. 프록시는 원래 객체에 대한 접근을 제어하므로, 당신의 요청이 원래 객체에 전달되기 전 또는 후에 무언가를 수행할 수 있도록 합니다.
    프록시 패턴
    https://refactoring.guru/ko/design-patterns/proxy
     
    Share article

    maestrojava

    RSS·Powered by Inblog