프록시 서버는 서버와 클라이언트 사이에서 클라이언트가 자신을 통해 다른 네트웍 서비스에 간접적으로 접속할 수 있게 해주는 컴퓨터 시스템이나 응용프로그램을 가리킨다.
nginx는 비동기 이벤트 기반의 구조와 다수의 연결을 효과적으로 처리 가능한 웹 서버이며, 주로 Node.js 서버 앞단의 프록시 서버로 활용된다.
Node.js 서버를 구축할 때 앞단에 nignx를 두어 이를 통해 익명 사용자의 직접적인 서버로의 접근을 차단하고 간접적으로 한 단계를 더 거침으로 보안성을 더욱 강화할 수 있다.
버퍼 오버플로우
버퍼는 보통 데이터가 저장되는 메모리 공간으로, 메모리 공간을 벗어나는 경우를 의미함. 이때 사용되지 않아야할 영역에 데이터가 덮어씌어져 주소, 값을 바꾸는 공격이 발생하기도 함
gzip 압축
LZ77과 Huffman 코딩의 조합인 DEFLATE 알고리즘을 기반으로 한 압축 기술.
gizp압축을 하면 데이터 전송량을 줄일 수 있지만, 압축을 해제했을때 서버에서의 CPU 오버헤드도 생각해서 gzip 압축 사용 유무를 결정해야함
CloudFlare는 전 세계적으로 분산된 서버가 있고 이를 통해 어떠한 시스템의 콘텐츠 전달을 빠르게 할 수 있는 CDN 서비스이다.
CDN 말고도 CloudFlare를 통해 누릴 수 있는 이점은 많다. 대표적으로 DDOS 공격 방어. HTTPS 구축이 있다. 이 모든 것은 웹 서버 앞단에 두어 프록시 서버로 쓰기 때문에 가능한 것이다.
DDOS는 짧은 기간 동안 네트웍에 많은 요청을 보내 네트웍을 마비시켜 웹 사이트의 가용성을 방해하는 사이버 공격 유형이다. CloudFlare는 의심스러운 트래픽, 특히 사용자가 접속하는 것이 아닌 시스템을 통해 오는 트래픽을 자동으로 차단해서 DDOS공격으로부터 보호한다.
CloudFlare의 거대한 네트웍 용량과 캐싱 전략으로 소규모 DDOS 공격은 쉽게 막아낼 수 있으며 이러한 공격에 대한 방화벽 대시보드도 제공한다.
서버에서 HTTPS를 구축할 때 인증서를 기반으로 구축할 수도 있다.
하지만 CloudFlare를 사용하면 별도의 인증서 설치 없이 좀 더 손쉽게 HTTPS를 구축할 수도 있다.
CDN(Content Delivery Network)
각 사용자가 인터넷에 접속하는 곳과 가까운 곳에서 콘텐츠를 캐싱 또는 배포하는 서버 네트웍을 말한다. 이를 통해 사용자가 웹 서버로부터 콘텐츠를 다운로드하는 시간을 줄일 수 있다.
CORS(Cross-Origin Resource Sharing)는 서버가 웹 브라우저에서 리소스를 로드할 때 다른 오리진을 통해 로드하지 못하는 하는 HTTP 헤더 기반 메커니즘이다.
프론트엔드 개발 시 프론트엔드 서버를 만들어서 백엔드와 통신할 때 주로 CORS에러를 마주치는데 이를 해결하기 위해 프론트엔드에서 프록시 서버를 만들기도 한다.
Origin
프로토콜과 호스트 이름, 포트의 조합을 말한다.
예를 들어 https://blake.com:12010/test라는 주소에서 오리진은 https://blake.com:12010을 뜻한다.
예를 들어 프론트엔드에서는 127.0.0.1:3000으로 테스팅을 하는데 백엔드 서버는 127.0.0.1:12010이라면 포트 번호가 다르기 때문에 CORS 에러가 나타난다.이때 프록시 서버를 둬서 프론테엔드 서버에서 요청되는 오리진을 127.0.0.1:12010으로 바꿔 해결할 수 있다.
127.0.0.1은 루프백 IP로 본인 PC의 IP를 의미하는데, localhostsk 127.0.0.1을 입력하면 DNS를 타지 않고 바로 본인 PC로 연결된다.
참고 : 면접을 위한 CS 전공지식 노트