728x90
반응형
📚Apache HTTP Server
Apache Software Foundation에서 만든 웹 서버 프로그램으로 거의 모든 OS에서 실행되며 Reference가 잘되어있다.
⭐주요특징
1. 스레스/ 프로세스 기반 구조
- 클라이언트 요청 건당 하나의 스레드 처리 구조 ( 1:1 )
- 1:1 구조로 사용자가 많다면 스레드 생성, 메모리, Cpu 낭비가 심함
2. MPM (Multi-Process Modeule)방식
2-1. PreFork MPM 방식(다중 프로세스)
- Client 요청은 Apache 자식 프로세스 생성 및 처리 진행
- 다중 요청에 따른 Process를 생성 처리 ( default설정 )
- 하나의 자식 프로세스는 하나의 스레드 구조이며 자식 프로세스는 최대 1024개 까지 가능
- 스레드 간 메모리 공유 X ( 독립적이라 안정적이지만 메모리 소비가 큼 )
- 실행중인 프로세스 복제 ( 메모리 영역포함)
- 응답 프로세스를 선 호출 후 클라이언트 요청 시 자식 프로세스 반응 방식
- 쉬운 디버깅 가능
- Single & Dual CPU에서 성능이 좋음
2-2. Worker MPM 방식(멀티 프로세스-스레드)
- Prefork보다 메모리 사용량 ⬇️, 동시 접속자 ⬆️ 적합(각 프로세스의 스레드를 생성하여 처리 구조)
- 스레드 간의 메모리 공유 🙆
- 프로세스당 최대 64개 스레드 처리 🙆, 각 스레드는 하나의 연결만 받음
- Multi Cpu시스템에서 성능이 좋음
3. 동적 컨텐츠 처리
4. 다양한 모듈
⭐단점
- 클라이언트 접속시마다 프로세스 & 스레드 생성 구조로 인한 동시접속시
CPU/메모리 사용⬆️ 프로세스/스레드 생성비⬆️
- Apache 서버의 프로세스가 blocking되면 요청 처리 ❌, 처리완료시 까지 대기 진행
- Keep Alive(접속 대기)를 통해 해결이 가능하지만 대량접속시 효율이 떨어짐
📚NginX
Apache의 C10K 문제점 해결을 위한 Event-Driven구조의 웹 서버 SoftWare
* 용어정리 : C10K : 한 시스템에 동시 접속자 수가 1만명 이상일때 발생하는 문제
⭐주요특징
1. Event-Driven처리 기반 구조
- 한개 또는 고정된 프로세스만 생성, 여러개의 Connection을 모두 Event-Handler를 통한 비동기 방식 처리
- 적은 양의 스레드만 사용으로 Context Swiching 비용⬇️, Cpu소모 ⬇️
- Apache와 달리 동시 접속자 수가 ⬆️ 추가적인 생성비❌
- Cpu와 관계없이 모든 I/O를 전부 Event Listener로 미루기 때문에 흐림이 끊기지 않고 응답이 빠름
1개의 프로세스로 더 빠른 작업 가능 ( 메모리 사용 ⬇️)
* 용어정리 : Context Swiching
- Context : 스레드 작업 진행동안 작업정보 보관( 레지스터, 커널스택, 사용자 스택등)
- OS가 A작업시 A스레드 Context를 읽어오고 B스레드로 전환시 A스레드의 Context를 저장
및 B스레드의 Context를 읽어오는 반복수행구조
- 스레드의 갯수가 많아질 수록 Context Swiching 작업은 더 빈번하게 일어남!!!! 이로인한 성능 저하 발생 가능
2. 리버스 프록시로 배치 가능
- NginX의 빠른 처리 속도를 활용하여 클라이언트의 모든 요청을 처리 가능
⭐단점
- 동적 컨텐츠를 기본적 처리 불가
외부 프로세서로 전달 후 렌더링 된 컨텐츠를 다시 전송할때 까지 대기(프로세스 속도 저하)
- Apache에 비해 모듈이 적음
⭐정리
Apache | NginX |
1:1 구조 (요청 별 스레드, 프로세스가 처리 구조 |
비동기 이벤트 기반으로 요청 |
CPU/메모리 자원 낭비 ⬆️ | CPU/메모리 자원 사용률 ⬇️ |
NginX보다 모듈이 다양 ↔ | Apache에 비해 다양한 모듈이 ❌ |
PHP 모듈 등 직접 적재 🙆 | 많은 접속자들 대응 🙆 |
안정성, 확장성, 호환성 ⬆️ | 성능 ⬆️ |
동적 컨텐츠 단독 처리 🙆 | 동적 컨텐츠 단독 처리 불❌ |
⭐결론
Apache와 NginX모두 오픈소스 기반의 강력한 웹서버 프로그램입니다.
Apache는 기존에 많은 방대한 레퍼런스와 안정성을 기반으로 하지만 다중접속에 대해서는
NginX에 비해 부족한 부분이 있습니다. 이처럼 각각의 서로 장점이 있기때문에 프로젝트에
성격에 따라 구별해서 사용하는 것이 맞을것 같으며 기존 프로젝트시에는 Apache tomcat구조이기 때문에
이것만 사용하였지만 NginX를 통한 웹서버를 구성해 보는것도 대용량 서비스에 대응할수 있을것 같습니다.
Ref. https://velog.io/@deannn/Apache%EC%99%80-NginX-%EB%B9%84%EA%B5%90-%EC%B0%A8%EC%9D%B4%EC%A0%90
Ref. https://rootkey.tistory.com/143
728x90
반응형
'💛03_Server & OS > 02_Apache Tomcat' 카테고리의 다른 글
#MOD_SECURITY (0) | 2024.03.11 |
---|---|
#아파치 #톰캣 #아피치!=톰캣 #WebServer #웹서버 #Was(WebApplicationServer) #와스 (1) | 2024.02.01 |
#Tomcat #server.xml #autoDeploy #reloadable #Jenkins배포오류 #tomcat설정 (0) | 2023.04.11 |
댓글