대상 객체(Subject)에 접근하기 전 그 접근에 대한 흐름을 가로채 대상 객체 앞단의 인터페이스 역할을 하는 디자인 패턴이다.
이를 통해 객체의 속성, 변환 등을 보완하며 보안
, 데이터 검증
, 캐싱
, 로깅
에 주로 사용합니다. 대표적으로 프록시 서버가 있다.
프록시 서버
서버와 클라이언트 사이에서 클라이언트가 자신을 통해 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해주는 컴퓨터 시스템이나 응용 프로그램을 가리킨다.
전 세계적으로 분산된 서버가 있고 이를 통해 어떠한 시스템의 콘텐츠 전달을 빠르게 할 수 있는 CDN 서비스이다.
CDN : Contents delivery network
다음 그림 처럼 사용자, 크롤러, 공격자가 자신의 웹 사이트에 접속하게 되는 데, 이 때 CloudFlare를 통해 공격자로부터 보호할 수 있다.
CORS (Cross-Origin Resource Sharing)는 서버가 웹 브라우저에서 리소스를 로드할 때 다른 오리진을 통해 로드하지 못하게 하는 HTTP 헤더 기반 메커니즘이다.
프론트엔드 개발 시 프론트엔드 서버를 만들어서 백엔드 서버와 통신 시 주로 CORS 에러를 마주친다. 이를 해결하기 위해 프론트엔드에서 프록시 서버를 만들기도 한다.
프로토콜과 호스트 이름, 포트의 조합.예를 들어
https://qkrtkdwns3410.com:8080/test 라는 주소에서 오리진은
https://qkrtkdwns3410.com:8080 을 의미한다.
예를 들어
프론트엔드에서 127.0.0.1:3000 으로 테스팅
백엔드의 경우 127.0.0.1:8080 이라면 포트 번호가 다르기 때문에 CORS 에러가 나타난다.
이때 프록시 서버를 둠으로서 프론트 엔드 서버에서 요청되는 오리진을
127.0.0.1:8080 으로 바꾸는 것이다.
다음 그림에서 프론트엔드 서버 앞단에 프록시 서버를 놓아 /api 요청은 users API, /api2 요청은 users API2에 요청가능하다.
자연스럽게 CORS 에러 해결 + 다양한 API서버와 통신도 매끄럽게 가능해진다.