프록시 패턴(Proxy Pattern)은 소프트웨어 디자인 패턴 중 하나로, 다른 객체에 대한 대리자나 대변자 역할을 하는 객체를 제공하여 그 객체의 기능을 제어하거나 보호하는 패턴입니다. 프록시는 클라이언트와 실제 서브젝트(대상) 사이에서 중재자 역할을 하며, 클라이언트가 실제 서브젝트에 직접 접근하지 않고 프록시를 통해 간접적으로 접근하게 됩니다.
프록시패턴과 프록시서버
프록시패턴(proxy pattern)
대상 객체(subject)에 접근하기 전 그 접근에 대한 흐름을 가로채 대상 객체 앞단의 인터페이스 역할을 하는 디자인 패턴
- 객체의 속성, 변환 등을 보완하며 보안, 데이터 검증, 캐싱, 로깅에 사용
- 직접 실행 메서드를 호출하는 것을 피하면서 흐름제어를 취함
- realSubject : 원래 수행해야 할 작업의 클래스 (proxy)가 대표하는 실제 객체
- Proxy : realsubject가 수행할 메소드를 대신 수행
프록시서버
프록시서버는 서버와 클라이언트 사이에서 클라이언트가 자신을 통해 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해주는 컴퓨터 시스템이나 응용 프로그램을 가리킨다.
ex) NGINX : node.js서버를 운영할 때 버퍼오버플로우 취약점을 예방하기 위해서는 nginx를 프록시 서버로 앞단에 놓고 node.js를 뒤쪽에 놓는 것이 좋다. 익명의 사용자가 직접적으로 서버에 접근하는 것을 차단하고, 간접적으로 한 단계를 더 거치게 만들어서 보안을 강화.
Q. node.js의 버퍼오버플로우 취약점이란?
버퍼 오버플로우(Buffer Overflow)는 프로그래밍에서 발생하는 보안 취약점 중 하나로, 메모리 버퍼의 경계를 넘어서 데이터를 쓰는 작업을 의미합니다. 이로 인해 메모리 영역을 침범하거나 다른 변수, 데이터, 코드 등을 덮어쓰거나 손상시킬 수 있는 상황이 발생합니다.
프록시 패턴의 장단점
프록시패턴 장점
- 사이즈가 큰 객체가 로딩되기 전에도 프록시를 통해 참조를 할 수 있다.
- 실제 객체의 public, protected 메소드를 숨기고 인터페이스를 통해 노출시킬 수 있다.
- 로컬에 있지 않고 떨어져있는 객체를 사용할 수 있다.
- 원래 객체에 접근에 대해 사전처리를 할 수 있다.
프록시패턴 단점
- 객체를 생성할 때 한 단계를 거치게 되므로, 빈번한 객체 생성이 필요한 경우 성능이 저하될 수 있다.
- 프록시 내부에서 객체 생성을 위해 스레드가 생성, 동기화가 구현되어야 하는 경우 성능이 저하될 수 있다.
- 로직이 난해해져 가독성이 떨어질 수 있다.
추천글
'필수 개발지식 > 디자인패턴' 카테고리의 다른 글
[디자인패턴] 개발자 취업준비생이라면 꼭 알아야할 디자인패턴 (0) | 2023.08.06 |
---|---|
[Design Pattern] 전략 패턴 (Strategy) (1) | 2023.05.23 |
[Design Pattern] 메멘토 패턴 (Memento) (0) | 2023.05.15 |
[Design Pattern] 퍼사드 패턴 (Facade) (0) | 2023.05.12 |
[Design Pattern] 빌더패턴 (Builder) (0) | 2023.05.10 |