728x90
Apache
- 거의 모든 OS에서 실행되고, 다른 유명한 소프트웨어 프로젝트와의 문서화가 잘 되어 있고 통합 지원 등이 이점
- 클라이언트 요청 당 하나의 스레드가 처리하는 구조로, 사용자가 많으면 스레드 생성, 메모리 및 CPU 낭비
- 특징: 동적 콘텐츠 처리, 다양한 모듈, 스레드 / 프로세스 기반 구조
- 스레드: 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위
- 웹서버는 MPM(Multi-Processing Modules, 다중 처리 모듈)을 사용하여 클라이언트로부터 받은 요청을 처리
- 아파치 HTTP 서버
- 하나의 자식 프로세스 당 하나의 스레드를 갖는 구조 (자식 프로세스 최대 1024개)
- 스레드 간 메모리 공유 하지 않음
- 독립적이기에 안정적인 반면, 메모리 소모가 큼
- 실행 중인 프로세스를 복제해 실행 (메모리 영역까지 복제)
- 응답 프로세스를 미리 띄워 놓고 클라이언트 요청 시, 자식 프로세스가 반응하는 방식
- 디버깅이 빈약한 플랫폼에서 쉬운 디버깅 가능
- 일반적으로 Single CPU 또는 Dual CPU에서 성능이 좋음
- MPM 방식: PreFork / Worker
- PreFork MPM (다중 프로세스)
- 클라이언트 요청에 대해 아파치 자식 프로세스를 생성해 처리
- 요청이 많을 경우, 프로세스를 생성해 처리
- 아파치 설치 시 기본으로 설정
- 아파치 HTTP 서버
- 하나의 자식 프로세스 당 하나의 스레드를 갖는 구조 (자식 프로세스 최대 1024개)
- 스레드 간 메모리 공유 하지 않음
- 독립적이기에 안정적인 반면, 메모리 소모가 큼
- 실행 중인 프로세스를 복제해 실행 (메모리 영역까지 복제)
- 응답 프로세스를 미리 띄워 놓고 클라이언트 요청 시, 자식 프로세스가 반응하는 방식
- 디버깅이 빈약한 플랫폼에서 쉬운 디버깅 가능
- 일반적으로 Single CPU 또는 Dual CPU에서 성능이 좋음
- ** CPU (중앙 처리 장치): 컴퓨터 시스템을 통제하고 프로그램의 연산을 실행 · 처리하는 가장 핵심적인 컴퓨터의 제어 장치
- Worker MPM (멀티 프로세스-스레드)
- PreFork보다 메모리 사용량이 적고, 동시 접속자가 많은 사이트에 적합
- 각 프로세스의 스레드를 생성해 처리하는 구조
- 스레드 간의 메모리 공유 가능
- 아파치 HTTP 서버
- 프로세스 당 최대 64개의 스레드 처리 가능 / 각 스레드는 하나의 연결만을 부여받음
- 일반적으로 Multi CPU 시스템에서 성능이 좋음
- 단점: 클라이언츠 접속 시, 프로세스 또는 스레드를 생성하는 구조이기에 대량의 클라이언트(1만 이상)가 동시 접속한다면 CPU/메모리 사용이 증가하고 프로세스/스레드 생성 비용이 드는 등, 요청에 한계 존재
- PreFork MPM (다중 프로세스)
Nginx
- 아파치의 C10K 문제점 해결을 위해 만들어진 Event-Driven 구조의 웹 서버 소프트웨어** C10K: (1만 개의 클라이언트 문제) 한 시스템에 동시 접속자 수가 1만 명이 넘어갈 때 효율적 방안
>> 프로그램의 흐름이 이벤트에 의해 결정되는 방식
- 특징: Event-Driven 처리 기반 구조
- 한 개 또는 고정된 프로세스만 생성하고, 여러 개의 커넥션을 모두 Event-Handler를 통해 비동기 방식으로 처리
- 적은 양의 스레드만 사용되기 때문에 Context Swiching 비용이 적고, CPU 소모가 적음Context: 스레드가 작업을 진행하는 동안 작업정보(레지스터, 커널스택, 사용자스택) 보관스레드의 개수가 많아질수록 Context Swiching 작업은 더 빈번하게 일어나고, 이 때문에 성능 저하
- OS가 A작업을 진행할 때, A스레드의 Context를 읽어오며, B스레드로 전환할 때 A스레드의 Context를 저장하고 B스레드의 Context응 읽어오는 일련의 반복을 수행
- ** Context Swiching
- 동시 접속자 수가 많아져도 추가적인 생성 비용이 들지 않음
- CPU와 관계없이 모든 I/O들을 전부 Event Listner로 미루기 때문에 흐름이 끊기지 않고 응답이 빠르게 진행되어 1개의 프로세스로 더 빠른 작업 가능 > 메모리를 적게 사용
- 리버스 프록시로 배치 가능: Nginx의 빠른 처리 속도를 활용하여 클라이언트의 모든 요청을 처리
- ** 리버스 프록시: 클라이언트와 웹 서버 간의 중개자 역할을 하는 서버로, 클라이언트로부터의 요청을 대신 받아 웹 서버에 전달하고, 웹 서버의 응답을 클라이언트에게 전달하는 역할
- 단점
- 동적 콘텐츠 처리 불가능
- 외부 프로세서로 전달하고 렌더링된 콘텐츠를 다시 전송할 때까지 기다려야 함 (프로세스 속도 저하)
- 아파치에 비해 다양한 모듈이 없음
'Web Server' 카테고리의 다른 글
CentOS8에서 NginX를 이용해 NFS 서버 구축 (0) | 2024.01.31 |
---|---|
CentOS8에서 NginX 네임서버 DNS와 부하분산 설정 (2) (0) | 2024.01.30 |
CentOS8에서 NginX 네임서버 DNS와 부하분산 설정 (1) (0) | 2024.01.28 |
CentOS8에서 기본적인 NginX 설치 방법 (0) | 2024.01.28 |
정적 웹 페이지와 동적 웹 페이지란? (1) | 2023.12.06 |