오늘은 가볍게 Apache에 대해서 알아보자
개발 공부를 할 때 레거시라고 들었는데 실제 현업에서 아주 많이 사용하고 있었다...
간단한 정적 홈페이지들은 거의 Apache인 느낌이다
Apache 의 몇가지 개념만 알아보자
Apache MPM
들어오는 요청을 Apache가 프로세스와 스레드로 어떻게 나누어 처리할 지 정하는 방식
Multi-Processing ModuleApache의 일처리 방식
필요한 이유
- 동시에 여러 사용자가 접속하면
Apache는 요청을 여러개 처리해야 함
사용자 A -> HTML 요청
사용자 B -> 이미지 요청
사용자 C -> PHP 요청
→ 프로세스를 여러개 만들어 처리할지
→ 프로세스 안에 스레드를 여러개 만들어 처리할지
→ KeepAlive 대기 연결을 별도로 효율적으로 관리할지
정해주는 MPM
대표적 MPM
1. prefork
Apache프로세스 1개 = 요청 1개 처리
스레드를 사용하지 않고,프로세스를 여러 개 띄움- 장점
- 구조가 단순하고 안정적
- 오래된
mod_php환경에서 많이 사용
- 단점
프로세스마다 메모리를 따로 사용해서 메모리 사용량이 커질 수 있음KeepAlive연결을 기다리는 동안에도프로세스하나가 붙잡힐 수 있음
- 요청마다
프로세스를 생성/제거하지는 않고pool형태로 관리
2. worker
프로세스안에 여러스레드를 만들어 요청 처리
prefork보다 적은 프로세스로 많은 요청을 처리할 수 있어서 메모리를 덜 사용하는 편Apache에 연결된 모듈이 스레드 환경에서 안전해야함
3. event
worker의 개선 방식
KeepAlive대기 연결을 일반 작업 스레드가 계속 붙잡지 않도록 처리
- 요청 처리 중 → 작업 스레드가 처리
KeepAlive로 다음 요청 대기 중 → 별도의 이벤트 방식으로 관리- 새 요청이 들어옴 → 다시 작업 스레드에 전달
- 동시 접속이 많거나
KeepAlive연결이 많은 웹 서버에 유리 - 일반적으로
event많이 사용
Apache Default Server
클라이언트가 요청한 도메인이 서버의 설정 파일에 명확하게 정의되어 있지 않을 때, 연결해주는 기본 웹사이트
- 하나의 웹서버에 여러 개의 웹사이트를 동시에 운영하는 것을
가상 호스트라고 함 - 사용자가 서버의 IP 주소로 직접 접속하거나, 내 서버를 가리키고는 있지만 아파치 설정에는 등록되지 않은 도메인으로 접속하면 어떤 웹사이트를 보여줘야 할지 모름
→ 이 때 가장 먼저 손을 들고 응답
아파치는 설정파일을 위에서부터 아래로 읽음- 가상 호스트 설정 중에서 가장 먼저 읽히는 가상 호스트 가
Default Server로 지정
-> 이건 보통 SSL 인증서 갱신을 할 떄 Apachectl -S | grep <도메인> 했을 때 안나오면 default Server로 연결된다
Apache Alias
URL 경로를
DocumentRoot밖의 실제 디렉터리나 파일 경로에 연결
httpd.conf에서 설정Alias /이름/ /원하는절대경로/- 설정해둔
/이름으로 접속했을 때 실제로는/원하는절대경로를 보여줌
- 설정해둔
- 경로만 연결했다고 접근 권한까지 자동으로 허용되지는 않음
DocumentRoot는 기본 URL 경로를 실제 디렉터리에 연결
Apache keepAlive
한 번 맺은 TCP 연결을 바로 끊지 않고, 같은 클라이언트가 여러 HTTP 요청에 재사용하도록 하는 설정
keepAlive가 켜져 있는 경우
TCP 연결
- HTML 요청/응답
- CSS 요청/응답
- JS 요청/응답
- 이미지 요청/응답
연결 종료
→ TCP 연결을 매번 새로 만들지 않으므로 응답 속도가 좋아지고 연결 생성 비용이 줄어들게 됨
- 보통
httpd.conf나 별도의 설정 파일 존재
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
KeepAlive On- 일반적인 웹 서버 대부분은 On으로 사용
MaxKeepAliveRequests 100- 하나의 TCP 연결에서 최대 몇 개의 요청까지 처리할 지
0으로 설정 시 제한 없음- 보통은 너무 낮게 잡지 않고
100이상으로 설정
KeepAliveTimeout 5- 요청을 처리한 뒤, 다음 요청이 올 때까지 연결을 몇 초간 유지할 지
- 5초 안에 요청이 오면 기존 연결 사용. 안오면 연결 종료
- 너무 길게 잡으면 아무 요청도 없는 연결을
프로세스나스레드가 계속 붙잡고 있을 수 있음
많이 사용하는 개념들은 일단 이정도인 것 같다
물론 더 많겠지만 나는 서버 유지보수를 하면서 볼 수 있는 것들을 알아봤다
아마 개발을 하기 위해서는 DB연결도 해야하고 더 많은 요소들이 있을 것이다
다음 글은 좀 더 열심히 쓰겠다.