웹 서버
웹 서버의 정의
- HTTP/HTTPS 프로토콜을 통해 클라이언트(브라우저, API 호출 등)의 요청을 수신하고, 정적 파일 (HTML/CSS/JS/IMAG) 또는 동적 처리 결과를 응답하는 소프트웨어 입니다.
- Apache HTTP Server, Nginx, MS IIS
웹 서버를 사용하는 이유
- 정적 콘텐츠 제공 : 이미지나 HTML 파일 같은 정적 리소스를 빠르게 서빙
- 부하 분산 (Load Balancing) : 여러 백엔드 애플리케이션 서버로 요청을 분산
- 보안 (Security) : SSL/TLS 인증서 관리, HTTP 헤더 제어, 방화벽 연동
- 캐싱 (Caching) : 자주 요청되는 리소스를 메모리나 디스크에 케시해 응답 속도 개선
- 리버스 프록시(Reverse Proxy) " 내부 서비스들의 진입점으로 서비스 간 직접 노출 방지
웹 서버 없이 어떻게 될까?
- 단일 애플리케이션 서버에 모든 요청이 전달되어 부하와 보안 취약점 증가
- 정적 파일 처리와 SSL 종료 기능을 직접 구현해야하는 번거로움
Nginx란?
2002년 러시아의 이고르 시쇼프가 개발한 오픈소스 웹 서버입니다. 높은 처리량과 낮은 자원 사용량으로 유명하며 Reverse Proxy, Load Balancer, Static File Server 등 다용도로 사용됩니다.
Nginx 주요 특징
- 이벤트 기반 아키텍처
- 비동기 논블로킹 처리로 메모리·CPU 자원을 절약하며 높은 동시성 제공.
- 경량 & 빠른 응답 속도
- 최소 자원으로 최대 처리량 달성.
- 모듈 구조
- HTTP, Mail, Stream 등 다양한 모듈로 확장 가능.
- 풍부한 커뮤니티 생태계
- 다양한 서드파티 모듈 및 문서 지원.
도커 Nginx 설치 및 실행
# Docker 설치 및 버전 확인
docker version
docker info
# 작업 디렉토리 생성
mkdir -p ~/docker/nginx/{conf.d,html}
cd ~/docker/nginx
# nginx 이미지 다운로드
docker pull nginx:latest
# nginx 컨테이너 실행
docker run -d \
--name nginx \
-p 80:80 \
nginx:latest
# 만약 nginx.conf, conf.d 내용을 호스트에서 핸들링 하고 싶다면
docker run -d \
--name nginx \
-p 80:80 \
-v /호스트디렉토리/nginx.conf:/etc/nginx/nginx.conf:ro \
-v /호스트디렉토리/nginx/conf.d:/etc/nginx/conf.d:ro \
# 실행확인
docker ps
curl -I http://localhost
# ➜ HTTP/1.1 200 OK
# 기본 설정 파일 구조
/etc/nginx
├── nginx.conf # 메인 설정
├── mime.types # MIME 타입 매핑
└── conf.d
└── default.conf # 기본 서버 블록