Bin's Blog

오늘의 CS(디자인 패턴 - 프록시 서버) 본문

CS

오늘의 CS(디자인 패턴 - 프록시 서버)

hotIce 2023. 5. 8. 11:46
728x90

1. 프록시 서버란? 

  • 프록시 서버는 중간자와 같은 역할을 하는 서버이다. 사용자의 컴퓨터와 원격 서버(웹 사이트 등) 사이에 위치하며, 사용자의 요청을 대신 처리해주는 역할을 한다.
  • 장점
    • 보안 강화: 프록시 서버를 통해 사용자의 실제 IP 주소를 숨기고, 원격 서버에 대한 접근을 제어할 수 있다. 이를 통해 사용자의 개인 정보 보호하고 인터넷 사용을 안전하게 할 수 있다.
    • 캐싱 : 프록시 서버는 웹 페이지나 파일과 같은 인터넷 자원을 저장해두고(캐싱), 동일한 요청이 들어올 경우 저장된 자원을 제공함으로써 속도를 빠르게 한다.
    • 네트워크 효율성 향상: 여러 사용자가 동일한 인터넷 자원을 접근할 때, 프록시 서버가 한 번만 원격 서버에 요청하여 자원을 가져온 후 여러 사용자에게 공유할 수있다. 이를 통해 네트워크 트래픽을 줄이고 효율성을 높일 수 있다. 
      • 네트워크 트래픽: 인터넷이나 컴퓨터의 네트워크에서 데이터가 전송되는 양과 속도를 의미한다. 트래픽이 증가하면 속도 저하(웹 페이지 로딩 시간 길어짐), 서버 과부하, 네트워크 지연, 대역폭 소모(많이 소모 되면 속도가 느려지거나 접속 원할하지 않음), 비용 증가(기업이나 서비스 제공자의 경우 서버 유지 및 확장에 드는 비용이 증가)   
    • 로깅: 프로그램이 실행되는 동안 일어나는 이벤트를 기록하는 과정을 의미한다. 주요 목적은 프로그램의 작동 상태를 모니터링하고 문제가 발생했을 때 그 원인을 파악하는데 도움을 준다. 
  • nginx
    • 비동기 이벤트 기반의 구조와 다수의 연결을 효과적으로 처리 가능한 웹 서버, 주로 Node.js 서버 앞단의 프록시 서버로 활용
    • Node.js의 버퍼 플로우 취약점을 예방하기 위한 목적
    • 프록시 서버로 둬서 실제 포트를 숨길 수 있고 정적 자원을 gzip 압축하거나, 메인 서버 앞단에서의 로깅을 할 수도 있다. 
  • CloudFlare
    • 전 세계적으로 분산된 서버가 존재 어떠한 시스템의 콘텐츠 전달을 빠르게 할 수 있는 CDN 서비스
    • CloudFlare은 웹 서버 앞단에 프록시 서버로 두어 DDOS 공격 방어나 HTTPS 구축에 쓰인다. 
    • 서비스를 배포한 이후에 의심스러운 트래픽이 많이 발생하면 이 때문에 많은 클라우드 서비스 비용이 발생할 수 있다. 이때 CloudFlare가 의심스러운 트래픽인지를 먼저 판단해 CAPTCHA 등을 기반으로 이를 일정부분 막아주는 역할도 수행
  • 프론트엔드 개발 시 프론트엔드 서버를 만들어서 백엔드 서버와 통신할 때 주로 CORS 에러를 마주친다, 이를 해결하기 위해 프론트엔드에서 프록시 서버를 만든다. 
    • 프론트엔드에서 127.0.0.1:3000으로 테스팅을 하는데 백엔드 서버는 127.0.0.1:12010이라면 포트 번호가 다르기 때문에 CORS 에러가 나타난다. 이때 프록시 서버를 둬서 프론트엔드 서버에서 요청되는 오리진을 127.0.0.1:12010으로 바꾸는 것이다. 
    • 이렇게 하면 CORS 에러 해결은 물론이고 다양한 API 서버와의 통신도 매끄럽게 할 수 있다.
    • CORS는 뒤에서 살펴보겠다.

 

2. 용어 정리

 

* 버퍼 플로우: 버퍼는 보통 데이터가 저장되는 메모리 공간, 메모리 공간을 벗어나는 경우, 이때 사용되지 않아야 할 영역에 데이터가 덮어씌워져 주소 값을 바꾸는 공격이 발생

 

* CAPTCHA: 이미지 혹은 오디오를 주고 정답을 맞추게 함으로써 사람과 컴퓨터를 판별해 주는 기능. 

 

* DDOS: 짧은 기간 동안 네트워크에 많은 요청을 보내 네트워크를 마비시켜 웹 사이트의 가용성(시스템이 정상적으로 사용 가능한 정도)을 방해한다.

 

*HTTPS 구축: CloudFllare을 사용하면 웹사이트에 SSL/TLS 인증서를 직접 설치하지 않아도 된다. Universal SSL기능 덕분이다. 별도의 인증서 설치 없이 알아서 CloudFlare가 인증서를 자동으로 생성하고 관리하며, 웹사이트 관리자는 별도의 SSL 인증서를 구입하거나 설치하고, 인증서가 만료되는 것을 걱정할 필요가 없다. 따라서 좀 더 쉽게 HTTPS를 구축할 수 있다. 

 

* SSL/TLS: SSL(Secure Socketes Layer)과 TLS(Transport Layer Security)는 인터넷 상에서 데이터를 안전하게 전송하기 위해 사용되는 암호화 프로토콜이다. 이들은 클라이언트와 서버 간에 안전한 연결을 제공하며, 데이터 변조, 도청, 및 메시지 위조 같은 보안 위협으로 부터 보호한다. TLS는 SSL의 후속 버전으로, 더 강력한 보안 기능을 제공한다. 이들은 웹사이트가 HTTP 대신 HTTPS를 사용하도록 만들며, 이는 브라우저 주소에 자물쇠 아이콘 표시되는 것으로 확인할 수 있는데 이 아이콘은 안전하게 보호되고 있다는 신뢰감을 줍니다. 

 

*CDN: Content Delivery Network의 약자인데, 우리가 웹사이트를 방문하려고 하면 우리 컴퓨터는 웹사이트의 서버에 연결을 요청. 서버가 우리와 거리가 멀리 떨어져 있으면? 웹사이트를 불러오는데 시간이 걸리고, 로딩 속도를 느리게 만든다. CDN은 전 세계 여러 곳에 데이터를 복사해 놓는 방식으로 동작한다. 우리가 웹사이트 방문시 원본 서버가 아닌 우리에게 가장 가까운 곳에 있는 서버에서 웹사이트에 데이터를 불러오게 된다. 웹사이트를 불러오는 데 걸리는 시간이 훨씬 짧아지고, 웹사이트 로딩 속도가 빨라진다. 본사가 아니고 지사같은 개념이라고 생각하면 된다. 

 

 

728x90