아파치 웹서버
아파치 웹서버(Apache Web Server)는 리눅스 기반의 무료 오픈소스 웹서버 소프트웨어이다. 아파치재단에서 관리하고 있다. 아파치(Apache)는 미국 인디언 부족인 아파치족을 존경하는 의미를 담아서 만든 말이다. 로고는 아파치족이 머리에 꽂는 깃털이다. 나중에 아파치(Apache)는 "A Patchy Web Server"의 약자라는 설명(backronym)이 뒤늦게 생겨났다.
목차
개요
아파치 웹서버란, 고성능의 HTTP 서버이며, 정식 이름은 아파치 HTTP 서버(Apache HTTP Server) 지만 아파치 서버로 많이 알려져 있다. 프로그램의 이름은 httpd이며 HTTP 데몬(daemon)이라는 의미다. 안정성과 확장성, 호환성이 매우좋고, 개선된 패치파일을 꾸준하게 제공하고 있었기 때문에 월드와이드웹 서버용 소프트웨어로 전세계에서 가장 높은 점유율을 가지고 있었다. 세계에서 가장 많이 쓰는 웹 서버 중 하나이며, 오픈 소스 소프트웨어 그룹인 아파치 소프트웨어 재단에서 만든 HTTP 웹 서버다. 팀 버너스 리가 유닉스 기반으로 만든 최초의 웹 서버 프로그램인 NCSA HTTPd를 기반으로 만들어졌다. 아파치 웹 서버는 NCSA HTTPd를 리눅스에서도 돌리는 것을 목표로 만들어진 프로그램이다. 그래서 윈도우 서버보단 리눅스 서버에서 더 지원이 잘 되지만 C로 작성해서 유닉스 계열뿐 아니라 마이크로소프트 윈도우나 노벨 넷웨어 같은 다양한 운영체제에 이식되어 설치해서 사용할 수 있다. 따라서 현재 나와있는 대부분의 개인용 또는 서버용 운영체제를 지원한다. 그 이후 리눅스와 함께 퍼져나갔고, 리눅스가 서버 OS의 최다 점유율을 차지하자 아파치도 자연스럽게 최다 점유율을 차지했으며 다양한 추가 기능에, 구축이 쉽다는 이유 때문에 많이 쓰고 있다. 현재 거의 모든 리눅스 배포판이 이 아파치를 지원한다. 하지만 아파치 자체만으로 엄청 무겁고, 스퀴드(Squid)와 함께 슬로리스(Slowloris) 취약점이 발견되었기에, 보통 프로그래밍 능력이 능숙한 사람들이나, 대형 사이트 운영자는 엔진엑스(Nginx), 인터넷 정보 서비스(IIS)를 주로 쓰고 있지만 대부분의 중소기업들은 무료이기 때문에 많이 쓰인다. 그렇다고 웹호스팅이나 소규모 웹사이트에만 사용하는 것은 아니다. 대규모 엔터프라이즈에서도 사용되며 오히려 거대 규모 웹서버 시장 점유율은 아파치가 더욱 막강하며 금융권을 비롯해서 안정성과 보안이 중요한 곳에서도 아파치를 사용한다. 상용 소프트웨어를 능가하는 오픈소스 소프트웨어의 좋은 예시 중 하나다. 1995년에 나왔는데도 2020년인 현재까지 최신 버전은 2.4.x다. 실제 운영중인 웹사이트 중에는 지금까지도 아파치 1.x 대에 머물러 있는 곳도 있다. 너무 기능 추가나 발전이 없는 거 아닌가 싶기도 하겠지만, 그만큼 안정화가 잘 되어 있는 서버라는 뜻일 수도 있다. 사실 아파치 서버 자체는 웹 서버로서 아주 기본적인 기능만 수행하는 것이고, PHP를 비롯해서 동적 웹 페이지를 만드는 기능이라든가 하는 대부분의 발전된 기능은 외부 모듈을 붙여서 구현한다. 오랜 역사와 높은 시장 점유율 덕분에 이러한 외부 모듈이 많고, 안정화도 잘 되어 있는 것이 아파치를 찾게 되는 주된 이유 중 하나다. 기본적으로 80포트로 연결되며, Apache_HOME/bin/httpd.bat 같은 배치파일을 실행하거나, 서비스로 등록하여 서비스로 실행시키면 된다. 정적인 페이지를 보여주는 역할을 수행하는 데 적합하다.[1][2][3]
역사
- 1995년 2월 - 개발 시작
아파치의 기원은 NCSA HTTPd 라고 불리는 공공 HTTP 서버로 거슬러 올라갈 수 있다. 이것은 버너스리가 유럽 입자 물리 연구소(CERN)에서 만든 웹서버의 대안으로 일리노이 대학교의 국립 슈퍼컴퓨팅 응용 센터(NCSA)에서 개발했다. NCSA HTTPd는 1990년대 초반에 가장 인기 있는 웹 서버가 되었지만 1994년에 넷스케이프가 이 프로젝트를 이끌던 개발자인 롭 맥쿨을 빼가면서 추진력을 잃었다. 그러자 전 세계에 흩어져 있던 많은 웹사이트들의 관리자들은 각자의 필요에 맞게 NCSA HTTPd를 수정하기 시작했고 결국 서로 호환되지 않는 버전들이 양산되었다. 개발자들에 따르면 "NCSA httpd 라이선스의 미래에 대한 불확실성"도 우려사항이었다.
이 문제를 해결하기 위해 웹 관리자 몇 명이 모여 시작한 것이 아파치였다. 1995년 2월에 8명의 개발자들(브라이언 벨렌도르프(Brian Behlendorf), 로이 필딩(Roy T.Fielding), 데이비드 로빈슨(David Robinson), 롭 하틸(Rob Hartill), 클리프 스콜닉(cliff skolnick), 랜디 텔부시(Randy Terbush), 로버트 타우(Robert S. Thau), 앤드류 윌슨(Andrew Wilson))이 협업을 시작했다. 이들은 NCSA HTTPd 코드에 기반한 새로운 웹서버를 개발했고 자신의 조직을 아파치 그룹(Apache Group)이라고 불렀다. 8명 중 한 사람이었던 로버트 타우는 프로젝트가 출범할 때 이렇게 언급했다. "우리의 목표는 NCSA [HTTPd 서버 버전] 1.3의 개선 버전을 만드는 것이다. 우리의 요구를 실제로 충족시키는 서버를 가지기 위해서 모든 인기 있는 수정사항들을 바로 포함할 것이다" 그렇게 하기 위해서 그들은 일련의 패치(patch)들을 적용했는데 여기서 아파치라는 이름이 생겨났다. '패치 서버(a patchy server)'라는 문구에서 따온 것이다.
- 1995년 3월 - 로고와 강령
1995년 3월 중순이 되자 로고와 강령을 만들었다. 강령을 통해서 그들은 개방형 표준에 기반한 웹용 사실상 표준 서버를 개발하겠다고 선언했다.
아파치 프로젝트는 공공 HTTP 서버의 개발에 관한 일부 우려에 답하기 위한 시도로 만들어졌다. 이 프로젝트의 목표는 안전하고, 효과적이며, 확장이 가능한 서버를 제공하는 것이다. 이 서버는 현재의 HTTP 표준에 따라 HTTP 서비스를 제공한다.[4]
- 1995년 4 ~ 8월 - 0.8.8 배포
1995년 4월 아파치의 첫 번째 공개 배포(0.6.2 Version) 한다. 이쯤에 NCSA에서도 웹서버 개발을 진행하고 있었는데, NCSA의 서버개발팀의 브랜든 롱(Brandon Long)과 베스 프랭크(Beth Frank)는 명예 멤버처럼 메일 리스트에 합류하면서 두 프로젝트에 아이디어와 버그 등을 수정하게 된다. 첫 번째 공개 배포는 빅 히트였지만 전체적인 개선과 재디자인이 필요한 시점에서 1995년 5월 ~ 6월 동안 롭 하틸과 나머지 그룹 멤버들은 0.7.x에 새로운 기능을 구현(pre-fork 기능)과 작지만 성장하고 있는 아파치 사용자 커뮤니티를 지원하는 데 힘을 쓴다. 로버트 타우는 새로운 서버 아키텍처를 디자인했는데, 코드명 샴발라(Shambhala), 모듈화된 구조와 보다 많은 확장성을 위한 API 구조, pool 기반의 메모리 할당 그리고 Adaptive pre-forking 프로세스 모델이었다. 아파치 그룹은 0.7.x에 이 기능들을 넣고 서버 베이스를 바꾼다. 그리고 8월에 0.8.8을 배포한다.[5]
- 1995년 12월 - 1.0 발표
몇 달에 걸쳐서 개발팀은 서버의 설계를 뜯어고쳤고 새로운 기능들을 추가해서 12월에 아파치 1.0 버전을 발표했다. 프로젝트가 출범한 지 일 년도 되지 않은 1996년 초에 아파치는 세계에서 웹서버의 선두 주자가 되었다.[4]
- 1996년 6월 - Apache Software Foundation 설립
아파치 HTTP 서버를 법적, 재정적으로 지원하기 위해 아파치 그룹 멤버들은 Apache Software Foundation을 설립하게 된다.[5]
2019년 6월 기준으로 엔진엑스가 9%차이로 점차 점유율을 높이는 중이다. 아파치(29.39%), 엔진엑스(20.55%), 구글(8.36%), 마이크로소프트(5.97%)[6]
주요 인물
- 브라이언 벨렌도르프(Brian Behlendorf) : 아파치 웹서버를 개발했고, 아파치재단의 회장을 지냈다. 블록체인 기반의 하이퍼레저 프로젝트의 최고책임자이다.
특징
아파치 웹서버는 무료 오픈소스이고, 확장성, 호환성, 이식성, 안정성이 높아서 웹서버에서 많이 사용하며, 모듈이라는 개념으로 수많은 기능을 덧붙일 수 있다. 이 모듈을 통해 다른 프로그램과의 연동도 가능하다. 이 때문에 여러 가지 서버 사이드 프로그래밍 언어나 데이터베이스 관리 시스템과도 궁합이 잘 맞았는데, 초창기에는 펄(Perl)이 대세였고, PHP가 그 뒤를 이었다. 바로 PHP 모듈을 통해 PHP를 실행할 수도 있지만, 주로 속도 향상을 위해 PHP-FPM을 통해 PHP를 연결해서 사용한다. 좀 더 고성능을 원하는 사람은 힙합 가상 머신(HHVM)을 쓴다. 그리고 오픈소스 데이터베이스 관리 시스템인 마이에스큐엘(MySQL)이 나오자, APM(Apache+PHP+MySQL)이라고 통칭하면서 웹 서버를 돌리기 위한 기본이 되었다. 물론 다른 언어와 다른 데이터베이스 관리 시스템도 지원하지만, 저 조합의 인지도가 가장 높다. 자바서버 페이지(JSP)의 경우에도 설정이 조금 귀찮아지지만 톰캣과 연동하여 돌릴 수 있다. 아파치는 요청 당 프로세스 또는 쓰레드가 처리하는 구조이며, 요청이 많아지면 CPU와 메모리 사용량이 높아져 성능이 저하될수있다. 이 문제들은 Keep Alive를 활성화함으로 해결할 수 있지만 대량 접속시에 효율이 급격히 떨어지는 문제점이 발생한다. 라이선스는 GPL이 아닌 자체 라이선스를 쓴다. 아차피 라이선스 2.0을 따르는데, 아파치 소프트웨어 재단에서 만들었다는 사실을 밝히고 아파치 라이선스를 따르면 자유롭게 수정 및 재배포가 가능하다. 소스 공개 강제 사항도 없는 자유로운 라이선스다. 그러나 2.2 버전대에서 너무 무겁다는 평이 많아졌고, 빠른 속도를 내세운 엔진엑스라는 웹 서버 프로그램이 새로 나오면서 아파치의 위기가 왔다. 아파치는 Event MPM을 탑재하여 속도를 크게 개선한 2.4버전을 내놓으면서 여기에 대응하고 있다. 기능이 매우 많은 웹서버이지만 그 기능을 다 활용하는 사람이 드문 그런 프로그램이다. 확장 모듈이 매우 다양하여 간단하게 설치하고 사용 가능하지만 대부분의 사람은 이 프로그램과 PHP, 마이에스큐엘만 설치하고 돌린다. 그리고 그 기능들은 엔진엑스에도 그대로 존재하고, 더 빠르다. 호환성을 확인하고 옮길 수 있으며 옮기는 게 좋다. 윈도우용도 나온다. 윈도우에도 크로스 플랫폼 웹 서버 자유 소프트웨어 꾸러미(XAMPP)나 에이피엠셋업(APMSetup) 등의 APM을 편리하게 통합해 설치할 수 있는 패키지가 나와 있다. 아파치 웹 서버, PHP, 마이에스큐엘 전부 윈도우용이 나오기 때문에 가능한 것이다. 그러나 리눅스/유닉스 베이스로 만들어진 프로그램이다 보니 윈도우에서는 제 속도가 나오지 않는다. 윈도우 버전은 서버 입문자의 디버깅 환경 구축용 혹은 PHP+마이에스큐엘 연습용 정도라고 보면 된다. 거기다 윈도우 서버에는 마이크로소프트가 자체적으로 만든 인터넷 정보 서비스가 있기 때문에, 인터넷 정보 서비스에 FastCGI 모듈로 PHP를 연결해서 돌리는 것이 보통이다. 이 때문에 PHP의 윈도우 버전은 인터넷 정보 서비스용과 아파치용(엑스엔진용)이 따로 나온다.[2][7]
아키텍쳐
아파치는 MPM(Multi Processing Module) 아키텍쳐를 기반으로 클라이언트 요청 처리 방법을 처리하는 기술 기반을 하고 있다. MPM은 mpm_prefork, mpm_worker, mpm_event 이 3가지 아키텍쳐를 근간으로 하고 있다. mpm_prefork는 단일 스레드 로직에서 동작하며 각 서버 프로세스는 한 번에 하나의 웹 요청(Web Request)을 처리한다. 이러한 방식은 PHP 환경에서 권장되는 방식이다. LAMP 아키턱쳐에서 PHP가 등장하는 이유도 이러한 데서 비롯된다. mpm_worker는 동시에 여러 스레드를 지원한다. 이것은 아파치가 좀 더 효율적이고 확장 가능하도록 돕는다. mpm_event는 mpm_worker와 유사한 방식으로 동작하지만 최근 등장한 웹 관련 애플리케이션을 위한 킵얼라이브 메커니즘이 포함되어 있다. 이러한 방식은 커넥션마다 새로운 스레드가 필요하다는 관점에서 커넥션이 대규모로 많아질 때 성능 측면에서 많은 이슈가 발생할 수 있다.[8]
필요성
아파치 웹서버는 HTTP 서버를 통해 무거운 사용자 환경의 이미지, JS, CSS, HTML 파일 같은 정적 콘텐츠를 효율적으로 제공하는데 톰캣도 정적 콘텐츠를 제공할 수는 있지만 아파치 웹서버에 비해 반응 속도가 느리며 톰캣과 비교해 10% 정도 더 효율적으로 정적 콘텐츠를 처리하므로 사용자 부하가 높은 상황에서는 아파치를 통합하는 것이 좋다. 아파치 웹서버의 가장 훌륭한 기능 중 하나인 다중 웹사이트 호스팅 기능은 톰캣 7에서 처음으로 제공되는 기능이다. httpd.conf를 이용해 32개가 넘는 가상 호스트를 설정할 수 있다. 32개 이상의 가상 호스트를 설정하려면 virtual.conf 파일을 별도로 만든 다음 httpd.conf에서 virtual.conf를 포함하도록 설정해야 한다. 아파치는 클러스터링을 제공해서 톰캣에 다중 인스턴스 연결을 안정적으로 제공하는 가장 효율적인 서버다. 이 기능의 가장 큰 장점은 인스턴스가 다운됐을 때에도 애플리케이션이 온라인 상태를 유지할 수 있다는 것이다. 또한 배포 중에 다른 인스턴스를 온라인 상태로 제공해 사용자 요청을 처리함과 동시에 인스턴스에 코드를 배포할 수 있다. 즉, 장애 없이 365일 애플리케이션을 수행할 수 있다. 그뿐 아니라, 유연한 모듈 참조를 지원해서 애플리케이션의 요구 사항에 맞게 모든 모듈을 컴파일, 재컴파일 할 수 있다. 애플리케이션의 확장성, 그리고 서드 파티 도구와 통합할 때 유용한 기능이다. 아파치와 톰캣은 사용자와 호스트 기반 보안을 제공하며, 애플리케이션의 요구사항을 고려해 둘 중 누구의 보안을 활성화할 것인지를 결정해야한다. 보안 소켓 계층(SSL), 프록시, 접근제어목록, 디렉토리 접근 제한 등의 보안 기능과 하나의 서버에 여러 도메인 운영, 서버호스팅 등 가상 호스트 기능을 하고 리소스 분산처리, Cache(Expires), HTTP 표준 설정, MPM(Multi-Processing Module), 킵얼라이브(KeepAlive) 등의 성능적인 측면에서 우수하다.[9][5]
버전
Apache
- 1998년 06월 06일 - Ver.1.3
- 2010년 02월 03일 - Ver.1.3.42
Apache2
- 2002년 02월 03일 - Ver.2.0
- 2005년 12월 01일 - Ver.2.2
- 2012년 02월 21일 - Ver.2.4
- 2013년 07월 10일 - Ver.2.0.65
- 2017년 07월 11일 - Ver.2.2.34
- 2018년 03월 17일 - Ver.2.4.33
- 2018년 07월 16일 - Ver.2.4.34
- 2019년 04월 01일 - Ver.2.4.39
문제점
문제점들을 개선하기위해 아파치2.4부터 Event MPM을 적용했다고 해도, Event Driven을 사용하여 리소스 사용량이 적은엔진엑스보다 떨어지는 성능과, 대량접속에도 적은 리소스를 사용하며 빠르게 서비스를 요구하는 웹사이트가 늘어남으로 인해서 아파치는 하락세를 타고있으며, 경량화서버인 엔진엑스가 시장 점유율을 점차 늘려가고있다.
평가 및 전망
엔진엑스가 성능상의 장점을 가지고 있다고 하지만, 아파치 웹서버는 여전히 높은 서버 시장점유율과 안정성, 호환성, 확장성을 가지고 있다. 아파치 웹서버가 현재 최우선 과제로 삼고있는 성능 개발 목표를 달성하고, 지속적으로 버전 패치를 해준다면 다시 시장 점유율을 늘려갈 수 있을 것으로 기대하고 있다.
각주
- ↑ 서버이야기, 〈아파치(apache)와 톰캣란?〉, 《티스토리》, 2017-01-16
- ↑ 2.0 2.1 아파치 HTTP 서버 나무위키 - 아파치 HTTP 서버
- ↑ 아파치 HTTP 서버 내위키 - 아파치 HTTP 서버
- ↑ 4.0 4.1 기계인간 John Grib, 〈아파치 웹 서버의 시작〉, 《개인블로그》, 2020-02-05
- ↑ 5.0 5.1 5.2 리치해커 SCOTT, 〈apache〉, 《네이버 블로그》, 2016-10-07
- ↑ Web Server Survey, 〈June 2019 Web Server Survey〉, 《Netcraft》, 2019-06-17
- ↑ 아파치 공식 홈페이지 - Overview of new features in Apache HTTP Server 2.4
- ↑ 청년정신, 〈Apache-vs-Nginx〉, 《티스토리》, 2019-03-27
- ↑ beom3, 〈Apache HTTP서버의 장점〉, 《네이버 블로그》, 2016-09-19
참고자료
- 아파치 공식 홈페이지 - 〈Overview of new features in Apache HTTP Server 2.4〉
- 아파치 HTTP 서버 나무위키 - 아파치 HTTP 서버
- 아파치 HTTP 서버 내위키 - 아파치 HTTP 서버
- 리치해커 SCOTT, 〈apache〉, 《네이버 블로그》, 2016-10-07
- 서버이야기, 〈아파치(apache)와 톰캣란?〉, 《티스토리》, 2017-01-16
- Web Server Survey, 〈June 2019 Web Server Survey〉, 《Netcraft》, 2019-06-17
- 기계인간 John Grib, 〈아파치 웹 서버의 시작〉, 《개인블로그》, 2020-02-05
같이 보기