CS

프록시 패턴(Proxy Pattern) 이란?

cob 2023. 1. 20. 20:28

 

프록시 패턴



프록시 패턴(proxy patter)은 대상 객채에 접근하기 전 그 접근에 대한 흐름을 가로채 대상 객체 앞단의 터페이스 역할을 하는 디자인 패턴이다. 

 

프록시 객체란?
프록시 객체는 디자인 패턴 중 하나인 프록시 패턴이 녹아들어 있는 객체이다.

2023.01.09 - [JavaScript] - 프록시(Proxy) 객체 JavaScript에서 사용 방법(옵저버 패턴)

 

 

 

 


1. 프록시 패턴 구조

프록시 패턴

  • 프록시 패턴을 통해 객체의 속성, 변환 등을 보완하며 보안, 데이터 검증, 캐싱, 로깅에 사용한다.
  • 프록시 패턴은 프록시 객체로 쓰이기도 하지만 프록시 서버로도 활용된다.

 

 

 


2. 프록시 서버

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

 

 

 

2-1) 프록시 서버에서의 캐싱

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

 

 

 

2-2) 프록시 서버 nginx

nginx는 비동기 이벤트 기반의 구조와 다수의 연결을 효과적으로 처리 가능한 웹서버이며, 주로 Node.js 서버 앞단의 프록시 서버로 활용된다.
  • Node.js의 버퍼 오버플로우 취약점을 예방하기 위해서는 nginx를 프록시 서버로 앞단에 놓고 Node.js를 뒤쪽에 놓아야 한다.
버퍼 오버플로우이란?
버퍼는 데이터가 저장되는 메모리 공간으로, 메모리 공간을 벗어나는 경우를 말한다. 이때 사용되지 않아야 할 영역에 데이터가 덮어씌워져 주소, 값을 바꾸는 공격이 발생하기도 한다.

 

 

nginx를 이용한 프록시 서버

  • 익명의 사용자의 직접적인 서버로의 접근을 차단하고접적으로 한 단계를 더 거침으로써 보안성을 강화할 수 있다.
  • nginx를 프록시 서버로 둬서 실제 포트를 숨길 수 있고, 정적 자원을 gzip압축하거나, 메인 서버 압단에서 로깅을 할 수도 있다.
gzip 압축이란?
LZ77과 Huffman 코딩의 조합인 DEFLATE 알고리즘을 기반을 한 압축 기술이다. 데이터의 전송량을 줄일 수 있지만, 압축을 해제했을 때 서버에서의 CPU 오버헤드도 생각해서 gzip 압축 사용 유무를 결정해야 한다.

 

 

 

2-3) 프록시 서버로 쓰는 CloudFlare

CloudFlare는 전 세계적으로 분산된 서버가 있고 이를 통해 어떠한 시스템을 콘텐츠를 빠르게 전달할 수 있는 CDN 서비스이다.
  • CloudFlare의 이점은 DDOS 공격, 방어, HTTPS 구축이 있다. 이 모든 것은 웹 서버 앞단에 두어 ‘프록시 서버’로 쓰기 때문에 가능하다.
DDOS이란?
짧은 기간 동안 네트워크 많은 요청을 보내 네트워크를 마비시켜 웹 사이트의 가용성을 ㅂ방해하는 사이버 공격 유형이다. CloudFlare는 의심스러운 트래픽을 자동으로 차단해서 DDOS공격으로부터 보호합니다. 공격에 대한 방화벽 대시보드도 제공한다.
HTTPS이란?
서버에서 HTTPS를 구축할 때 인증서를 기반으로 구축할 수도 있다. 하지만, CloudFlare를 사용하면 별도의 인증서 설치 없이 좀 더 손쉽게 HTTPS를 구축할 수 있다.
CDN이란?
각 사용자가 인터넷에 접속하는 곳과 가까운 곳에서 콘텐츠를 캐싱 또는 배포하는 서버 네트워크를 말한다. 이를 통해 사용자가 웹 서버로부터 콘텐츠를 다운로드하는 시간을 줄여준다.

 

 

 

 


3. CORS와 프런트엔드 프록시 서버

프런트엔드 서버를 만들어서 백엔드 서버와 통신할 때 CORS에러를 마주치는데, 이를 해결하기 위해 프런트엔드에서 프록시 서버를 만들기도 한다.
CORS이란?
CORS(Cross-Origin Resource Sharing)는 서버가 웹 브라우저에서 리소스를 로드할 때 다른 오리진을 통해 로드하지 못하게 하는 HTTP 헤더 기반 메커니즘이다.

 

 

 

3-1) CORS 발생 원인

프런트엔드 127.0.0.1:3000으로 테스팅을 하는데 백엔드 서버는 127.0.0.1:1212이라면 포트 번호가 다르기 때문에 CORS에러가 나타난다. 이때 프록시 서버에서 요청되는 오리진을 127.0.0.1:1212으로 바꿔준다. 참고로 127.0.0.1이란 루프백 IP로, 본인 PC의 IP를 뜻한다. localhost나 127.0.0.1을 입력하면 DNS를 타지 않고 바로 본인 PC로 연결된다.
오리진이란?
프로토콜과 호스트 이름, 포트의 조합을 말한다.
ex) https://naver.com:1212/test에서 https://naver.com:1212을 뜻한다

프록시 서버 CORS

  • 프록시 서버를 놓아 /api 요청은 userAPI, /api2 요청은 user API2에 요청할 수 있다. 자연스레 CORS 에러 해결은 물론 다양한 API 서버와의 통신도 매끄럽게 할 수 있다.

 

 

반응형