"웹 개발부터 배포, 운영까지 (7/8) — 프론트엔드와 백엔드 배포 구조: EC2, WAS, nginx를 한 번에 정리"
배포는 서버를 하나 사는 일이 아니라, 요청이 어디를 거쳐 어떤 프로세스에 도달하는지 구조를 만드는 일이다.
핵심 요약
- EC2는 애플리케이션을 올릴 수 있는 가상 서버이고, nginx는 요청을 받아 정적 파일 제공과 프록시 역할을 수행하는 웹 서버다.
- 브라우저 요청은 보통
도메인 -> nginx -> 애플리케이션 서버(WAS) -> 데이터 계층순서로 흐른다. - 프론트엔드와 백엔드는 "코드 종류"보다 "어디서 실행되고 무엇을 반환하는가"로 구분하는 편이 운영에 유리하다.
- 입문 단계에서는 한 대의 EC2에 올릴 수 있어도, 역할 분리를 이해해야 장애와 병목을 설명할 수 있다.
1. EC2는 무엇이고 왜 자주 등장할까
AWS EC2는 직접 서버를 관리하는 방식의 대표적인 출발점이다. AWS 문서 기준으로 사용자는 인스턴스를 생성하고, 리전을 선택하고, 네트워크와 접근 방식을 정해 애플리케이션을 올린다.
초보자 입장에서 EC2를 이해하는 가장 쉬운 방법은 "내가 실행 환경을 더 많이 책임지는 서버"라고 보는 것이다.
- 어떤 운영체제를 쓸지 정해야 한다
- 어떤 포트를 열지 정해야 한다
- 어떤 프로세스를 띄울지 정해야 한다
- 재시작, 로그, 업데이트를 직접 관리해야 한다
플랫폼형 배포보다 손이 더 가지만, 구조를 배울 때는 오히려 투명하다. 어떤 레이어가 실제로 존재하는지 잘 보이기 때문이다.
2. 웹 서버와 WAS는 어떻게 다를까
웹 개발 입문에서 자주 나오는 WS와 WAS 구분은 아직도 유효하다. 용어 자체보다 역할 분리를 이해하는 것이 중요하다.
웹 서버(nginx)
정적 파일을 전달하고, 외부 요청을 받아 적절한 내부 서비스로 넘기는 데 강하다. 리버스 프록시, 캐시, 압축, 라우팅 제어 같은 역할을 맡는다.
WAS 또는 애플리케이션 서버
실제 애플리케이션 코드를 실행한다. Node.js 서버, Python 앱 서버, Java 애플리케이션 서버처럼 요청을 받아 비즈니스 로직을 처리하고 응답을 만든다.
즉, nginx는 "문 앞 정리와 전달", 애플리케이션 서버는 "실제 처리"에 가깝다.
3. 왜 nginx를 앞에 두는가
입문자에게는 "그냥 앱 서버 포트를 바로 열면 되지 않나?"라는 질문이 자연스럽다. 작은 실험에서는 가능하다. 하지만 운영 구조에서는 nginx를 앞단에 두는 이유가 분명하다.
정적 파일 처리
이미지, CSS, JS 같은 파일은 애플리케이션 서버를 거치지 않고 더 효율적으로 응답할 수 있다.
리버스 프록시
외부에는 80, 443 포트만 노출하고, 내부에서는 애플리케이션이 3000, 8000 같은 포트에서 돌아가도록 숨길 수 있다.
요청 분기
/api는 백엔드로, 나머지는 프론트엔드 정적 자산이나 SSR 서버로 보내는 식의 경로 분리가 가능하다.
재시작과 격리
애플리케이션 프로세스가 재시작되더라도 프록시 계층은 분리되어 운영할 수 있다.
nginx 공식 문서는 마스터 프로세스와 워커 프로세스 구조, 시그널 기반 제어를 설명한다. 이런 점은 nginx가 단순 파일 서버가 아니라 운영 제어 지점이라는 것을 보여 준다.
4. 프론트엔드와 백엔드는 배포에서 어떻게 만날까
아키텍처를 아주 단순화하면 아래 흐름으로 볼 수 있다.
사용자 브라우저
-> 도메인
-> nginx
-> 프론트엔드 정적 파일 또는 SSR 서버
-> 백엔드 API 서버
-> 데이터베이스/외부 서비스
여기서 중요한 것은 프론트엔드도 경우에 따라 단순 정적 파일일 수 있고, 서버 렌더링을 하면 별도 프로세스가 될 수도 있다는 점이다.
백엔드는 API 응답을 주고, 프론트엔드는 화면을 보여 준다고 흔히 설명하지만, 배포 관점에서는 더 정확히 이렇게 정리할 수 있다.
- 프론트엔드: 브라우저에 보이는 자산과 UI 실행 레이어
- 백엔드: 요청 처리, 인증, 데이터 접근, 비즈니스 규칙 레이어
- nginx: 외부 요청을 받아 적절한 실행 지점으로 나누는 레이어
5. 한 대의 서버에 올릴 때 주의할 점
입문 단계에서는 한 대의 EC2에 프론트엔드, 백엔드, nginx를 모두 올리는 구성이 자주 쓰인다. 이해하기 쉽고 비용도 낮다. 다만 몇 가지 한계가 있다.
자원 경쟁
빌드, API 처리, 로그 적재가 한 서버 자원을 같이 쓰면 CPU와 메모리 병목이 금방 생긴다.
장애 전파
한 프로세스의 문제나 잘못된 배포가 전체 서비스에 동시에 영향을 준다.
운영 복잡도 증가
방화벽, 포트, 프로세스 매니저, 배포 스크립트, 로그 경로를 모두 한 머신에서 관리해야 한다.
그래서 한 대 배포는 나쁜 방식이라기보다, "구조를 배울 수 있지만 분리 필요성이 빨리 드러나는 단계"라고 보는 편이 정확하다.
6. 입문자가 기억하면 좋은 최소 구조
처음 서버 배포를 이해할 때는 아래 세 줄만 잡아도 충분하다.
- EC2는 실행 환경이다.
- nginx는 외부 요청을 받는 문지기다.
- 애플리케이션 서버는 실제 코드를 실행하는 처리기다.
이 세 역할이 머릿속에서 분리되면, 이후에 Docker, 로드 밸런서, 오토스케일링, 컨테이너 오케스트레이션을 배워도 훨씬 덜 헷갈린다.
참고 자료
- AWS Docs, Get started with Amazon EC2 — https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html
- NGINX Docs, Beginner's Guide — https://nginx.org/en/docs/beginners_guide.html
- Next.js Docs, Deploying — https://nextjs.org/docs/pages/building-your-application/deploying
이 글은 웹 개발부터 배포, 운영까지 시리즈의 7/8편이다.
댓글
댓글 쓰기