Apache

2026. 7. 13. 03:42·시스템, 인프라

오늘은 가볍게 Apache에 대해서 알아보자

개발 공부를 할 때 레거시라고 들었는데 실제 현업에서 아주 많이 사용하고 있었다...

간단한 정적 홈페이지들은 거의 Apache인 느낌이다

Apache 의 몇가지 개념만 알아보자

 

Apache MPM

들어오는 요청을 Apache가 프로세스와 스레드로 어떻게 나누어 처리할 지 정하는 방식

Multi-Processing Module
Apache의 일처리 방식

필요한 이유

  • 동시에 여러 사용자가 접속하면 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연결도 해야하고 더 많은 요소들이 있을 것이다

다음 글은 좀 더 열심히 쓰겠다.

'시스템, 인프라' 카테고리의 다른 글

Inode  (1) 2026.06.28
IP (Internet Protocol)  (0) 2026.06.14
fstab  (1) 2026.06.03
RAID  (2) 2026.05.31
DNS  (0) 2026.05.24
'시스템, 인프라' 카테고리의 다른 글
  • Inode
  • IP (Internet Protocol)
  • fstab
  • RAID
나는 허준기
나는 허준기
  • 나는 허준기
    공부
    나는 허준기
  • 전체
    오늘
    어제
    • 분류 전체보기 (16)
      • 자바 공부 (2)
      • 알고리즘 공부 (1)
      • 일기 (0)
      • Git (2)
      • 클라우드 (3)
      • 시스템, 인프라 (8)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    terraform
    TLS
    IP
    NCP
    fstab
    클라우드
    inode
    로드밸런싱
    네이버클라우드
    SSL
    Naver Cloud
    apache
    IaC
    RAID
    힙정렬
    최대힙
    DNS
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
나는 허준기
Apache
상단으로

티스토리툴바