개발자공부일기
Apache와 Nginx 본문
Apache HTTP Server
1. 개요
Apache는 1995년에 처음 출시된 오픈 소스 웹 서버로, 현재도 PHP 기반 웹사이트와 전통적인 웹 애플리케이션에서 널리 사용되고 있다.
가장 큰 특징은 모듈화 시스템과 유연한 설정이다.
2. 주요 특징
- 멀티 프로세스/멀티 스레드 기반 구조
- MPM (Multi-Processing Module)을 사용하여 요청을 처리
- prefork, worker, event 등 다양한 처리 방식을 선택 가능
- .htaccess 지원
- 개별 디렉터리마다 설정을 변경할 수 있는 유연한 구조
- 공유 호스팅 환경에서 개별 사용자가 설정 변경 가능
- 모듈화된 구조
- mod_php, mod_ssl, mod_rewrite 등 다양한 모듈을 추가하여 기능 확장 가능
- 광범위한 호환성
- PHP, Python, Perl, CGI 등의 언어와 원활하게 연동
- 동적 콘텐츠 처리 최적화
- mod_php를 사용하여 PHP를 직접 실행 가능
- PHP 실행 속도가 빠르고 별도의 FastCGI 설정이 필요 없음
3. Apache의 동작 방식
Apache는 MPM (Multi-Processing Module)을 통해 동작 방식을 조정할 수 있다.
MPM 방식 | 특징 | 장점 | 단점 |
prefork | 각 요청을 별도 프로세스로 처리 | 안정성이 높음 | 메모리 사용량이 많음 |
worker | 하나의 프로세스가 여러 개의 스레드를 생성 | 더 적은 리소스로 동작 | PHP 모듈과 충돌 가능성 |
event | 이벤트 기반 처리 (Nginx와 유사) | 동시 연결 처리 성능 향상 | 설정이 복잡할 수 있음 |
4. Apache의 장점과 단점
장점
- .htaccess를 활용한 유연한 설정이 가능
- 다양한 모듈 지원으로 확장성이 높음
- PHP와의 호환성이 뛰어남
- 커뮤니티와 기술 지원이 풍부함
단점
- MPM(prefork) 방식은 메모리 사용량이 많음
- 높은 동시 연결 처리 시 성능 저하 가능
- 정적 콘텐츠 제공 속도가 느림 (Nginx 대비)
Nginx (엔진엑스)
1. 개요
Nginx는 2004년 Igor Sysoev가 만든 고성능, 이벤트 기반 웹 서버이다.
초기에는 정적 콘텐츠 제공 및 리버스 프록시 역할을 위해 개발되었지만, 현재는 애플리케이션 서버, API Gateway 등으로도 널리 사용된다.
2. 주요 특징
- 비동기 이벤트 기반 구조
- 하나의 워커 프로세스가 수천 개의 요청을 동시에 처리
- 낮은 리소스로도 높은 성능 유지
- 정적 콘텐츠 처리 속도 우수
- 이미지, CSS, JS 등의 파일을 빠르게 제공
- CDN(Content Delivery Network)으로 많이 활용됨
- 로드 밸런싱 기능 내장
- 여러 개의 백엔드 서버로 트래픽을 분산 가능
- 리버스 프록시 기능 지원
- 백엔드 애플리케이션(Nginx + Node.js, Nginx + Apache)과 조합 가능
- PHP 및 동적 콘텐츠 처리 방식
- PHP-FPM(FastCGI Process Manager)과 연동하여 PHP 실행
- 웹 서버와 PHP 실행 환경을 분리하여 보안 및 성능 향상
3. Nginx의 동작 방식
Nginx는 비동기 이벤트 기반 처리 방식을 사용한다.
- 하나의 마스터 프로세스가 여러 개의 워커 프로세스를 관리
- 워커 프로세스는 이벤트 루프를 사용하여 다수의 요청을 동시에 처리
Apache와 다르게, 각 요청마다 새로운 프로세스를 생성하지 않기 때문에
고성능을 유지하면서도 낮은 메모리 사용량을 보장한다.
4. Nginx의 장점과 단점
장점
- 높은 동시 연결 처리 가능 (비동기 이벤트 기반 구조)
- 정적 콘텐츠 처리 속도가 빠름
- 로드 밸런싱 및 리버스 프록시 기능 제공
- 적은 리소스로도 높은 성능 유지
단점
- .htaccess 지원하지 않음 (서버 전체 설정 필요)
- PHP를 직접 실행하지 못함 (PHP-FPM 필요)
- 설정이 Apache보다 다소 복잡
Apache vs. Nginx 비교
비교 항목 | Apache | Nginx |
아키텍처 | 프로세스/스레드 기반 | 이벤트 기반 (비동기) |
처리 방식 | 요청마다 새로운 프로세스/스레드 생성 | 하나의 워커 프로세스가 여러 요청을 처리 |
성능 | 동적 콘텐츠 처리에 강점 | 정적 콘텐츠 처리 속도가 빠름 |
메모리 사용량 | 다중 프로세스로 인해 많음 | 적은 리소스로 높은 동시성 유지 |
PHP 처리 방식 | mod_php로 직접 실행 가능 | PHP-FPM 사용 필요 |
로드 밸런싱 | 기본 제공되지 않음 (모듈 필요) | 기본 제공됨 |
설정 파일 | .htaccess 지원 | .htaccess 미지원 |
사용 사례 | PHP 기반 웹사이트, 전통적인 웹 애플리케이션 | CDN, 리버스 프록시, 대규모 트래픽 사이트 |
그래서 언제 Apache를, 언제 Nginx를 선택해야 할까?
Apache가 적합한 경우
- .htaccess를 이용한 개별 설정이 필요한 경우
- PHP 기반 CMS (WordPress, Drupal, Joomla 등)를 사용할 경우
- 기존에 Apache 환경이 잘 구축되어 있는 경우
Nginx가 적합한 경우
- 정적 콘텐츠가 많은 사이트 (CDN, 이미지 서버 등)
- 높은 트래픽을 처리해야 하는 경우
- 리버스 프록시 또는 로드 밸런서를 구축할 경우
Apache + Nginx 조합
- Nginx → 프론트엔드 (정적 콘텐츠 처리, 리버스 프록시 역할)
- Apache → 백엔드 (동적 콘텐츠 처리)
'TIL(Today I Learned)' 카테고리의 다른 글
크리티컬 섹션 (0) | 2025.03.11 |
---|---|
좋은 코드 (0) | 2025.02.11 |
빅 엔디안 & 리틀 엔디안 (0) | 2025.02.03 |
패킷에 헤더 붙여서 전송하기 (0) | 2025.01.24 |
oneof (0) | 2025.01.22 |