웹 서버 프로그램의 한 종류
정적 파일(HTML, CSS, JS, 이미지 등)*은 직접 빠르게 제공
동적 요청(API 등) 은 뒤에 있는 서버(Spring Boot, Node.js 같은 앱 서버)로 전달하는 역할 (→ 리버스 프록시)
동시에 로드밸런서(요청을 여러 서버에 나눠주는 역할) 기능도 있음
가벼운 이벤트 기반 웹 서버이자 리버스 프록시/로드밸런서/API 게이트웨이
요청마다 스레드를 하나씩 쓰는 게 아니라 비동기 이벤트 루프로 처리해서 동시접속에 강함
정적 파일(HTML/CSS/JS/이미지)은 직접 서빙, API는 뒤에 있는 앱 서버(예: Spring Boot 8080)로 프록시
로드 밸런서 (트래픽 분산)
내 PC/서버에 직접 설치
dnf install nginx
또는 apt install nginx
로 설치 후 설정클라우드 환경 (AWS EC2 등)
컨테이너 방식 (Docker 사용)
항목 | Nginx (자체 운영) | AWS ALB (매니지드) |
---|---|---|
배포/운영 | 직접 설치/업데이트/백업/스케일링 | AWS가 가용성·스케일 자동 처리 |
HTTPS 인증서 | 파일로 관리(예: Let’s Encrypt, certbot, 수동 마운트) | ACM 인증서로 자동 갱신/연결 |
포트 80/443 | 서버 보안그룹 직접 개방, 리다이렉트 설정 직접 | ALB 리스너 규칙(80→443 리다이렉트) 클릭 몇 번 |
로드밸런싱 | upstream /헬스체크/재시도 직접 설정 | 타깃 그룹/헬스체크/재시도 기본 제공 |
확장성 | Auto Scaling + 사용자 구성 필요 | 트래픽 증가 시 ALB 자체 확장 |
고가용성(멀티 AZ) | 다중 AZ 구성 + 장애조치 직접 | 기본 멀티 AZ |
정적 리소스·캐시 | 정교한 캐시/압축(gzip/brotli), 헤더 제어 쉬움 | 캐시는 없음(CloudFront 붙이는 게 일반적) |
보안/엣지 제어 | 보안헤더, 속도제한, IP필터 등 세밀하게 가능 | WAF/Shield와 연동 쉬움, 보안그룹 분리 깔끔 |
라우팅 | 정규식/접두사/서브경로/헤더 기반 매우 유연 | 경로/호스트 기반 라우팅, 가중치/카나리 용이 |
WebSocket/gRPC | 둘 다 지원(설정 필요) | 둘 다 지원(클릭 설정) |
관측/로그 | access/error 로그 직접 수집·보관 | CloudWatch/ALB 액세스 로그·메트릭 기본 |
비용 | Nginx는 무료지만 EC2 비용+운영 인건비 | ALB 시간/LCU 과금(운영비↓), EC2는 백엔드만 |
커스터마이징 | 최고(헤더/버퍼/캐시/필터링·정책) | 표준 기능 범위 내(대부분 충분) |
장점
단점
장점
단점
소규모/내부·개인 서비스, 세밀한 튜닝 필요 → Nginx
퍼블릭 서비스, 가용성·확장·운영 편의가 중요 → ALB
하이브리드
요구 | 추천 |
---|---|
“HTTPS/도메인/멀티 AZ/스케일 자동 + 운영 간단” | ALB + ACM |
“정적 캐시·압축·세밀한 헤더/레이트리밋·SSE/WS 튜닝” | Nginx |
“글로벌 캐시·정적 대량” | CloudFront(+S3), 동적은 ALB |
“지금은 작고 싸게, 나중에 키움” | 초기에 Nginx 가능 → 규모 커지면 ALB로 승격 |
certbot
: 무료 SSL/TLS 인증서 발급·갱신 도구fullchain.pem
, privkey.pem
파일을 자동으로 발급해줌서버(Nginx, Apache 등)에 certbot 설치
sudo apt install certbot python3-certbot-nginx
인증서 발급 요청
예:
sudo certbot --nginx -d example.com -d www.example.com
certbot이 도메인 소유 확인을 위해 http://example.com/.well-known/...
같은 경로를 자동 생성
Let’s Encrypt 서버가 접속해 확인 후 인증서 발급
Nginx 설정 자동 변경 (옵션)
/etc/nginx/sites-enabled/default
같은 곳에 SSL 관련 설정(ssl_certificate
, ssl_certificate_key
) 추가인증서 파일 저장
/etc/letsencrypt/live/example.com/fullchain.pem
/etc/letsencrypt/live/example.com/privkey.pem
자동 갱신
cron
이나 systemd
로 자동 등록됨 → 보통 60일마다 갱신 시도certbot renew
)--nginx
나 --apache
옵션 주면 설정 파일까지 수정장점
단점