서버에서 살아남기

디자인 패턴 - 프록시 디자인 패턴 본문

python

디자인 패턴 - 프록시 디자인 패턴

개발롬 2023. 8. 9. 14:48

python에 초점을 맞춘 디자인 패턴에 대해서 정리하겠습니다. 해당 내용은 에 있는 내용을 정리한 내용입니다.

프록시 디자인 패턴

  • 프록시 디자인 패턴은 구조 디자인 패턴의 한 종류입니다.

프록시 디자인 패턴의 개요

  • 프록시 : 요청자와 공급자 사이의 중재자를 일컫음
  • 웹 관점에서는 프록시 서버가 프록시에 해당됩니다. 플라이언트가 특정 웹 사이트에 접속하면, 프록시 서버에 리소스를 요청하고 요청을 받아들인 프록시 서버는 서버에 요청을 보내고 결과를 받아 다시 클라이언트에게 보냅니다.
  • 디자인 패턴 관점에서의 Proxy 클래스는 객체의 언페이스 역할을 합니다. 여기서 객체는 네트워크 연결, 메모리, 혹은 파일에 저장된 객체 등을 의미합니다.

프록시 디자인 패턴의 역할

1) 복잡한 시스템을 간단하게 표현할 수 있습니다.
2) 클라이언트는 객체에 직접 접근할 수 없기 때문에 프록시는 객체를 보호하는 방패 역할을 합니다.
3) 메모리 사용량이 높은 객체를 다루는 가벼운 핸들러 역할을 합니다.

gpt 가 알려준 코드 예시

# 실제 서비스 클래스
class RealImage:
    def __init__(self, filename):
        self.filename = filename
        self.load_image_from_disk()

    def load_image_from_disk(self):
        print(f"Loading image from disk: {self.filename}")

    def display_image(self):
        print(f"Displaying image: {self.filename}")

# 프록시 클래스
class ProxyImage:
    def __init__(self, filename):
        self.filename = filename
        self.real_image = None

    def display_image(self):
        if self.real_image is None:
            self.real_image = RealImage(self.filename)
        self.real_image.display_image()

# 클라이언트 코드
image1 = ProxyImage("image1.jpg")  # 실제 이미지 객체는 생성되지 않음
image2 = ProxyImage("image2.jpg")  # 실제 이미지 객체는 생성되지 않음

image1.display_image()  # 이 시점에서 실제 이미지 객체 생성 및 이미지 로드
image2.display_image()  # 이미지 로드되었기 때문에 실제 이미지 객체 생성 없이 바로 이미지 표시

위의 예제에서 RealImage 클래스는 실제 이미지를 나타내는 클래스이고, ProxyImage 클래스는 실제 이미지를 생성하고 표시하는 프록시 역할을 하는 클래스입니다. 이렇게 프록시 패턴을 이용하면 이미지를 로드하는 시점을 늦춰 초기 로딩 시간을 줄이거나, 보안 등의 추가 기능을 제공할 수 있습니다.

프록시의 유형들

1) 가상 프록시

  • 인스턴스화하기에 무거운 객체의 경우 직접 생성하는 대신 대체 객체를 사용합니다. 예를 들어 큰 이미지를 불러와야하는 경우 플레이스 홀더를 이용하여 실제 이미지가 필요한 시점에서 이미지 객체를 로드합니다.

2) 원격 프록시

  • 원격 서버나 다른 주소 공간에 존재하는 객체에 대한 로컬 인스턴스를 구성합니다. 웹 서버, 데이터베이스 서버, 캐시 서버 등 여러 서버로 구성됐을 경우 각 서버의 실제 사용량 수치를 얻는 원격 명령을 수행할 수 있어야합니다.

3) 보호 프록시

  • 중요한 부분에 대한 접근을 제어합니다. 사용자의 인증과 허가를 담당하는 것과 같은 것이 있습니다.

4) 스마트 프록시

  • 사용자가 객체에 접근했을 때 추가적인 행동을 취합니다. 예를 들어 저장하는 기능이 있고, 이 기능을 여러 서비스에서 동시에 호출하면 리소스 공유에 문제가 생길 수 있으니 스마트 프록시가 객체의 잠금 상태를 확인하는 기능을 추가로 수행합니다.

'python' 카테고리의 다른 글

디자인 패턴 - 싱글톤 디자인 패턴  (0) 2023.08.01
이해가 안가서 정리하는 FastAPI 동작 원리  (0) 2023.07.24
Garbage Collection 이란?  (0) 2023.07.22
SQLAlchemy + alembic 마이그레이션  (0) 2023.07.22
python 파일  (2) 2023.03.11