프록시 패턴이란 ?
대상 객체에 접근하기 전 그 접근에 대한 흐름을 가로채 대상 객체 앞단의 인터페이스 역할을 하는 디자인 패턴입니다.
프록시 객체를 통해 활용하기도 하지만 프록시 서버로도 활용이 많이됩니다.
프록시 서버란 ?
프록시 서버는 클라이언트와 다른 서버 사이에서 중개자 역할을 하는 중간 서버입니다. 클라이언트가 리소스에 접근하기 위해 요청을 보내면, 요청은 먼저 프록시 서버로 전송되고, 프록시 서버는 클라이언트를 대신하여 적절한 서버로 요청을 전달합니다. 프록시 서버는 필요에 따라 요청과 응답을 수정, 필터링 또는 캐시할 수 있으며, 그 후에 클라이언트에게 다시 전송합니다.
그리고 현재 책에서 예시로 든 프록시 서버는 nginx가 있습니다.
nginx는 비동기 이벤트 기반의 구조와 다수의 연결을 효과적으로 처리 가능한 웹 서버이며, 주로 Node.js 서버 앞단에서 활용됩니다.
Node.js 창시자 분도 Node.js의 버퍼 오버플로우 취약점을 예방하기 위해서는 nginx를 앞단에 놓는 것을 장려했다고 합니다. 왜냐하면 여기서 프록시 서버의 장점이 나오게 됩니다.
프록시 서버 장점
- 익명성: 프록시 서버는 클라이언트의 IP 주소를 접근하는 서버로부터 숨겨 익명성을 제공할 수 있습니다. 이는 개인정보 보호나 특정 제한을 우회하는 데 유용합니다.
- 캐싱: 프록시 서버는 요청된 리소스의 사본을 로컬에 저장할 수 있습니다. 이후 동일한 리소스에 대한 요청이 발생하면, 프록시 서버는 원본 서버에서 가져오는 대신 캐시된 사본을 제공하여 성능을 향상시키고 대역폭 사용량을 줄일 수 있습니다.
- 필터링: 프록시 서버는 사전 정의된 규칙에 따라 요청과 응답을 필터링할 수 있습니다. 이를 통해 콘텐츠 필터링, 접근 제어 또는 악성 또는 원하지 않는 웹사이트 차단 등이 가능합니다.
- 로드 밸런싱: 프록시 서버는 클라이언트 요청을 여러 서버에 분산하여 리소스 사용을 최적화하고 더 나은 성능과 확장성을 보장할 수 있습니다.
- 보안: 프록시 서버는 클라이언트와 서버 사이에서 보안 장벽 역할을 할 수 있습니다. 방화벽 보호, SSL/TLS 암호화 또는 침입 탐지와 같은 작업을 수행하여 보안을 강화할 수 있습니다.
위 처럼 nginx를 프록시 서버로 두면 실제 포트를 숨길 수 도 있고 정적 자원을 gzip 압축 혹은 로깅도 가능하다고 합니다.
CORS와 프론트엔드의 프록시 서버
CORS(Cross-Origin Resource Sharing)는 서버가 웹 브라우저에서 리소스를 로드할때 다른 오리진을 통해 로드하지 못하게 하는 HTTP 헤더 기반 메커니즘입니다.
프론트엔드 개발 시 프론트엔드 서버를 만들어서 백엔드와 통신할때 CORS를 마주치기 나름인데, 이때 프록시 서버를 통해서 우회하기도 합니다. 만약 로컬에서 포트번호가 다르다면 프록시 서버에서 포트번호를 바꿔주는 방식인거죠
'CS' 카테고리의 다른 글
MVC, MVP, MVVM 패턴 (0) | 2023.07.05 |
---|---|
이터레이터 패턴 ( Iterator Pattern ) (0) | 2023.06.29 |
옵저버 패턴 ( Observer Pattern ) (0) | 2023.06.24 |
전략 패턴 ( Strategy pattern ) (0) | 2023.06.24 |
팩토리 패턴 ( Factory Pattern ) (0) | 2023.06.24 |