다양한 기능을 제공하는 모듈로 구성. 모듈을 활성하하거나 비활성화해 서버의 기능을 확장하거나 맞춤 설정 가능.
2. '.htaccess' 파일
서버의 전체 구성을 변경하지 않고 디렉토리에 대한 설정 조정 가능
3. 다양한 운영체제 지원
Windows, Linux, Unix, macOS 등 다양한 운영체제에서 실행 가능
4. 확장성 및 유연성
다양한 요구 사항과 환경에 맞게 확장 가능
<단점>
1. 높은 동시 접속 상황에서 성능 문제
Apache는 각각의 클라이언트 요청에 대해 별도의 프로세스나 스레드를 생성해 동시 접속 수가 많아지면 메모리와 CPU 자원을 많이 소모함.
2. '.htaccess'
'.htaccess' 파일은 유연한 구성을 제공한다는 장점이 있지만 서버가 매 요청마다 파일을 확인해야 하기 때문에 파일 시스템이 크거나 복잡한 경우 성능 저하를 일으킬 수 있음.
3. 동적 컨텐츠 처리
Apache는 동적 컨텐츠 요청이 들어오면 새로운 프로세스나 스레드를 생성하거나 기존의 것을 재사용하여 스크립트 실행. -> 서버의 자원을 상대적으로 많이 사용.
동적 컨텐츠 제공 자체는 효과적일 수 있지만 고성능이 요구되는 환경에서는 성능 저하의 원인이 될 수 있음.
Nginx
고성능, 고확장성, 저자원 사용 웹서버
<장점>
1. 이벤트 기반 아키텍쳐
Nginx는 비동기적 이벤트 기반 모델 사용.
각 요청을 별도의 프로세스나 스레드로 처리하지 않고 소수의 스레드에서 여러 연결을 비동기적으로 처리.
높은 동시 접속 처리 능력 제공
2. 리버스 프록시 및 로드 밸런싱
내장된 리버스 프록시 기능, 로드 밸런싱 기능 제공
3. 캐싱 및 컨텐츠 최적화
http 캐싱 제공, 자주 요청되는 컨텐츠를 메모리에 캐시해 빠르게 제공할 수 있음.
정적 파일 처리에 최적화.
4. 구성의 간결성
구성 파일이 간결하고 이해하기 쉬워 성능 최적화와 특정 요구 사항에 맞추기 쉬움.
<단점>
1. 동적 컨텐츠 처리
Nginx 자체적으로 동적 컨텐츠를 처리하지 않아 동적 컨텐츠 처리를 위해 외부 프로세서와의 연동이 필요
2. 모듈 시스템
Nginx의 모듈은 컴파일 시에 포함. → 런타임에 모듈을 추가하거나 제거하는 것이 불가능.
3. 파일 기반의 캐싱
대용량 캐시 관리에서 파일 시스템의 성능에 영향을 받을 수 있고, 캐시 무효화와 관리가 복잡할 수 있음.
Nginx VS Apache
<주요 차이점>
1. 아키텍쳐
Nginx : 이벤트 기반, 비동기적 아키텍처 사용.
Apache : 다양한 멀티 프로세싱 모듈 사용.
2. 성능
Nginx : 정적 컨텐츠 제공, 대량의 동시 연결 처리
Apache : 다양한 종류의 요청 처리. 높은 동시 접속 상황에서는 성능 저하.
3. 구성
Nginx : 간결하고 직관적.
Apache : 세밀한 디렉토리 구성 가능
4. 컨텐츠 처리
Nginx: 정적 컨텐츠 빠른 처리. 리버스 프록시와 로드 밸런서로서의 역할에 적합.
Apache : 다양한 동적 컨텐츠 처리. 복잡한 프로그래밍 환경과의 통합에 강점.
Nginx 사용 권장 환경
높은 동시 접속이나 트래픽이 발생하는 웹사이트
정적 컨텐츠를 주로 제공하는 웹사이트
로드 밸런싱, 리버스 프록시, 캐싱이 중요한 환경
간결하고 중앙집중화된 구성을 선호하는 경우
Apache 사용 권장 환경
'htaccess' 파일을 사용한 디렉토리 수준의 세밀한 구성이 필요한 경우
다양한 동적 컨텐츠와 복잡한 웹 애플리케이션을 호스팅하는 경우
맞춤형 구성과 모듈이 중요한 경우
호스팅 환경에서 널리 지원되고 있어, 설정과 관리에 대한 정보가 풍부한 경우
서버의 선택은 프로젝트의 요구 사항, 기술적인 요구, 선호도에 따라 달라질 수 있으며 Nginx와 Apache를 함께 사용하는 접근 방식을 취하는 것도 하나의 옵션이다.
예를 들어, Nginx를 정적 컨텐츠와 리버스 프록시로 사용하고, Apache를 동적 컨텐츠 처리에 사용해 두 시스템의 장점을 모두 활용할 수 있다.