서버 하나로 프론트/백 서비스하기 (w. NginX 리버스 프록시)
라멘로드를 개발하며 느낀 점 중 하나는 AWS는 비싸다입니다.
고작 1GB 메모리에, 1vCPU 짜리 EC2와 Https 를 위한 ELB 만 해도 매달 45달러.. 한화로 64,089원이 나갑니다.
물론 ELB는 트래픽에 비례하기 때문에 사용자가 많아지면 많아질 수록 이용료는 더욱 늘어나겠죠..
라멘로드 팀은 금전적 문제로 인해 하나의 서버에서 프론트/백을 모두 서비스하기로 결정했습니다.
하나의 서버에서 프론트와 백을 모두 서비스하려면 리버시 프록시를 이용하면 됩니다.
리버스 프록시란
리버스 프록시에 대해 내가 설명하는 것보다 설명을 더 잘해주시는 분이 계시니 굳이 제가 할 필요는 없는 것 같습니다.
리버스 프록시 설정
프론트와 백은 현재 Docker 로 서비스하고 있는데 프론트는 포트번호 5010번, 백은 포트번호 3000번으로 서비스 중입니다.
따라서 프론트 서버에서 ```https://서버주소/api/~``` 로 요청을 보내면 인터넷을 타지않고 내부 ```http://127.0.0.1:3000``` 로 리다이렉트 시켜주어야 하는데요.
이러한 리버스 프록시 기능은 아래와 같은 nginx conf.d 설정을 통해 구현할 수 있습니다.
#/etc/nginx/conf.d/ramenroad.conf
server {
listen 80;
server_name ramenroad.com; # 또는 EC2의 퍼블릭 IP
location / {
proxy_pass http://127.0.0.1:5010; # Node.js, React, 또는 기타 애플리케이 션이 실행 중인 포트
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
location /api/ {
proxy_pass http://127.0.0.1:3000/; # Node.js, React, 또는 기타 애플리케 이션이>
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
위 코드를 통해 프론트엔드에서 ```http://서버주소/api/```로 요청을 보내면, Nginx 프록시가 이를 감지하여 ```http://127.0.0.1:3000/api/```로 요청을 전달합니다.
결론
이처럼 리버시 프록시를 이용하면 하나의 서버에서도 외부 인터넷을 거치지 않고 내부 통신으로 백엔드 API에 접근할 수 있어 네트워크 지연을 줄이고, ELB 없이도 프론트와 백을 효율적으로 연결할 수 있습니다. 리버스 프록시 설정만 잘해주면 마치 분리된 서비스처럼 유기적인 구조를 만들 수 있답니다.
라멘로드는 이러한 구조를 통해 최소한의 비용으로 안정적인 서비스를 운영하고 있습니다. 그냥 홈서버를 하나 만들까봐요