---
description: 1.1.5 프록시 패턴과 프록시 서버
---

# 1.1.5 Proxty Pattern & Proxy Server

프록시 패턴(Proxy Pattern)은 다른 객체로의 접근을 제어하기 위해 대리인을 제공하는 구조적인 디자인 패턴입니다. 이는 실제 객체에 대한 접근을 제어하고, 필요에 따라 접근을 제한하거나 추가 기능을 제공하는 역할을 합니다.



**프록시 패턴의 특징**

1. **대리 객체 제공**: 프록시 객체는 실제 객체에 대한 대리인 역할을 하여 접근을 제어합니다.
2. **추가 기능 제공**: 프록시는 접근 제어 외에도 캐싱, 로깅, 권한 검사 등의 추가 기능을 제공할 수 있습니다.
3. **유연성 향상**: 실제 객체의 인터페이스를 변경하지 않고도 기능을 확장하거나 수정할 수 있습니다.



**프록시 패턴 구현 예제 (Java)**

다음은 Java에서 프록시 패턴을 구현한 예제입니다:

```java
// 실제 객체 인터페이스
interface RealSubject {
    void request();
}

// 실제 객체 구현 클래스
class RealSubjectImpl implements RealSubject {
    @Override
    public void request() {
        System.out.println("RealSubject: Handling request.");
    }
}

// 프록시 클래스
class Proxy implements RealSubject {
    private RealSubject realSubject;

    @Override
    public void request() {
        if (realSubject == null) {
            realSubject = new RealSubjectImpl();
        }
        System.out.println("Proxy: Logging request.");
        realSubject.request();
    }
}

// 클라이언트 클래스
public class ProxyPatternDemo {
    public static void main(String[] args) {
        RealSubject proxy = new Proxy();
        proxy.request();
    }
}
```

위 예제에서는 `RealSubject` 인터페이스를 구현한 `RealSubjectImpl` 클래스와 이를 대리하는 `Proxy` 클래스를 정의합니다. `Proxy` 클래스는 `RealSubject` 객체에 대한 접근을 제어하며, 요청을 처리하기 전에 로깅 기능을 추가로 수행합니다.



**프록시 서버**

프록시 서버(Proxy Server)는 네트워크와 인터넷 보안에서 클라이언트와 서버 사이에 중개 역할을 하는 서버입니다. 클라이언트가 프록시 서버를 통해 다른 서버에 간접적으로 접근할 수 있도록 합니다.



**프록시 서버의 특징**

1. **보안 강화**: 프록시 서버는 클라이언트와 서버 간의 직접적인 연결을 차단하여 보안을 강화할 수 있습니다.
2. **캐싱 기능**: 프록시 서버는 자주 요청되는 데이터를 캐싱하여 성능을 향상시킬 수 있습니다.
3. **IP 주소 숨김**: 프록시 서버를 통해 접근하면 클라이언트의 IP 주소를 숨길 수 있어 프라이버시를 보호할 수 있습니다.



**프록시 서버의 활용 예제**

1. **nginx**

nginx는 이벤트 기반의 고성능 HTTP 및 리버스 프록시 서버입니다. 주로 웹 서버 앞단에 위치하여 로드 밸런싱, 캐싱, 보안 강화 등의 기능을 제공합니다.

```plaintext
사용자 --> [nginx 프록시 서버] --> [실제 웹 서버]
```

2. **Cloudflare**

Cloudflare는 전 세계적으로 분산된 CDN(콘텐츠 전송 네트워크) 및 보안 서비스를 제공하는 프록시 서버입니다. 이를 통해 웹사이트의 성능을 최적화하고 DDoS 공격 등을 방어할 수 있습니다.

```plaintext
사용자 --> [Cloudflare] --> [웹 서버]
```



**프록시 패턴의 장점과 단점**

**장점:**

* **보안 강화**: 실제 객체에 대한 접근을 제어하여 보안을 강화할 수 있습니다.
* **성능 향상**: 캐싱을 통해 성능을 향상시킬 수 있습니다.
* **유연성 제공**: 추가 기능을 손쉽게 확장할 수 있습니다.

**단점:**

* **복잡성 증가**: 프록시 객체를 추가로 구현해야 하므로 코드의 복잡성이 증가할 수 있습니다.
* **성능 저하**: 추가적인 계층이 생기므로 성능 저하가 발생할 수 있습니다.



프록시 패턴은 실제 객체에 대한 접근을 제어하고, 보안, 캐싱, 로깅 등의 추가 기능을 제공하는 데 유용한 디자인 패턴입니다. 프록시 서버는 네트워크 보안과 성능 최적화에 중요한 역할을 하며, 다양한 상황에서 활용될 수 있습니다.
