Nginx 리버스 프록시와 Docker Compose를 사용한 다중 컨테이너 웹 애플리케이션
발행: (2025년 12월 21일 오전 03:26 GMT+9)
3 min read
원문: Dev.to
Source: Dev.to
이 프로젝트가 보여주는 내용
- 다중 컨테이너 애플리케이션 설계
- 서비스 오케스트레이션을 위한 Docker Compose
- 리버스 프록시 역할의 Nginx
- 인터넷에 노출되지 않는 프라이빗 애플리케이션 컨테이너
- Docker 네트워킹을 통한 서비스 간 통신
- 애플리케이션과 웹 서버의 명확한 분리
- 프로덕션 수준의 컨테이너 구조
아키텍처 개요
- 클라이언트(브라우저) → Nginx (호스트에 노출되는 유일한 컨테이너)
- Node.js 애플리케이션은 Docker 네트워크 내부에서만 접근 가능
- 컨테이너는 IP 주소가 아니라 서비스 이름을 사용해 통신
프로젝트 구조
project-2-multicontainer/
사용 기술
- Docker
- Docker Compose (v2)
- Node.js (Express)
- Nginx
- Linux 기반 컨테이너
로컬에서 프로젝트 실행하기
사전 요구 사항
- Docker Desktop
- Docker Compose v2
단계
-
레포지토리 복제
git clone https://github.com/dr-musa-bala/project-2-multicontainer.git cd project-2-multicontainer -
컨테이너 빌드 및 시작
docker compose up --build -
브라우저 열기
http://localhost:8080방문
보안 및 프로덕션 고려 사항
- 애플리케이션 컨테이너는 호스트에 포트를 노출하지 않음.
- 모든 외부 트래픽은 Nginx가 처리.
- 실제 프로덕션 배포 패턴을 그대로 모방.
왜 중요한가 (DevOps 관점)
- 애플리케이션 서비스를 격리.
- 리버스 프록시를 통해 인그레스 트래픽 제어.
- 선언형 설정을 사용해 재현성 확보.
- CI/CD 파이프라인으로 확장하기 쉬운 시스템 구축.
향후 개선 사항
- GitHub Actions를 이용한 CI/CD 추가.
- 애플리케이션 이미지 Docker Hub에 푸시.
- 스택을 AWS EC2에 배포.
- 무중단 업데이트 구현.
- Let’s Encrypt를 이용한 HTTPS 적용.