💡 이번에 공부할 내용은 다음과 같습니다.
1. 아파치 웹 서버의 개념
2. 아파치의 기본 구조와 모듈
3. 아파치의 주요 설정 파일
4. .htaccess 파일의 사용법
5. 아파치 성능 튜닝의 기초
1. 아파치 웹 서버의 개념
아파치 웹 서버(Apache HTTP Server)는 오픈 소스 기반의 웹 서버 소프트웨어로, HTTP 및 HTTPS 프로토콜을 통해 클라이언트(웹 브라우저)의 요청을 처리하고 응답을 제공합니다. 전 세계적으로 가장 널리 사용되는 웹 서버 소프트웨어 중 하나입니다. 다양한 운영 체제에서 실행할 수 있으며, 모듈식 구조로 확장성이 뛰어납니다.
- 주요 기능: 정적 콘텐츠(HTML, CSS, 이미지 등) 제공, 요청 프록시, SSL 지원.
- 확장 가능성: 모듈을 통해 기능을 추가하거나 비활성화 가능.
- 사용 사례: 개인 웹 사이트, 중소기업 서버, 대규모 애플리케이션의 프론트엔드.
기본적으로 아파치는 요청을 받아 정적 컨텐츠를 제공하거나, 다른 애플리케이션 서버로 요청을 전달하는 역할을 합니다. .htaccess 파일을 통해 서버 설정을 디렉터리 단위로 관리할 수 있습니다.
윈도우나 맥 환경에서 실습해봐도 좋으나, 결과적으로 리눅스 환경에서 운용되는 서버를 만들 예정이니 앞으로 실습은 리눅스에서 하는 것을 추천드립니다.
2. 아파치의 기본 구조와 모듈
- httpd.conf: 아파치의 주 설정 파일로, 서버의 전반적인 설정을 담당합니다.
- mod_ssl: SSL/TLS 지원을 위한 모듈로, 안전한 데이터 전송을 가능하게 합니다.
- mod_rewrite: URL을 재작성하는 데 사용되는 모듈로, SEO에 유리한 URL 구조를 만들 수 있습니다.
기본 구조
- 멀티 프로세싱 모듈(MPM): 서버의 병렬 처리 방식 결정.
- prefork: 각 요청을 별도 프로세스로 처리 (메모리 사용↑, 안정성↑).
- worker: 각 요청을 스레드로 처리 (효율성↑, 리소스↓).
- event: 비동기 방식, 고성능 트래픽 처리에 적합.
- 핵심 모듈: HTTP 프로토콜과 요청/응답 처리.
- 추가 모듈: SSL 지원(mod_ssl), URL 리라이트(mod_rewrite), 인증(mod_auth) 등.
주요 모듈
- mod_proxy: 리버스 프록시와 로드 밸런싱 기능.
- mod_rewrite: URL 리라이트와 리다이렉션.
- mod_ssl: HTTPS를 위한 SSL/TLS 지원.
3. 아파치의 주요 설정 파일
- DocumentRoot: 웹 서버의 루트 디렉터리를 지정합니다.
- DirectoryIndex: 디렉터리에 접근했을 때 보여줄 기본 파일을 설정합니다.
- .htaccess: 디렉터리 수준에서 서버 설정을 오버라이드할 수 있는 파일입니다. 리디렉션, 인증 관련 설정 등을 할 수 있습니다.
설정 파일의 주요 위치
- CentOS/Red Hat: /etc/httpd/conf/httpd.conf
- Ubuntu/Debian: /etc/apache2/apache2.conf
주요 설정 파일
- httpd.conf: 메인 설정 파일. 서버 이름, 포트, 모듈 로드 등 정의.
- extra/ 폴더: 추가 설정 파일 (로그, SSL, 가상 호스트 설정).
- sites-available/와 sites-enabled/ (Ubuntu): 가상 호스트 설정.
4. .htaccess 파일의 사용법
.htaccess 파일이란?
.htaccess 파일은 아파치 웹 서버에서 디렉터리 수준의 설정을 변경할 수 있도록 지원하는 구성 파일입니다. 특정 디렉터리와 그 하위 디렉터리에 대한 서버 동작을 제어할 수 있는 강력한 도구로, 웹 애플리케이션의 동작을 세부적으로 제어할 수 있습니다.
.htaccess 파일 활성화
.htaccess 파일을 사용하려면 아파치 설정에서 AllowOverride 지시어를 활성화해야 합니다. 기본적으로, .htaccess 파일의 설정은 아파치의 주요 설정 파일(httpd.conf 또는 apache2.conf)에서 정의된 AllowOverride 지시어에 따라 제한될 수 있습니다.
활성화 방법
1. 아파치 설정 파일 편집:
- AllowOverride All: .htaccess에서 모든 설정을 허용.
- AllowOverride None: .htaccess 비활성화.
<Directory /var/www/html> AllowOverride All </Directory>
2.아파치 서버 재시작:
sudo systemctl restart apache2
주요 사용 사례
- URL 리라이트:
RewriteEngine On RewriteRule ^oldpage\.html$ newpage.html [L]
- 디렉터리 접근 제어:
AuthType Basic AuthName "Restricted Access" AuthUserFile /path/to/.htpasswd Require valid-user
- 캐싱 정책 설정:
<FilesMatch "\.(jpg|jpeg|png|gif|ico|css|js)$"> ExpiresDefault "access plus 1 week" </FilesMatch>
주의 사항
- .htaccess 사용을 활성화하려면, AllowOverride 지시어 설정 필요:
AllowOverride All
5. 아파치 성능 튜닝의 기초
- KeepAlive: 지속적인 커넥션을 활성화하여 성능을 향상시킬 수 있습니다.
- MaxKeepAliveRequests: KeepAlive 커넥션에서 허용할 요청의 최대 수를 지정합니다.
- Timeout: 서버가 요청을 기다리는 시간을 설정합니다.
아파치 성능 튜닝이란?
아파치 성능 튜닝은 웹 서버의 응답 속도와 처리 효율을 최적화하고, 동시에 서버 리소스를 적절히 관리하여 최대 성능을 끌어내는 작업입니다. 이는 특히 트래픽이 많은 웹사이트에서 중요하며, 웹 서버가 과부하 없이 안정적으로 작동하도록 하는 데 초점이 맞춰져 있습니다.
성능 튜닝의 주요 목표
- 응답 시간 단축: 클라이언트 요청에 대한 응답 속도를 최대화.
- 동시 요청 처리 증가: 다수의 사용자가 접속할 때도 안정적으로 처리.
- 리소스 최적화: CPU, 메모리, 디스크 I/O 등 서버 자원 효율적 사용.
- 서버 안정성 향상: 높은 부하에서도 다운타임을 최소화.
주요 튜닝 요소
- MPM 설정:
- MaxRequestWorkers: 동시에 처리할 수 있는 최대 요청 수.
- StartServers, MinSpareServers, MaxSpareServers: 서버 프로세스 수 조정.
- KeepAlive 설정:
- KeepAlive On: 연결 유지로 성능 향상.
- MaxKeepAliveRequests: 하나의 연결로 처리할 요청 수 제한.
- 캐싱 및 압축:
- 모듈 활성화: mod_deflate를 사용한 압축, mod_cache를 사용한 캐싱.
- 로그 관리:
- 로그 레벨 조정(LogLevel warn)으로 디스크 I/O 줄이기.
- 로테이션 설정: logrotate 사용.
<IfModule mod_deflate.c> AddOutputFilterByType DEFLATE text/html text/css application/javascript </IfModule>
아파치 성능 튜닝 시 유의점
- 하드웨어 성능 고려: CPU, 메모리, 디스크 성능에 따라 튜닝값 설정.
- 사용 사례별 튜닝: 동시 사용자 수, 정적/동적 콘텐츠 비율에 따라 다르게 접근.
- 부하 테스트: 튜닝 효과를 확인하기 위해 ab(Apache Benchmark) 또는 JMeter 같은 도구를 사용.
- 보안과 성능 균형: SSL 등 보안 설정을 과도하게 간소화하지 않도록 주의.
리눅스 환경에서 실습 시 각 설정 파일 및 모듈 활성화 명령(a2enmod, a2ensite) 등을 사용해보세요.
🔥 다음과 같은 내용에 도전해봅시다.
아파치와 Nginx의 차이점 이해하기
Tomcat의 대해 이해하기
apache 로컬환경 or 클라우드서버 에서 설치 후 실습해보기
1. 아파치와 Nginx의 차이점 이해하기
아파치와 Nginx는 둘 다 웹 서버로 사용되지만, 설계 철학과 사용 사례에서 차이점이 있습니다.
설계 모델 | 프로세스 기반 (멀티 프로세스 또는 멀티스레드) | 이벤트 기반 (이벤트 루프 기반) |
성능 | 동시 연결 수가 많아지면 성능 저하 가능 | 동시 연결 수가 많아도 성능 저하가 덜함 |
리버스 프록시 지원 | 가능 | 가능 |
정적 파일 제공 | 느림 | 빠름 |
동적 콘텐츠 처리 | PHP, Python, Perl 등 동적 콘텐츠 지원 | PHP, FastCGI 등을 통해 동적 콘텐츠 처리 가능 |
메모리 사용량 | 일반적으로 많음 | 비교적 적음 |
사용 사례 | 전통적인 웹 호스팅 및 서버 관리에 적합 | 높은 동시 접속, 리버스 프록시, 로드 밸런싱에 적합 |
Apache
- 설명: Apache HTTP Server는 가장 오래된 웹 서버 중 하나입니다.
- 장점:
- 동적 콘텐츠 처리 및 다양한 모듈 확장 지원.
- 안정적이며 확장성이 높음.
- 단점:
- 많은 동시 접속자 처리 시 CPU 및 메모리 사용량이 높아질 수 있음.
Nginx
- 설명: Nginx는 경량 웹 서버로, 이벤트 기반 아키텍처를 사용합니다.
- 장점:
- 동시 연결 수를 효율적으로 처리할 수 있음.
- 정적 파일 제공이 매우 빠름.
- 리버스 프록시 및 로드 밸런싱 기능이 강력함.
- 단점:
- 일부 동적 콘텐츠를 처리하기 위해 PHP-FPM 또는 다른 FastCGI 프로세스와 연결해야 함.
어떤 상황에서 사용해야 할까?
개인적인 의견으로는 규모가 높을수록 Apache 이용률이 높다고 생각이듭니다
- Apache:
- 동적 콘텐츠 제공이 많이 필요하거나, 모듈 확장을 이용해야 할 때.
- 전통적인 웹 서버 사용 사례.
- Nginx:
- 정적 콘텐츠(HTML, CSS, JavaScript) 제공이 많이 필요하거나, 동시 접속을 효율적으로 처리해야 할 때.
- 리버스 프록시 또는 로드 밸런싱을 구축해야 할 때.
2. Tomcat에 대해 이해하기
Tomcat은 Java 기반의 웹 애플리케이션 서버입니다.
Tomcat 특징
- Servlet 컨테이너:
- Java Servlet 및 JavaServer Pages(JSP)를 실행하기 위해 만들어진 서버입니다.
- Java EE와 Servlet/JSP 실행:
- Tomcat은 Java 기반 웹 애플리케이션의 서블릿 및 JSP 컨테이너 역할을 합니다.
- 경량화된 서버:
- Tomcat은 전체 Java EE 스펙을 구현하지 않고, Servlet과 JSP를 실행하는 데 필요한 최소한의 기능만 제공합니다.
Tomcat 주요 용도
- Java 웹 애플리케이션 실행.
- Java Servlet/JSP 기반 애플리케이션 개발 및 테스트.
- 다른 웹 서버(Apache, Nginx)와 함께 사용될 때 리버스 프록시 역할.
3. Oracle Cloud에서 Apache 설치 후 실습해보기
오라클 클라우드 사용법 — 눙이의 인프라 메모장 (tistory.com)
Oracle Cloud에서 Apache 웹 서버 설치 실습을 해 보겠습니다.
Oracle Cloud는 우분투 서버를 제한된 자원으로 평생 무료 지원하기 때문에 강력 추천드립니다.
3-1. Oracle Cloud 계정 준비
- Oracle Cloud 계정이 없다면 Oracle Cloud 웹사이트에서 계정 생성.
- Oracle Cloud에서 가상 머신 인스턴스를 생성.
3-2. Oracle Cloud에서 가상 머신 인스턴스 생성
- Oracle Cloud 콘솔에 로그인 후 인스턴스를 생성합니다.
- 원하는 OS 선택 (예: Ubuntu 20.04 또는 CentOS 8).
- 인스턴스 생성 후, SSH 키 쌍을 다운로드하여 접근할 수 있도록 준비합니다.
3-3. Apache 설치
SSH를 통해 서버에 접속한 후 다음 명령을 실행합니다.
Ubuntu 기반 시스템
apt update
apt install apache2 -y
systemctl start apache2
systemctl enable apache2
CentOS/RHEL 기반 시스템
yum install httpd -y
systemctl start httpd
systemctl enable httpd
<ubuntu>
systemctl status apache2
<centos>
systemctl status httpd
위 명령어를 통해 Apache 서버가 active(running)중인지 확인합니다.
3-4. 방화벽 열기
Apache가 HTTP 및 HTTPS를 통해 작동하려면 80번 및 443번 포트를 열어야 합니다.
Ubuntu (UFW 방화벽 설정)
ufw allow 'Apache'
ufw reload
CentOS/RHEL (firewalld 방화벽 설정)
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
3-5. 웹 브라우저에서 확인
1. 서버의 공인 IP를 확인합니다.
hostname -I
2. 브라우저에서 다음 URL을 입력
http://<your-server-public-ip>
3. Apache가 설치되었다면 기본 Apache 환영 페이지가 표시될 것입니다.
3-6. 추가 작업
- Apache 설정 파일 수정:
- /etc/apache2/apache2.conf (Ubuntu) 또는 /etc/httpd/conf/httpd.conf (CentOS/RHEL)를 통해 설정 수정.
- 웹 콘텐츠 업로드:
- /var/www/html/ 디렉터리에 HTML 파일 등을 업로드하여 테스트.
'KnockOn > 2주차 TIL' 카테고리의 다른 글
[2주차 TIL] KnockOn Bootcamp - PHP (1) | 2024.12.14 |
---|---|
[2주차 TIL] KnockOn Bootcamp - Mysql (0) | 2024.12.13 |
[2주차 TIL] KnockOn Bootcamp - Javascript (0) | 2024.12.12 |
[2주차 TIL] KnockOn Bootcamp - HTML (0) | 2024.12.12 |