Apache

The Apache HTTP Server Project is an effort to develop and maintain an open-source HTTP server for modern operating systems.

— 아파치 HTTP 서버 공식 홈페이지의 담백하고 자부심 넘치는 소개 구절.

월드 와이드 웹의 유년기를 안전하게 길러낸 유구한 역사적 인프라 수호신이자, 성능에 미친 젊은 피 Nginx에게 밀려 강제로 레거시 행보를 걷고 있는 90년대 웹의 전설. 그리고 복잡한 정규식으로 가득한 가상 호스트 설정과 분기 규칙을 마주할 때마다 개발자를 두통에 빠트리는 빌런

1. 개요

Apache HTTP Server는 아파치 소프트웨어 재단(ASF)이 관리하는 오픈소스 크로스플랫폼 웹 서버 소프트웨어이다. 1995년 출시된 이래, 인터넷 및 대규모 상용 웹 생태계의 비약적인 발전을 수십 년 동안 책임져 온 인프라의 상징적인 존재이다.

수많은 확장 모듈과 강력한 가상 호스트 설정, 유연한 디렉토리별 제어 기능 등을 무기로 오랜 기간 웹 서버 시장 점유율 독보적 1위를 지켜왔으나, 클라이언트 요청이 급증하는 대용량 동시 접속 환경에서 구조적 한계(Process-driven 아키텍처)를 드러내며 이벤트 기반(Event-driven)의 신흥 강자 Nginx에게 상당 부분 왕좌를 이양하고 말았다.(...)

2. 아키텍처의 한계: 프로세스 중심의 무거운 거인

2.1. MPM(Multi-Processing Module)의 삼총사

Apache는 클라이언트의 연결을 처리하기 위해 멀티 프로세싱 모듈(MPM)이라는 방식을 제공한다.

  • Prefork: 클라이언트 요청마다 새로운 자식 프로세스를 복제(Fork)하여 독립적으로 처리하는 방식. 안전하고 호환성이 좋지만, 접속자가 폭증하면 서버 메모리가 사정없이 뿜어지며 다운되는 주범이다.
  • Worker: 하나의 프로세스가 여러 스레드를 거느려 요청을 처리하는 방식. Prefork에 비해 메모리를 현저히 아낄 수 있으나, 스레드 안전성(Thread safety)이 보장되지 않는 PHP 모듈 등과 결합할 때 시스템이 요동치는 부작용을 동반한다.
  • Event: Worker의 개선형으로, 연결 유지를 위한 Keep-Alive 연결을 전담하는 스레드를 두어 자원 낭비를 줄이는 방식. Nginx의 고성능 이벤트 루프 아키텍처를 뒤늦게 모방하였으나, 근본적인 프로세스/스레드 생성 오버헤드 자체를 완벽히 숨기지는 못했다.(...)

2.2. Nginx의 습격과 2인자로의 추락

과거에는 "웹 서버 = Apache"가 불문율이었으나, 스마트폰 대중화와 Ajax 기술 활성화로 동시 접속자 수가 기하급수적으로 늘어나는 'C10K 문제'가 불거지며 판도가 바뀌었다. 요청마다 프로세스를 던지는 Apache와 달리, 단 몇 개의 고정된 워커 프로세스가 비동기 이벤트 루프로 수만 개의 연결을 가뿐히 해치우는 Nginx가 등장하자 대규모 서비스들은 급속도로 웹 서버를 갈아타기 시작했다. 오늘날 최첨단 빅테크 서비스나 클라우드 네이티브 환경에서는 Nginx나 전용 로드밸런서가 앞단(Reverse Proxy)을 장악하고, Apache는 뒤로 밀려나 구형 레거시 인프라나 사내 시스템 수호신으로 내려앉아 굳어버린 세월을 체감하고 있다.1

3. 유연성의 양날의 검: .htaccess와 디렉토리 권한 설정

3.1. 공유 호스팅의 신세계를 연 .htaccess

Apache의 가장 차별화된 기능은 서버의 메인 설정 파일을 직접 건드리지 않고도 특정 폴더 밑에 .htaccess라는 텍스트 파일을 던져 넣는 것만으로 개별 디렉토리의 URL 리다이렉션, 인증, 보안 접근 제어 설정을 동적으로 변경할 수 있다는 점이다. 이 덕분에 전 세계 카페24, 고대디 같은 저렴한 공유 웹 호스팅 생태계와 워드프레스(WordPress)가 폭발적으로 성장할 수 있었다.

3.2. 보안과 성능의 대가

하지만 이 유연성은 혹독한 성능 저하와 보안 위험이라는 대가를 요구했다. Apache 서버는 클라이언트 요청이 들어올 때마다 최상위 루트부터 대상 폴더까지 이동하는 경로 상의 모든 .htaccess 파일을 매번 읽고 해석하는 사치스러운 짓을 반복하기 때문이다. 또한 파일 권한 관리가 엉망이 되면 해커들이 .htaccess 파일에 악성 리다이렉트 스크립트를 주입해 방문자들을 악성코드 유포지로 우회시키는 해킹의 주 경로로 애용되기도 한다.2

4. 아파치 관련 밈 및 드립

4.1. 이름의 기원: 땜질식 서버 (A Patchy Server)

개발자 커뮤니티에서 아주 오랫동안 떠돌던 설로, NCSA 웹 서버 코드에 온갖 버그 수정용 패치(Patch)들을 기워 붙여서 탄생한 임시방편 웹 서버라는 의미의 'A Patchy Server'에서 Apache가 유래되었다는 드립이다. 너무나 그럴싸하고 위트 있는 유래라 대다수 개발자가 이를 진실로 믿고 자조적으로 웃어넘겼으나, 재단 측의 공식 입장에 따르면 인디언 아파치 부족의 강인함과 용맹함에서 따왔다고 한다. 하지만 현실의 구동 모습은 여전히 땜질식 패치로 가득하다.(...)

5. 여담

  • 아파치 라이선스 2.0의 관대함: 아파치 소프트웨어 재단에서 배포하는 아파치 라이선스는 GPL과 달리 소스코드를 수정해서 상용 소프트웨어로 판매하더라도 독자 소스코드를 강제로 공개하지 않아도 되는 매우 관대한 오픈소스 라이선스이다. 이 관대함 덕분에 수많은 오픈소스 프로젝트와 기업들이 안심하고 아파치의 뼈대를 가져다 사업을 확장할 수 있게 되었다.
  • 웹 서버 시장 점유율 1위의 쇠퇴: Netcraft 사의 조사에 따르면, 아파치 웹 서버는 1996년부터 2010년대 중반까지 약 20여 년간 점유율 60% 이상을 고수하며 인터넷을 지배했다. 그러나 2020년대에 들어와 Nginx 및 Cloudflare 등의 자체 커스텀 서버 솔루션에 밀려 1위 자리를 영구 박탈당하며 조용한 은퇴 수순을 밟고 있다.
  • 워드프레스의 절대 동반자: 세계 웹사이트의 40% 이상을 구성하는 워드프레스는 Apache와 찰떡궁합을 자랑한다. 고유 주소(Permalink) 설정을 활성화하는 순간 워드프레스가 자동으로 .htaccess 파일에 규칙을 주입해 주기 때문에, 복잡한 설정 지식이 없는 초보 블로거들도 손쉽게 완벽한 웹사이트를 구동할 수 있다.

6. 관련 문서

각주

  1. 그럼에도 대기업이나 보수적인 공공기관, 금융권 인프라 환경에서는 Java 기술인 Tomcat(WAS) 앞단에 연동 모듈(mod_jk)을 물려 구동하는 신뢰의 조합으로 수십 년째 묵묵히 자리를 보존하며 아파치를 붙잡고 눈물을 흘리고 있다.

  2. 실제로 Nginx는 성능 극대화를 위해 이러한 분산 설정 파일(.htaccess)을 일절 허용하지 않으며, 모든 경로 규칙은 메인 설정 파일에 사전에 지정해 메모리에 올려 실행하는 타협 없는 구조를 택했다.