Apache와 Nginx 모두 웹개발의 필수적인 웹서버이다.
Apache
- 국내는 물론 전세계적으로 부동의 1위를 지키고 있는 웹서버
- Process 기반 방식으로 클라이언트의 요청을 처리
- 요청에 따라 프로세스 또는 쓰레드를 생성하는 구조이므로 클라이언트의 요청이 많아질수록 Context Switching이 많아지면서 오버헤드 문제 발생
- 다양한 모듈 제공 (MPM : Multi Processing Module)
- 보안성 & 확장성 좋음
Nginx
- 웹의 발전에 따라 트래픽이 많아지면서 Apache의 한계를 극복하기 위해 탄생한 웹서버
- Event-driven 구조로 클라이언트 요청 병렬 처리를 진행 → 동시 커넥션 양 & 속도 대폭 향상
- Master Process가 있고 설정에 맞게 Worker process를 생성
- 이벤트 : 커넥션 형성/제거, 새로운 요청 처리하는걸 의미
- 이벤트들은 OS커널이 Queue형식으로 Worker process에게 전달하고 처리될때까지 비동기방식으로 대기
- Worker process는 하나의 Thread로 이벤트를 처리해나감
- Worker process가 쉬지않고 계속해서 일함 → 서버 자원 효율적으로 사용
- 만약 시간이 오래걸리는 작업이 있다면 Thread Pool에게 해당일을 위임하고 큐안의 다른 일을 처리
- Worker process는 보통 CPU의 코어 개수만큼 생성 → CPU의 Context Switch를 대폭 감소
- 로드 밸런서 역할 → 요청을 여러서버로 분산
- SSL 터미네이션 수행 → 클라이언트와는 HTTPS통신을 하고 서버와는 HTTP 통신을 함
- 개발자가 직접 모듈 개발하기 까다로움
- Worker process가 종료되면 해당 worker가 담당하고 있던 일들이 다 없어짐
추가
두 웹서버는 애초에 만들어진 목적이 다르다. Apache 서버가 압도적이 1위를 달리고 있을때는 안정성&확장성이 중요할때였고, Nginx가 치고 올라올때는 동시커넥션이 중요한 때였다.
'Develop' 카테고리의 다른 글
[보안] SSL (Secure Socket Layer) 동작방식 (0) | 2021.11.06 |
---|
댓글