프록시 패턴
프록시 패턴(proxy patter)은 대상 객채에 접근하기 전 그 접근에 대한 흐름을 가로채 대상 객체 앞단의 인터페이스 역할을 하는 디자인 패턴이다.
프록시 객체란?
프록시 객체는 디자인 패턴 중 하나인 프록시 패턴이 녹아들어 있는 객체이다.
2023.01.09 - [JavaScript] - 프록시(Proxy) 객체 JavaScript에서 사용 방법(옵저버 패턴)
1. 프록시 패턴 구조
- 프록시 패턴을 통해 객체의 속성, 변환 등을 보완하며 보안, 데이터 검증, 캐싱, 로깅에 사용한다.
- 프록시 패턴은 프록시 객체로 쓰이기도 하지만 프록시 서버로도 활용된다.
2. 프록시 서버
프록시 서버는 서버와 클라이언트 사이에서 클라이언트 자신을 통해 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해주는 컴퓨터 시스템이나 응용 프로그램을 가리킨다.
2-1) 프록시 서버에서의 캐싱
프록시 서버는 서버와 클라이언트 사이에서 클라이언트 자신을 통해 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해주는 컴퓨터 시스템이나 응용 프로그램을 가리킨다.
2-2) 프록시 서버 nginx
nginx는 비동기 이벤트 기반의 구조와 다수의 연결을 효과적으로 처리 가능한 웹서버이며, 주로 Node.js 서버 앞단의 프록시 서버로 활용된다.
- Node.js의 버퍼 오버플로우 취약점을 예방하기 위해서는 nginx를 프록시 서버로 앞단에 놓고 Node.js를 뒤쪽에 놓아야 한다.
버퍼 오버플로우이란?
버퍼는 데이터가 저장되는 메모리 공간으로, 메모리 공간을 벗어나는 경우를 말한다. 이때 사용되지 않아야 할 영역에 데이터가 덮어씌워져 주소, 값을 바꾸는 공격이 발생하기도 한다.
- 익명의 사용자의 직접적인 서버로의 접근을 차단하고 간접적으로 한 단계를 더 거침으로써 보안성을 강화할 수 있다.
- 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을 뜻한다
- 프록시 서버를 놓아 /api 요청은 userAPI, /api2 요청은 user API2에 요청할 수 있다. 자연스레 CORS 에러 해결은 물론 다양한 API 서버와의 통신도 매끄럽게 할 수 있다.
반응형
'CS' 카테고리의 다른 글
MVP 패턴(Model, View, Presenter)이란? (0) | 2023.01.26 |
---|---|
MVC 패턴(Model, View, Controller)이란? (0) | 2023.01.23 |
프로세스 메모리(스택, 힙, 데이터 영역, 코드 영역) 구조 개념 및 특징 (0) | 2023.01.13 |
옵저버(Observer ) 패턴 개념 및 구현 방법(Java, JavaScript) (0) | 2023.01.10 |
알고리즘 BigO(시간 복잡도, 공간 복잡도) 개념 및 예제 (0) | 2023.01.05 |