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

2025. 9. 16. 01:50·Computer Science/Design Pattern

대상 객체에 접근하기 전 그 접근에 대한 흐름을 가로채 해당 접근을 필터링하거나 수정하는 등의 역할을 하는 계층이 있는 디자인 패턴입니다.

객체의 속성, 변환 등을 보안하며 보안, 데이터 검증, 캐싱, 로깅에 사용합니다. 이는 앞서 설명한 프록시 객체로 쓰이기도 하지만 프록시 서버로도 활용됩니다.

 

용어설명 :

  • 프록시 서버에서의 캐싱: 
    • 캐시 안에 정보를 담아두고, 캐시 안에 있는 정보를 요구하는 요청에 대해 다시 멀리 있는 원격 서버에 요청하지 않고 캐시 안에 있는 데이터를 활용하는 것을 말합니다.
    • 사용자가 자주 요청하는 데이터를 프록시 서버가 미리 복사해서 보관(캐싱)해둡니다. 덕분에 진짜 서버까지 가지 않고도 프록시 서버가 바로 데이터를 전달해 줄 수 있어 속도가 매우 빨라집니다.
    • 불필요하게 외부와 연결하지 않기 때문에 트래픽을 줄일 수 있습니다.

📞 프록시 서버

프록시 서버는 '대리인' 또는 '경비원'이라고 생각하면 쉽습니다. 사용자가 인터넷 서비스에 직접 접속하는 게 아니라, 서버와 클라이언트 사이에서 클라이언트가 자신을 통해 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해주는 컴퓨터 시스템이나 응용 프로그램을 가리킵니다.

 

1. 프록시 서버로 쓰는 nginx

  • ngix는 비동기 이벤트 기반의 구조와 다수의 연결을 효과적으로 처리 가능한 웹 서버이며, 주로 Node.js 서버 앞단의 프록시 서버로 활용됩니다. 여기서 비동기 이벤트 기반 구조란 유능한 웨이터 한 명이 여러 테이블을 돌아다니며 주문만 빠르게 받고, 음식이 준비되었다는 알림이 울리면 그때 가서 서빙하는 것과 같습니다. 기다리는 시간 없이 계속 일하기 때문에 혼자서도 많은 일을 처리할 수 있습니다.
  • 익명 사용자가 직접적으로 서버에 접근하는 것을 차단합니다.
  • 간접적으로 한 단계를 더 거치게 만들어서 보안을 강화할 수 있습니다.
  • 실제 포트를 숨길 수 있고 정접 자원을 gzip 압축하거나, 메인 서버 앞단에서의 접속 기록(로깅)을 할 수도 있습니다.

용어 설명:

  • 버퍼 오버플로우: 
    • 버퍼는 데이터가 저장되는 메모리 공간으로, 메모리 공간을 벗어나는 경우를 말합니다.
    • 공격자가 일부러 넘치도록 데이터를 보내, 원래 건드리면 안되는 다른 메모리 영역을 오염시켜 시스템을 마비시키거나 악성 코드를 실행시키는 해킹 공격 기법입니다.
  • gzip 압축:
    • 데이터 파일에서 반복되는 패턴을 찾아내 더 간단한 형태로 줄여서 전송하는 기술입니다.
    • 데이터 전송량을 줄여 사용자는 더 빠르게 웹 페이지를 볼 수 있습니다.
    • 압축을 해제했을 때 서버에서의 CPU 오버헤드(추가 업무)도 생각해서 사용 유무를 결정해야 합니다.

2. 프록시 서버로 쓰는 CloudFlare

CloudFlare는 전 세계적으로 분산된 서버가 있고 이를 통해 어떠한 시스템의 콘텐츠 전달을 빠르게 할 수 있는 CDN 서비스입니다.

웹 서버 앞단에 프록시 서버로 두어 DDOS 공격 방어나 HTTPS 구축에 쓰입니다. 또한 서비스를 배포한 이후에 해외에서 무언가 의심스러운 트래픽이 많이 발생하면 이 때문에 많은 클라우드 서비스 비용이 발생할 수 있는데, 이때 CloudFlare가 의심스러운 트래픽인지 먼저 판단해 "당신은 로봇이 아닙니다" 같은 인증(CAPTCHA)등을 기반으로 이를 일정부분 막아주는 역할도 수행합니다.

  1. DDOS 공격 방어
    • DDOS는 짧은 기간 동안 네트워크에 많은 요청을 보내 네트워크를 마비시켜 웹 사이트의 가용성을 방해하는 사이버 공격 유형입니다.
    • CloudFlare는 의심스러운 트래픽, 특히 사용자가 접속하는 것이 아닌 시스템을 통해 오는 트래픽을 자동으로 차단해서 DDOS 공격으로부터 보호합니다.
    • CloudFlare의 거대한 네트워크 용량과 캐싱 전략으로 소규모 DDOS 공격은 쉽게 막아낼 수 있으며 이러한 공격에 대한 방화벽 대시보드도 제공합니다.
  2. HTTPS 구축
    • HTTPS는 "이 웹사이트는 안전합니다"라는 것을 증명하는 보안 잠금장치와 같습니다.
    • 사용자가 웹사이트와 주고받는 모든 정보(로그인 정보, 개인정보 등)를 암호화해서 중간에 누가 훔쳐보지 못하게 합니다.
    • CloudFlare을 사용하면 별도의 인증서 설치 없이 좀 더 손쉽게 HTTPS를 구축할 수 있습니다.

용어 설명:

  • CDN(Content Delivery Network): 
    • 각 사용자가 인터넷에 접속하는 곳과 가까운 곳에서 콘텐츠를 캐싱 또는 배포하는 서버 네트워크를 말합니다.
    • 전 세계에 여러 개의 지점을 둔 거대한 프랜차이즈 체인점과 같아요.
    • CDN은 사용자와 가장 가까운 곳에 있는 서버에 웹사이트의 콘텐츠(이미지, 동영상 등)를 미리 복사해 둡니다.
    • 사용자가 웹 서버로부터 콘텐츠를 다운로드하는 시간을 줄일 수 있습니다.

3. CORS와 프런트엔드의 프록시 서버

CORS는 웹 브라우저의 중요한 보안 규칙입니다. 비유하자면, "같은 아파트 단지 주민끼리만 소포를 직접 주고받을 수 있다"는 규칙과 같아요. 다른 아파트 단지(다른 오리진)에서 온 소포는 보안상의 이유로 경비실(브라우저)에서 일단 막아버리는 거죠.

 

예를 들어, 내 컴퓨터에서 프런트엔드 서버는 3000번 문(포트)을 쓰고, 백엔드 서버는 12010번 문을 쓴다고 해보죠. 둘은 같은 컴퓨터(127.0.0.1)에 있지만, 사용하는 문이 다르기 때문에 브라우저는 이 둘을 '다른 아파트 단지에 사는 사이'로 취급해서 서로 데이터를 주고받지 못하게 막습니다. 이게 바로 CORS 에러입니다.

 

이 문제를 해결하기 위해 프런트엔드 개발자는 프록시 서버라는 '대리인'을 사용합니다. 프런트엔드(3000번)에서 백엔드(12010번)로 데이터를 요청할 때, 이 대리인이 요청 주소를 살짝 바꿔서 마치 처음부터 백엔드와 같은 12010번에서 보낸 것처럼 꾸며주는 거죠. 그러면 브라우저는 "아, 같은 아파트 단지 주민이구나!"라고 생각하고 요청을 허락해 줍니다.

  • 127.0.0.1 이란? '나 자신'을 가리키는 약속된 IP 주소입니다. 인터넷을 거치지 않고 바로 내 컴퓨터 자체에 접속할 때 사용돼서 루프백(loopback) IP라고 부릅니다.

용어 설명:

  • 오리진: 
    • 웹 주소에서 '출신지 정보'라고 할 수 있습니다. 이 출신지는 아래 세 가지 정보의 조합으로 결정됩니다.
      1. 프로토콜: 통신 방식 (http 인지 https 인지)
      2. 호스트 이름: 서버의 주소 (kundol.com 같은 도메인 주소)
      3. 포트: 서버 내의 통로 번호 (:12010 같은 숫자)

'Computer Science > Design Pattern' 카테고리의 다른 글

📺 노출모듈 패턴  (0) 2025.09.16
🔁 이터레이터 패턴  (0) 2025.09.16
📡 옵저버 패턴 (Observer Pattern)  (0) 2025.09.09
⚔️ 전략 패턴 (Strategy Pattern)  (0) 2025.09.09
🏭 팩토리 패턴 (Factory Pattern)  (0) 2025.09.09
'Computer Science/Design Pattern' 카테고리의 다른 글
  • 📺 노출모듈 패턴
  • 🔁 이터레이터 패턴
  • 📡 옵저버 패턴 (Observer Pattern)
  • ⚔️ 전략 패턴 (Strategy Pattern)
TECHNING
TECHNING
Hi! I'm techning
  • TECHNING
    TECHNING
    TECHNING
    • 분류 전체보기 (54)
      • Computer Science (45)
        • Design Pattern (11)
        • Programming Paradigm (4)
        • Network (15)
        • Operating System (6)
        • Database (6)
        • Data Structure (3)
      • Algorithm (5)
        • Python (3)
        • Java (1)
      • IT Insight (4)
  • hELLO· Designed By정상우.v4.10.4
TECHNING
⛓️ 프록시 패턴과 프록시 서버
상단으로

티스토리툴바