[NCloud 1기] 프록시(Proxy)란 무엇인가?
클라우드에서 Web → WAS 통신을 이해하는 가장 핵심 개념
“프록시(proxy)”는 개발자라면 반드시 알아야 하는 네트워크 개념이며,
특히 React + Spring Boot 구조에서 완전 필수로 사용되는 기술이다.
여기서는 “WAS 서버로 프록시”라는 말이 포함하는 의미를 쉽고 명확하게 정리한다.
1. 프록시(proxy)란 무엇인가?
프록시 서버란
클라이언트(브라우저)의 요청을 대신 받아서 다른 서버에게 전달해주는 중간 서버를 말한다.
즉,
사용자 → 프록시 서버 → 실제 서버(WAS)
이 흐름을 만들어주는 것이 바로 "프록시"다.
2. 왜 프록시가 필요한가? (React + Spring Boot 기준)
React는 정적 파일(html, css, js)을 제공하는 단순한 프론트 역할이고
실제 API 기능은 Spring Boot(WAS)에 있다.
하지만 보안/구조/도메인 문제로 프론트가 직접 WAS로 요청하면 문제가 생긴다.
대표적인 문제 3가지
- CORS 문제
- React가 localhost:3000
- Spring Boot가 localhost:8080
이렇게 다른 포트이기 때문에 브라우저는 보안상 요청을 차단한다.
- WAS는 외부에 직접 노출되면 안 된다
- WAS는 Private Subnet에 있어야 하고
- 사용자는 WEB 또는 LB만 보게 해야 한다.
- 서비스 구조가 지저분해짐
- React에서 API를 http://10.0.2.5:8080/api 같은 내부 프라이빗 IP로 호출하는 건 불가능함.
그래서 등장한 것이 프록시(Proxy) 이다.
3. 프록시가 해결하는 이미지 (가장 이해 쉬운 버전)
사용자 브라우저
↓ 요청 (/api/images)
Nginx (WEB Tier)
↓ 프록시 패스
WAS(Spring Boot)
↓
DB / Object Storage
즉,
사용자 → WEB 서버만 보인다
WEB 서버는 WAS의 존재를 감춘다.
WEB(Server) 입장에서의 역할:
- 정적 파일 제공 (React 빌드된 페이지)
- /api/** 요청은 WAS로 전달 (프록시)
이게 바로 "WAS로 프록시한다"라는 것의 의미다.
4. 프록시 패스(proxy_pass)의 실제 Nginx 설정 예시
WEB 서버(Nginx)에서는 다음처럼 설정한다:
location /api/ {
proxy_pass http://WAS_PRIVATE_IP:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
이 한 줄이 모든 마법을 일으킨다.
proxy_pass http://WAS_PRIVATE_IP:8080/;
이 라인이 뜻하는 것:
"/api로 시작하는 모든 요청을
WAS 서버의 내부 IP:8080으로 전달해라."
5. 프록시 동작 흐름 예시
사용자가 아래 요청을 보낸다고 해보자:
GET https://mydomain.com/api/images
프록시가 없다면 WAS의 주소를 직접 적어야 한다:
GET http://10.0.2.4:8080/api/images (보안상 불가능)
하지만 프록시가 있으면 흐름이 이렇게 바뀐다:
브라우저 → WEB 서버(Nginx)
Nginx(프록시) → WAS 서버
사용자는 WAS의 존재조차 모른다.
서버 간 내부 통신으로 깔끔하게 연결된다!
6. 프록시를 사용하면 얻는 이점 (중요)
✔ 1) CORS 문제 없음
프론트는 /api 만 요청하면 되니 CORS 필요 없음.
✔ 2) WAS가 외부에 노출되지 않는다
WAS는 Private Subnet에 숨겨진다.
✔ 3) LB, WEB, WAS 구조가 깔끔해진다
LB → WEB → WAS 라는 3단 구성이 완성된다.
✔ 4) HTTPS 처리도 WEB/LB에서만 하면 된다
WAS는 HTTP만 잘 받아도 됨 → 부담 감소.
✔ 5) 하나의 도메인으로 프론트와 API를 모두 제공
UX/SEO/보안 모두 향상.
7. 실제 NCP 3-Tier 아키텍처에서의 프록시 위치
아키텍처 기준 프록시는 여기에서 발생한다:
사용자 → Load Balancer → WEB 서버(Nginx) → WAS 서버(Spring Boot)
즉 WEB 서버가 프록시 역할을 한다.
그리고 LB는 단순히 트래픽 분배/SSL 처리 역할만 한다.
8. 프록시와 리버스 프록시의 차이 (개념을 더 깊게)
프록시는 두 종류가 있다.
| Forward Proxy | 클라이언트가 보이지 않도록 대신 요청해줌 (VPN, 회사 프록시 등) |
| Reverse Proxy | 서버가 숨겨져 있고, 중간 서버가 요청을 대신 처리함 (Nginx, LB) |
React → Nginx → WAS 구조는
리버스 프록시(Reversed Proxy) 구조다.
리버스 프록시는 오늘날 대부분의 웹 서비스에서 필수적으로 사용된다.
네이버, 유튜브, 구글 등도 모두 리버스 프록시 기반이다.
마무리 - "WAS로 프록시"란?
한 문장으로 요약하자면:
WEB 서버(Nginx)가 사용자와 WAS(Spring Boot) 사이에서 요청을 대신 전달해주는 것.
그 결과 사용자는 WEB만 보게 되고, WAS는 안전한 내부망에서 동작한다.
React + Spring Boot + NCP 구조에서는
이 프록시 구조가 서비스 전체를 지탱하는 핵심 중 하나라고 할 수 있다.