Proxy!
프론트엔드 개발을 하다 보면 CORS, API 프록시, nginx, devServer proxy 같은 단어들과 함께 “프록시”라는 개념을 자주 마주치게 된다. 그런데 프록시에는 forward proxy(포워드 프록시)와 reverse proxy(리버스 프록시)라는 두 ...
🔀 포워드 프록시 vs 리버스 프록시
프론트엔드 개발을 하다 보면 CORS, API 프록시, nginx, devServer proxy 같은 단어들과 함께 “프록시”라는 개념을 자주 마주치게 된다. 그런데 프록시에는 forward proxy(포워드 프록시)와 reverse proxy(리버스 프록시)라는 두 가지 종류가 있다는 사실, 알고 있었는가?
두 개념은 동작 방식은 비슷하지만, 목적과 위치, 시선의 방향이 다르다. 이 글에서는 프론트엔드 개발자의 관점에서 두 프록시를 비교하고, 언제 어떤 상황에서 쓰이는지를 예시와 함께 설명해보려고 한다.
🧭 프록시란 무엇인가?
프록시는 말 그대로 대리 서버다.
사용자(클라이언트)가 어떤 서버에 자원을 요청할 때, 직접 요청하지 않고 프록시 서버를 거쳐서 요청하게 되며, 프록시 서버가 대신 응답을 받아서 사용자에게 전달한다.
이 기본 동작은 포워드 프록시와 리버스 프록시 모두 동일하다.
🔁 포워드 프록시 (Forward Proxy)
🔍 정의
클라이언트 앞단에 위치해서, 클라이언트의 요청을 대신 처리하는 프록시이다.
즉, 클라이언트가 익명으로 인터넷을 이용하거나, 특정 서버에 직접 접근하지 못하게 차단하거나, 요청을 기록/감시하기 위해 사용된다.
🧭 시선: 클라이언트 쪽을 숨긴다
📦 예시
• 회사 내부망에서 직원이 YouTube 접근 → 포워드 프록시 서버를 통해 요청
• 중국에서 구글에 접속할 때 사용하는 VPN, Shadowsocks 등
• Tor 브라우저 (사용자 익명성 보장)
🧩 프론트엔드 개발과의 관련성
→ 보통 네트워크 보안, 기업 방화벽, 사용자 검열 우회 등에 사용됨
🔁 리버스 프록시 (Reverse Proxy)
🔍 정의
서버 앞단에 위치해서, 클라이언트의 요청을 받아 적절한 백엔드 서버로 라우팅해주는 프록시이다.
즉, 클라이언트는 프록시에게 요청을 보내고, 프록시가 어떤 백엔드에서 처리할지 결정하고 응답을 대신 전달한다.
🧭 시선: 서버 구조를 숨긴다
📦 예시
• Nginx가 /api 요청을 localhost:3000의 Node.js 서버로 전달
• Cloudflare가 실제 서버를 대신해 캐싱과 보안을 담당
• 하나의 도메인에서 여러 앱(프론트 + API + 관리자 페이지 등)을 서빙
🧩 프론트엔드 개발과의 관련성
• 개발 시 vite.config.js에서 proxy 설정
• Nginx를 이용한 정적 파일 서빙 + API 서버 연결
• CORS 문제 우회
🧠 실제로 프론트에서 어떻게 쓰일까?
개발 시 (Vite, Webpack DevServer 등)
// vite.config.js
server: {
proxy: {
'/api': 'http://localhost:3000',
}
}
→ 리버스 프록시를 통해 CORS 없이 API 호출 가능
배포 시 (Nginx)
location /api/ {
proxy_pass http://backend-server:3000/;
}
location / {
root /usr/share/nginx/html;
index index.html;
}
→ 정적 파일과 API 서버를 분리하고, 하나의 서버처럼 동작하게 함