클라이언트와 서버 사이의 중계 서버
- 요청을 대신 전달
- 응답을 대신 받음
- 중간에서 다양한 기능 수행
직접 연결:
Client ───────────> Server
프록시 사용:
Client ──> Proxy ──> Server
중계 서버
클라이언트를 대신하여 요청
- 클라이언트 측 프록시
- 클라이언트를 숨김
- 서버는 프록시만 봄
[Client1] ┐
[Client2] ├─> [Forward Proxy] ──> [Server]
[Client3] ┘
클라이언트 여러 명 → 프록시 1개 → 서버
서버 입장:
- 클라이언트 IP 모름
- 프록시 IP만 보임
1. Client → Forward Proxy
"google.com 접속해줘"
2. Forward Proxy → Server (google.com)
프록시가 대신 요청
3. Server → Forward Proxy
응답 전달
4. Forward Proxy → Client
응답 전달
Client는 Server와 직접 통신 안 함 ✔
클라이언트 IP 숨김
Client (192.168.1.10)
↓
Proxy (203.0.113.5)
↓
Server
Server가 보는 IP: 203.0.113.5 (프록시)
실제 Client IP: 192.168.1.10 (숨겨짐) ✔
사용:
- 익명 브라우징
- 우회 접속
자주 요청되는 콘텐츠 저장
첫 요청:
Client → Proxy → Server (느림)
└─ 응답 저장
이후 요청:
Client → Proxy (캐시에서 즉시 응답) ✔
X Server (요청 안 함)
장점:
- 빠른 응답
- 서버 부하 감소
- 대역폭 절약
특정 사이트 차단
예: 회사 네트워크
- facebook.com 차단 ✘
- youtube.com 차단 ✘
- 업무 사이트만 허용 ✔
프록시가 URL 필터링
모든 요청 기록
로그:
- 사용자: user1
- 시간: 2025-10-19 14:30:00
- URL: google.com
- 크기: 1.2MB
용도:
- 사용 패턴 분석
- 보안 감사
- 트래픽 모니터링
서버를 대신하여 응답
- 서버 측 프록시
- 서버를 숨김
- 클라이언트는 프록시만 봄
[Client] ──> [Reverse Proxy] ──> ┌─ [Server1]
├─ [Server2]
└─ [Server3]
클라이언트 → 프록시 1개 → 서버 여러 개
클라이언트 입장:
- 실제 서버 IP 모름
- 프록시 IP만 보임
1. Client → Reverse Proxy
"example.com 접속"
2. Reverse Proxy → Server (실제 서버 선택)
Server1, Server2, Server3 중 선택
3. Server → Reverse Proxy
응답 전달
4. Reverse Proxy → Client
응답 전달
Client는 실제 Server를 모름 ✔
여러 서버에 트래픽 분산
Client1 → Reverse Proxy → Server1
Client2 → Reverse Proxy → Server2
Client3 → Reverse Proxy → Server3
Client4 → Reverse Proxy → Server1
알고리즘:
- Round Robin
- Least Connections
- IP Hash
효과:
- 부하 분산
- 고가용성
HTTPS 암호화/복호화를 프록시가 처리
Client ←[HTTPS]→ Reverse Proxy ←[HTTP]→ Server
암호화 평문
장점:
- 서버 부하 감소
- 인증서 중앙 관리
- 서버는 HTTP만 처리
Reverse Proxy:
- SSL 인증서 설치
- 암호화/복호화 수행
- 평문으로 서버 전달
정적 콘텐츠 캐싱
첫 요청:
Client → Reverse Proxy → Server
└─ 이미지, CSS, JS 저장
이후 요청:
Client → Reverse Proxy (캐시 응답) ✔
X Server
효과:
- 서버 부하 감소
- 빠른 응답
실제 서버 보호
Client는 Reverse Proxy만 봄
↓
방화벽, DDoS 방어
↓
실제 Server (내부 네트워크)
공격:
- 프록시가 먼저 받음
- 필터링 후 서버 전달
- 서버 직접 노출 안 됨 ✔
응답 데이터 압축
Server → Reverse Proxy (평문 10MB)
↓ gzip 압축
Client ← 2MB
효과:
- 대역폭 절약
- 빠른 전송
| 구분 | Forward Proxy | Reverse Proxy |
|---|---|---|
| 위치 | 클라이언트 측 | 서버 측 |
| 숨기는 대상 | 클라이언트 | 서버 |
| 용도 | 접근 제어, 익명성 | 로드밸런싱, 보안 |
| 캐싱 | 클라이언트 캐시 | 서버 캐시 |
| 설정 | 클라이언트 설정 | 서버 설정 |
| 예시 | 회사 프록시, VPN | Nginx, Apache |
# nginx.conf
http {
# 업스트림 서버 정의
upstream backend {
server 192.168.1.10:8080;
server 192.168.1.11:8080;
server 192.168.1.12:8080;
}
# 캐시 설정
proxy_cache_path /var/cache/nginx
levels=1:2
keys_zone=my_cache:10m
max_size=1g;
server {
listen 80;
server_name example.com;
location / {
# 리버스 프록시 설정
proxy_pass http://backend;
# 헤더 설정
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 캐싱
proxy_cache my_cache;
proxy_cache_valid 200 1h;
proxy_cache_use_stale error timeout;
# 타임아웃
proxy_connect_timeout 30s;
proxy_send_timeout 30s;
proxy_read_timeout 30s;
}
# 정적 파일 캐싱
location ~* \.(jpg|jpeg|png|gif|css|js)$ {
proxy_pass http://backend;
proxy_cache my_cache;
proxy_cache_valid 200 1d;
expires 1d;
}
}
# HTTPS 설정
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/ssl/certs/example.com.crt;
ssl_certificate_key /etc/ssl/private/example.com.key;
location / {
proxy_pass http://backend;
}
}
}
# squid.conf
# 포트 설정
http_port 3128
# 캐시 설정
cache_dir ufs /var/spool/squid 10000 16 256
# 접근 제어 (ACL)
acl localnet src 192.168.1.0/24
acl blocked_sites dstdomain .facebook.com
acl blocked_sites dstdomain .youtube.com
# 규칙
http_access deny blocked_sites
http_access allow localnet
http_access deny all
# 로그
access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
무료/유료 프록시 서비스:
- Squid Proxy
- Privoxy
- TinyProxy
상용 서비스:
- ProxyMesh
- Bright Data
- Smartproxy
주의:
- 보안 위험 (트래픽 감청 가능)
- 신뢰할 수 있는 서비스 사용
회사 네트워크에서 사용
목적:
- 인터넷 접근 제어
- 트래픽 모니터링
- 대역폭 관리
- 보안 강화
기능:
- 웹 필터링
- 바이러스 검사
- 사용 로그 기록
프록시는 클라이언트와 서버 사이의 중계 서버입니다.
Forward Proxy (클라이언트 측):
- 클라이언트를 숨김
- 접근 제어, 캐싱
- 예: 회사 프록시
Reverse Proxy (서버 측):
- 서버를 숨김
- 로드밸런싱, SSL 종료
- 예: Nginx
차이점:
- Forward: 클라이언트 보호
- Reverse: 서버 보호
프록시 (Proxy):
정의:
클라이언트와 서버 사이에서 요청을 중계하는 서버
- 중간자 역할
- 다양한 기능 수행
Forward Proxy (포워드 프록시):
위치: 클라이언트 측
역할: 클라이언트를 대신하여 요청
구조:
Client → Forward Proxy → Server
서버 입장:
- 클라이언트 IP 모름
- 프록시 IP만 보임
기능:
1. 익명성: 클라이언트 IP 숨김
2. 캐싱: 자주 요청되는 콘텐츠 저장
3. 접근 제어: 특정 사이트 차단
4. 로깅: 트래픽 모니터링
5. 압축: 데이터 압축
사용 사례:
- 회사 네트워크 (인터넷 제어)
- VPN (우회 접속)
- 웹 스크래핑
Reverse Proxy (리버스 프록시):
위치: 서버 측
역할: 서버를 대신하여 응답
구조:
Client → Reverse Proxy → Multiple Servers
클라이언트 입장:
- 실제 서버 IP 모름
- 프록시 IP만 보임
기능:
1. 로드 밸런싱:
- 여러 서버에 트래픽 분산
- 고가용성
2. SSL 종료:
- HTTPS 암호화/복호화
- 서버 부하 감소
3. 캐싱:
- 정적 콘텐츠 저장
- 서버 부하 감소
4. 보안:
- 실제 서버 보호
- DDoS 방어
5. 압축:
- 응답 데이터 압축
사용 사례:
- 웹 서버 (Nginx, Apache)
- API Gateway
- CDN
차이점:
Forward Proxy:
- 클라이언트를 숨김
- 나가는 트래픽 제어
- 클라이언트가 설정
Reverse Proxy:
- 서버를 숨김
- 들어오는 트래픽 제어
- 서버가 설정
실무:
- Nginx: 가장 많이 사용되는 리버스 프록시
- HAProxy: 로드밸런싱 특화
- Squid: 포워드 프록시
- Apache: 범용 웹 서버/프록시
프록시 체인:
Client → Forward Proxy → Reverse Proxy → Server
익명성 강화, 다층 보안
전 세계에 분산된 서버 네트워크
- 콘텐츠를 사용자와 가까운 곳에서 제공
- 빠른 속도
- 서버 부하 분산
CDN 없이:
한국 사용자 → 미국 서버 (느림) ✘
14,000km 거리
CDN 사용:
한국 사용자 → 한국 CDN 서버 (빠름) ✔
근거리
Origin Server (원본 서버):
- 미국 (본사)
Edge Servers (엣지 서버):
- 서울
- 도쿄
- 싱가포르
- 프랑크푸르트
- 런던
- 뉴욕
- 시드니
...전 세계 수백 곳
사용자는 가장 가까운 Edge Server 접속 ✔
[Origin Server]
|
[Regional Cache]
/ | \
[Edge] [Edge] [Edge]
/ \ / \ / \
Users Users Users
3단계:
1. Origin: 원본 콘텐츠
2. Regional: 지역별 캐시
3. Edge: 최종 사용자와 가까움
1. 사용자 요청:
한국 사용자 → "example.com/image.jpg"
2. DNS 조회:
example.com → 가장 가까운 CDN 서버 IP
→ 서울 CDN 서버
3. 서울 CDN 확인:
image.jpg 있나? → 없음 (Cache Miss)
4. Origin에서 가져옴:
서울 CDN → Origin Server (미국)
image.jpg 다운로드
5. 캐싱 및 응답:
서울 CDN에 저장
사용자에게 응답
첫 요청: 느림 (Origin까지 가야 함)
1. 사용자 요청:
다른 한국 사용자 → "example.com/image.jpg"
2. DNS 조회:
서울 CDN 서버
3. 서울 CDN 확인:
image.jpg 있음! (Cache Hit) ✔
4. 즉시 응답:
서울 CDN → 사용자
(Origin 접속 불필요)
이후 요청: 매우 빠름 ✔
정적 콘텐츠 저장:
- 이미지 (JPG, PNG, GIF)
- 동영상 (MP4, WebM)
- CSS, JavaScript
- 폰트 파일
- 문서 (PDF)
TTL (Time To Live):
- 캐시 유효 시간 설정
- 예: 1일, 1주일, 1개월
Cache-Control 헤더:
Cache-Control: max-age=86400
→ 24시간 캐싱
Geo-Routing (지역 기반 라우팅):
한국 사용자 → 서울 CDN
일본 사용자 → 도쿄 CDN
미국 사용자 → 뉴욕 CDN
기준:
- 물리적 거리
- 네트워크 지연(Latency)
- 서버 부하
효과:
- 빠른 응답 속도
- 낮은 지연시간
여러 CDN 서버에 트래픽 분산
서울 CDN:
- Server 1: 60% 부하
- Server 2: 40% 부하
- Server 3: 50% 부하
새 요청 → Server 2 (부하 낮음)
효과:
- 고가용성
- 장애 대응
분산 서비스 거부 공격 방어
공격:
- 1억 개 요청/초
CDN:
- 전 세계 서버에 분산
- 각 서버: 10만 개/초
- 감당 가능 ✔
Origin Server:
- 직접 공격 안 받음
- CDN이 보호
HTTPS 지원
CDN에서 SSL 종료:
User ←[HTTPS]→ CDN ←[HTTP/HTTPS]→ Origin
암호화 선택 가능
장점:
- 빠른 SSL 처리
- 인증서 중앙 관리
자동 압축 (Gzip, Brotli)
Origin: 10MB HTML
↓ CDN 압축
User: 2MB 전송
효과:
- 대역폭 절약
- 빠른 로딩
자동 변환:
- WebP 지원 브라우저 → WebP
- 구형 브라우저 → JPEG/PNG
크기 조정:
- 원본: 4000x3000
- 모바일: 800x600 (자동 리사이징)
효과:
- 용량 감소
- 빠른 로딩
원본 서버가 콘텐츠를 CDN에 직접 업로드
동작:
1. 개발자가 콘텐츠 업로드
2. CDN이 모든 서버에 복제
3. 사용자 요청 시 즉시 제공
장점:
- 항상 캐시됨
- 빠른 응답
단점:
- 수동 관리
- 저장 공간 사용
사용:
- 변경이 적은 콘텐츠
- 정적 사이트
사용자 요청 시 Origin에서 가져옴
동작:
1. 사용자 요청
2. CDN에 없으면 Origin에서 가져옴
3. CDN에 캐싱
4. 이후 요청은 캐시 제공
장점:
- 자동화
- 저장 공간 효율적
단점:
- 첫 요청 느림
사용:
- 대부분의 웹사이트 (일반적) ✔
특징:
- 무료 플랜 제공
- 글로벌 네트워크
- DDoS 방어
- DNS 서비스
위치:
- 전 세계 200+ 도시
특징:
- AWS 통합
- S3, EC2 연동
- Lambda@Edge
가격:
- 사용량 기반
특징:
- 가장 오래된 CDN
- 엔터프라이즈급
- 고성능
점유율:
- 전 세계 1위
특징:
- 실시간 캐시 제거
- VCL (Varnish Configuration Language)
- 엣지 컴퓨팅
사용:
- GitHub, Stripe
특징:
- Google 네트워크
- GCP 통합
- YouTube 인프라 활용
1. DNS 설정:
example.com → Cloudflare Nameserver
2. Cloudflare에서:
- SSL/TLS 설정
- 캐싱 규칙 설정
- 압축 활성화
3. 자동:
- 모든 트래픽이 Cloudflare 경유
- 정적 콘텐츠 자동 캐싱
// CloudFront Distribution 생성
{
"Origins": [{
"DomainName": "example.s3.amazonaws.com",
"Id": "S3-example"
}],
"DefaultCacheBehavior": {
"TargetOriginId": "S3-example",
"ViewerProtocolPolicy": "redirect-to-https",
"AllowedMethods": ["GET", "HEAD"],
"CachedMethods": ["GET", "HEAD"],
"Compress": true,
"DefaultTTL": 86400 // 1일
}
}
정적 리소스:
Cache-Control: public, max-age=31536000, immutable
→ 1년 캐싱, 변경 안 됨
HTML:
Cache-Control: public, max-age=3600, must-revalidate
→ 1시간 캐싱, 재검증 필요
동적 콘텐츠:
Cache-Control: no-cache, no-store, must-revalidate
→ 캐싱 안 함
1. Hit Ratio (캐시 적중률):
캐시 Hit / 전체 요청
목표: 90% 이상
2. Origin 부하:
Origin 요청 수
목표: 최소화
3. 응답 시간:
TTFB (Time To First Byte)
목표: <100ms
4. 대역폭 절약:
CDN으로 절약된 대역폭
목표: 70% 이상
CDN은 전 세계에 분산된 캐시 서버 네트워크입니다.
동작:
1. 사용자 요청
2. 가장 가까운 CDN 서버 연결
3. 캐시 있으면 즉시 응답 (빠름)
4. 없으면 Origin에서 가져와 캐싱
장점:
- 빠른 속도
- 서버 부하 감소
- DDoS 방어
사용:
- 이미지, 동영상
- CSS, JavaScript
``` CDN (Content Delivery Network):
정의: 전 세계에 분산된 서버 네트워크로 콘텐츠를 사용자와 가까운 곳에서 제공
구성:
동작 과정:
주요 기능:
장점: ✔ 빠른 로딩 속도 (물리적 거리 감소) ✔ 서버 부하 감소 (Origin 보호) ✔ 대역폭 절약 (캐싱) ✔ 고가용성 (분산 구조) ✔ DDoS 방어 ✔ 글로벌 확장 용이
단점: ✘ 비용 (트래픽 기반 과금) ✘ 캐시 무효화 복잡 ✘ 동적 콘텐츠에는 효과 적음
CDN 종류:
Push CDN:
Pull CDN (일반적):
주요 제공자:
실무 활용:
설정: