ComputerScience/디자인 패턴

프록시 패턴과 프록시 서버

dev_swan 2023. 11. 10.

✏️ 프록시 패턴과 프록시 서버

프록시 패턴(Proxy Pattern)은 대상 객체에 접근하기 전 그 접근에 대한 흐름을 가로채 대상 객체 앞단의 인터페이스 역할을 하는 디자인 패턴입니다. 이를 통해 객체의 속성, 변환 등을 보완하며 보안, 데이터 검증, 캐싱, 로깅에 사용합니다. 이는 프록시 객체로 쓰이기도 하지만 프록시 서버로도 활용됩니다.

 

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

프록시 서버 - https://yunyoung1819.tistory.com/9

 

🌐 프록시 서버로 쓰는 Nginx

nginx는 비동기 이벤트 기반의 구조와 다수의 연결을 효과적으로 처리 가능한 웹 서버이며, 주로 Node.js 서버 앞단의 프록시 서버로 활용됩니다. 아래 그림처럼 nginx를 프록시 서버로 두고 실제 서버의 포트를 숨길 수 있고 Node.js의 버퍼 오버플로우 취약점을 예방하고, 정적 자원을 gzip 압축하거나, 메인 서버 앞단에서의 로깅을 할 수도 있습니다.

nginx 프록시 서버 - https://velog.io/@jeff0720

더보기

💡 버퍼 오버플로우

버퍼는 보통 데이터가 저장되는 메모리 공간으로, 메모리 공간을 벗어나는 경우를 말한다. 이때 사용되지 않아야 할 영역에 데이터가 덮어씌워져 주소, 값을 바꾸는 공격이 발생하기도 합니다.


🌐 프록시 서버로 쓰는 CloudFlare

CloudFlare는 웹 성능 최적화, 보안, 콘텐츠 전송 네트워크(CDN) 등을 제공하는 클라우드 기반의 플랫폼입니다. 전 세계적으로 분산된 서버 네트워크를 통해 사용자에게 빠른 속도와 안전성을 제공합니다.

더보기

💡 콘텐츠 전송 네트워크 (CDN)

CDN은 웹 콘텐츠의 전송 속도와 안정성을 향상시키기 위한 기술입니다. CDN은 여러 대의 서버를 전 세계 다양한 위치에 분산하여 콘텐츠를 캐시 하여 저장하고, 사용자가 해당 콘텐츠에 접근할 때 원격 서버까지 접속하지 않고, 가까운 위치의 CDN 서버에서 콘텐츠를 로딩할 수 있습니다.

cloudflare 프록시 서버 - cloudflare

위의 그림처럼 사용자, 크롤러, 공격자가 웹 사이트에 접속하게 될 때, CloudFlare를 통해 공격자로부터 보호할 수 있습니다.

 

DDOS 공격 완화

DDOS는 짧은 기간 동안 네트워크에 많은 요청을 보내 네트워크를 마비시켜 웹 사이트의 가용성을 방해하는 사이버 공격 유형입니다.

 

CloudFlare는 의심스러운 트래픽, 특히 사용자가 접속하는 것이 아닌 시스템을 통해 오는 트래픽을 자동으로 차단해서 DDOS 공격으로부터 보호합니다. CloudFlare의 거대한 네트워크 용량과 캐싱 전략으로 소규모 DDOS 공격은 쉽게 방어할 수 있으며 이러한 공격에 대한 방화벽 대시보드도 제공됩니다.

 

HTTPS 구축

서버에서 HTTPS를 구축할 때 인증서를 기반으로 구축할 수도 있습니다. 하지만 CloudFlare를 사용하면 별도의 인증서 설치 없이 좀 더 손쉽게 HTTPS를 구축할 수 있습니다.


🌐 CORS와 프론트엔드의 프록시 서버

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

더보기

💡 오리진 (Origin)

프로토콜과 호스트 이름, 포트의 조합을 의미합니다. 예를 들어 https://asher.com:8000/api라는 주소에서 오리진은 https://asher.com:8000를 뜻합니다.

cors - 면접을 위한 cs 전공지식 노트

예를 들어 프론트엔드에서는 127.0.0.1:3000으로 테스트를 하는데 백엔드 서버는 127.0.0.1:8000이라면 포트 번호가 다르기 때문에 CORS 에러가 발생합니다. 이때 프록시서버를 둬서 프론트엔드 서버에서 요청되는 오리진을 127.0.0.1:8000으로 바꿔서 요청을 보내 CORS 에러를 해결할 수 있습니다.

cors 프록시 서버 - 면접을 위한 cs 전공지식 노트

위의 그림처럼 프론트엔드 서버 앞에 프록시 서버를 놓아 /api 요청은 users API, /api2 요청은 users API2에 요청을 보낼 수 있습니다. 자연스레 CORS 에러 해결하고 다양한 API 서버와의 통신도 매끄럽게 할 수 있습니다.

'ComputerScience > 디자인 패턴' 카테고리의 다른 글

노출모듈 패턴  (0) 2023.11.13
이터레이터 패턴  (1) 2023.11.13
옵저버 패턴  (0) 2023.11.10
전략 패턴  (0) 2023.11.10
팩토리 패턴  (0) 2023.11.10

댓글