사용해보았던 많은 프레임워크에서 자동으로 웹서버 설정을 해주기 때문에 Apache, Nginx등 써본적도 잘 알지도 못했다.
Nginx란?
•
웹 서버(Web Server)
◦
클라이언트의 요청을 받아 정적 파일(HTML, CSS, JS, 이미지 등)을 제공
•
리버스 프록시(Reverse Proxy)
◦
클라이언트 요청을 다른 서버로 전달하여 응답을 중개
•
로드 밸런서(Load Balancer)
◦
여러 대의 서버로 트래픽을 분산하여 부하를 낮춤
•
HTTP 캐시(Cache Server)
◦
자주 요청되는 데이터를 캐싱하여 성능 향상
•
기존 Apache 서버보다 가볍고 빠름
•
비동기 이벤트 기반 구조로 동시 연결(Concurrent Connection) 처리에 강점
•
다양한 기능을 플러그인처럼 추가 가능
웹 서버의 역사와 발전
1.
Apache 서버의 등장 (1995년)
•
기존 웹 서버의 버그 수정 및 기능 확장을 위해 Apache HTTP Server가 등장
•
구조적으로 요청이 들어오면 새로운 프로세스를 생성하는 방식(preforking)
•
다양한 모듈 추가 가능하여 확장성이 뛰어남
•
하지만 동시 요청이 많아지면 CPU와 메모리 사용량 급증 → 성능 저하 발생
◦
더 많은 프로세스를 생성하고 관리해야하기 때문
2.
C10K 문제 발생 (2000년대)
•
인터넷 트래픽 증가로 동시 연결 수가 급격히 증가
•
Apache 구조의 한계(동시 커넥션 증가 시 성능 저하)
•
새로운 방식의 웹 서버 필요성이 대두
3.
Nginx 등장 (2004년)
•
기존 웹 서버의 한계를 해결하기 위해 이벤트 기반(Event-driven) 아키텍처 도입
•
가벼운 구조, 빠른 응답 속도, 뛰어난 동시 연결 처리 성능 제공
•
대규모 트래픽을 처리하는 대형 기업(Netflix, Instagram, Airbnb, Github 등)에서 빠르게 채택.
Apache vs Nginx
특징 | Apache | Nginx |
처리 방식 | 프로세스 기반 (preforking) | 이벤트 기반 (Event-driven) |
동시 연결 처리 | 다중 프로세스 생성으로 메모리 부담 있음 | 비동기 방식으로 리소스 사용 효율적 |
확장성 | 다양한 모듈 추가 가능 | 설정 변경이 쉽고 유연 |
성능 | 동적 콘텐츠 처리에 강점 | 정적 콘텐츠 및 트래픽 분산에 강점 |
대표 사용 사례 | 기존 레거시 웹 애플리케이션, 안정성 중요 서비스 | 실시간 데이터 처리, 대규모 트래픽 환경 |
•
Apache는 전통적인 방식으로 다양한 기능을 쉽게 추가 가능하지만, 동시 연결이 많아질수록 성능 저하
•
Nginx는 이벤트 기반 아키텍처로 동시 연결이 많은 환경에서 뛰어난 성능 제공
•
두 서버는 대체 관계라기보다 각자의 장점이 있어 상황에 맞게 선택하는 것이 중요
Nginx의 핵심 기능
1.
이벤트 기반 구조
•
Apache의 프로세스 기반 모델과 달리, 하나의 프로세스 내에서 비동기 이벤트 방식으로 요청 처리
•
CPU 컨텍스트 스위칭을 최소화하여 동시 연결 수가 증가해도 안정적인 성능 유지
2.
리버스 프록시 & 로드 밸런서
•
Nginx가 클라이언트 요청을 대신 받아 백엔드 서버에 전달
•
여러 개의 서버에 요청을 분산하여 트래픽 부하 감소
3.
SSL 터미네이션
•
Nginx가 SSL/TLS 복호화를 담당하여 백엔드 서버의 기능 개발 및 성능 부담 완화
4.
HTTP 캐싱
•
자주 요청되는 정적 리소스를 캐싱하여 서버 부하 감소 및 응답 속도 향상
5.
동적 설정 변경 가능
•
서버를 재시작하지 않고도 설정을 변경할 수 있어 운영 관리가 유연
Nginx의 성장과 현재
•
2008년 스마트폰 보급 이후 웹 트래픽 급증 → 동시 연결 문제 해결을 위한 Nginx 수요 증가
•
2021년 기준 전 세계 웹 서버 점유율 1위
•
대규모 트래픽을 처리하는 클라우드 서비스, CDN, 스트리밍 플랫폼에서 널리 사용
•
물론 아파치도 MPMs(Multi Processing Module)를 활용하여 Prefork / Workers 방식 도입
•
성능테스트 결과를 보면 동시 커넥션대비 메모리 사용량 및 초당 처리수에서 Nginx가 Apache를 월등히 앞섬
ref: dreamhost.com
ref: dreamhost.com
Apache 서버가 1등을 할 때에는 안정성과 확장성이 무엇보다 중요했고,
현재 Nginx는 동시 커넥션 문제가 대두되면서 필요한 상황이라고 한다.
공부를 하면 할 수록 어떤 기술이 최고다 라는 것 보다, 서비스 상황에 맞게 구현방향성을 잡아 나가는 게 중요하다는 생각이 든다.
물론 많이 알아야겠지….. 공부 많이 해야겠지….
다음엔 직접 하나씩 셋팅을 해보는 방향으로 공부한 내용을 적용해보아야겠다!