Apache HTTP Server: 개요 및 상세 설명
1. Apache HTTP Server란?
**Apache HTTP Server(이하 Apache)**는 세계에서 가장 널리 사용되는 웹 서버 소프트웨어 중 하나다. **Apache Software Foundation(ASF)**에서 개발 및 유지보수하며, 오픈 소스이며 무료로 제공된다.
주요 특징
• 다양한 운영 체제 지원: Windows, Linux, macOS 등에서 실행 가능.
• 모듈 기반 아키텍처: 필요에 따라 기능을 추가하거나 제거 가능.
• 가상 호스팅(Virtual Hosting) 지원: 하나의 서버에서 여러 웹사이트 운영 가능.
• 보안 기능 제공: SSL/TLS 지원, 접근 제어, 인증 기능 제공.
• 고성능 및 확장성: 다양한 트래픽 관리 기능과 로드 밸런싱 지원.
• 강력한 커뮤니티 지원: 오픈 소스로 개발되어 전 세계 개발자들이 지속적으로 기여.
2. Apache의 역사 및 발전
• 1995년: NCSA HTTPd(초기 웹 서버)를 기반으로 첫 번째 Apache 버전 출시.
• 1999년: Apache Software Foundation 설립.
• 2000년대 이후: 다양한 모듈 추가 및 성능 최적화 진행.
• 현재: Apache 2.x 버전이 주로 사용되며, 현대적인 웹 애플리케이션과 연동 가능.
3. Apache의 주요 기능 및 구성 요소
3.1 모듈 기반 아키텍처
Apache는 기본적으로 가벼운 상태에서 동작하며, 모듈을 추가하여 기능을 확장할 수 있다.
주요 모듈
모듈 |
기능 |
---|---|
mod_ssl |
SSL/TLS 암호화 지원 |
mod_rewrite |
URL 리다이렉트 및 변환 기능 |
mod_proxy |
프록시 및 로드 밸런싱 기능 |
mod_deflate |
콘텐츠 압축(Gzip) |
mod_headers |
HTTP 헤더 조작 |
mod_auth_basic |
기본 인증 제공 |
mod_dir |
기본 인덱스 파일(index.html 등) 처리 |
3.2 프로세스 처리 방식
Apache는 **3가지 멀티 프로세싱 모듈(MPM, Multi-Processing Module)**을 제공한다.
MPM 모드 |
특징 |
---|---|
prefork |
각 요청을 별도의 프로세스로 처리 (안정적이지만 메모리 사용량 증가) |
worker |
스레드 기반 처리 (경량화, 동시 요청 처리량 증가) |
event |
worker 기반이지만 Keep-Alive 연결을 최적화하여 성능 향상 |
3.3 가상 호스팅 (Virtual Hosting)
Apache는 하나의 서버에서 여러 개의 웹사이트를 운영할 수 있다.
예제: 도메인 기반 가상 호스팅
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/example
ErrorLog ${APACHE_LOG_DIR}/example_error.log
CustomLog ${APACHE_LOG_DIR}/example_access.log combined
</VirtualHost>
• ServerName example.com: 특정 도메인 요청 처리.
• DocumentRoot: 해당 웹사이트의 파일 위치.
• ErrorLog, CustomLog: 개별 웹사이트의 로그 관리.
4. Apache 설치 및 기본 설정
4.1 Linux(Ubuntu)에서 Apache 설치
sudo apt update
sudo apt install apache2 -y
• 설치 후, 웹 서버 상태 확인:
sudo systemctl status apache2
• 브라우저에서 http://localhost 접속하여 Apache 기본 페이지 확인 가능.
4.2 Apache 기본 설정 파일 (httpd.conf)
Apache의 주요 설정은 httpd.conf 파일에서 관리된다.
기본 설정 예제
ServerRoot "/etc/httpd"
Listen 80
DocumentRoot "/var/www/html"
<Directory "/var/www/html">
AllowOverride None
Require all granted
</Directory>
• Listen 80: 웹 서버가 80번 포트에서 요청을 수신.
• DocumentRoot "/var/www/html": 기본 웹사이트 파일 경로.
• <Directory>: 디렉터리 접근 제어 설정.
4.3 방화벽 설정 (UFW)
Apache가 80, 443 포트를 사용할 수 있도록 허용.
sudo ufw allow 'Apache Full'
5. Apache와 다른 웹 서버 비교 (Nginx, LiteSpeed 등)
비교 항목 |
Apache |
Nginx |
LiteSpeed |
---|---|---|---|
처리 방식 |
프로세스/스레드 기반 |
이벤트 기반 |
이벤트 기반 |
정적 콘텐츠 성능 |
보통 |
매우 빠름 |
매우 빠름 |
동적 콘텐츠 성능 |
좋음 |
FastCGI 필요 |
빠름 |
가상 호스팅 |
지원 |
지원 |
지원 |
모듈 확장성 |
매우 뛰어남 |
제한적 |
제한적 |
리버스 프록시 |
mod_proxy 사용 |
기본 제공 |
기본 제공 |
메모리 사용량 |
상대적으로 높음 |
낮음 |
낮음 |
• Apache: 전통적인 웹 서버, 동적 콘텐츠 처리에 강함.
• Nginx: 정적 콘텐츠 처리 속도가 빠르고, 리버스 프록시 성능이 우수.
• LiteSpeed: Apache의 장점을 유지하면서 가볍고 빠른 웹 서버.
6. 보안 및 성능 최적화
6.1 보안 강화
1. 디렉터리 목록 비활성화 (httpd.conf 수정)
Options -Indexes
2. Apache 버전 숨기기 (httpd.conf 수정)
ServerTokens Prod
ServerSignature Off
3. SSL/TLS 활성화 (HTTPS 설정)
sudo a2enmod ssl
sudo systemctl restart apache2
6.2 성능 최적화
1. Gzip 압축 활성화 (mod_deflate 사용)
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml
</IfModule>
2. KeepAlive 활성화 (httpd.conf 수정)
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
3. 캐시 설정 (mod_expires 사용)
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType text/css "access plus 1 week"
ExpiresByType image/jpeg "access plus 1 month"
</IfModule>
7. 결론
• Apache는 가장 널리 사용되는 웹 서버 중 하나로, 오픈 소스이며 다양한 기능과 확장성을 제공한다.
• 모듈 기반 아키텍처 덕분에 사용자 요구에 맞춰 쉽게 확장 가능하며, 보안 및 성능 최적화도 가능하다.
• Nginx, LiteSpeed 같은 경쟁 웹 서버와 비교하면 정적 콘텐츠 처리 성능은 다소 떨어지지만, PHP 및 기타 동적 콘텐츠 처리에서는 여전히 강력한 성능을 보인다.
• 기업용 웹사이트부터 개인 블로그까지 다양한 용도로 활용 가능하며, 현재도 꾸준히 업데이트되고 있다.