디자인패턴(5) - 프록시패턴

BBB·2023년 9월 1일
0

디자인패턴

목록 보기
5/5

https://thebook.io/080326/0027/ | 전체 참고

1. 프록시 서버
2. 프록시패턴의 정의
3. 프록시패턴의 특징
4. 프록시패턴의 장점
5. 프록시패턴의 사용
6. 프록시패턴의 단점
+) 스프링 AOP - Dynamic Proxy

1. 프록시 서버

서버와 클라이언트 사이에서 클라이언트가 자신을 통해 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해주는 컴퓨터 시스템 및 응용 프로그램을 말한다

  • 프록시 서버로 쓰는 CloudFlare
    : CDN 서비스로, 전세계적으로 분산된 서버가 있고, 이를 통해 시스템의 콘텐츠 전달을 빠르게 할 수 있다.
    :웹 서버 앞단에 두어서, DDOS 공격 방어, HTTPS 구축 등이 가능하다.

  • CORS와 프론트엔드의 프록시서버
    : CORS(cross-origin resource sharing)는 서버가 웹 브라우저에서 리소스를 로드할 때 다른 오리진을 통해 로드하지 못하게 하는 HTTP 헤더 기반 메커니즘
    : 프론트엔드 개발할 때, 프론트와 백엔드 서버끼리 통신할 때, 주로 CORS에러를 마주치는데, 이를 해결하기 위해 프론트엔드에서 프록시 서버를 만든다

CORS 해결방법 | CORS 에러에는 다양한 해결 방법이 있다. 그중 내가 참고한 해결방법 링크

2. 프록시패턴의 정의

그전에 프록시(Proxy)란? 대리자, 대변인의 의미 -> 프록시에게 어떤일을 대신 시키는 것!

즉, 어떤 객체를 사용하고자 할 때, 직접적으로 참조하는 대신, 해당 객체를 대항하는 객체를 통해 대상 객체에 접근하는 패턴

프록시패턴

3. 프록시패턴의 특징

저렇게 접근하는 게 어떤 이점이 있어서 하는걸까?
접근 객체에 민감한 정보가 있거나, 인스터스화하기에 무겁거나, 추가 기능을 더하고 싶은데 원본을 수정할 수 없을 때의 상황에서 좋다

  1. 보안 : 클라이언트가 작업을 수행할 권한이 있는지 확인 후, 요청을 대상으로 전달
  2. 캐싱 : 프록시가 내부 캐시를 유지하여, 데이터가 캐시에 아직 존재하는 경우에만 대상에서 작업이 실행되도록 한다
  3. 데이터 유효성 검사 : 프록시가 입력을 대상으로 전달하기 전 유효성 검사를 한다
  4. 로깅 : 프록시는 메소드 호출과 상대 매개 변수를 인터셉트하고 이를 기록
  5. 원격 객체 : 프록시는 원격 위치에 있는 객체를 가져와 로컬처럼 보이게 할 수 있다

4. 프록시패턴의 장점

  • OCP 개방 폐쇄 원칙 : 기존 대상 객체의 코드를 변경하지 않아도, 프록시를 통해 구현할 수 있다
  • 부가적 기능 : 원래의 기능에 부가적인 작업(로깅, 인증, 통신 등)을 수행하는데 유용 >> 그래서 SRP 단일 책임 원칙 준수할 수 있다 (왜냐면 대상 객체는 원래 기능에만 집중하고, 부가적 기능은 프록시 객체에 맡기기 때문에, 다중 책임을 회피할 수 있다)

5. 프록시패턴의 사용

  • 접근 제어나 기능 추가를 하고 싶지만, 기존 특정 객체를 수정하지 못할 때
  • 기존 객체 동작에 수정 없이 기능을 더하고 싶을 때

6. 프록시패턴의 단점

  • 복잡한 코드 : 만약 동일 기능의 코드를 여러 클래스에 더하고 싶다면, 각각의 클래스에 해당하는 프록시 클래스를 만들어 적용해야함 -> 코드량 증가 및 중복 발생(자바에서는 리플렉션에서 제공하는 동적 프록시 기법을 이용해 해결이 가능하다고 함)
  • 프록시 클래스 자체에 들어가는 자원이 많아지면, 응답 지연이 될 수 있다
profile
꾸준히 성장하기

0개의 댓글