Sam Story

아파치 (Apache) 본문

개발지식

아파치 (Apache)

Sam H 2024. 5. 1. 15:32

 

 

오늘은 웹서버를 구축할때 사용하는 아파치(Apache)에 대해서 포스팅 해보려고 한다.

 

필자가 웹서버를 구축할때에는 APM (Apache + PHP + MySQL)을 이용해 구축하였었는데

 

이 요소중에서 아파치(Apache)에 대해서 알아보도록 하자.

 

 

1. 아파치 (Apache) 란?

 

아파치는 월드와이드 웹 서버용 소프트웨어이다. 

 

아파치 웹서버는 유닉스,리눅스,윈도우 등 다양한 운영체제를 지원하는 무료 오픈소스 웹서버 소프트웨어이다.

 

정식 이름은 아파치 HTTP 서버 (Apache HTTP Server) 이지만 일반적으로 아파치 웹 서버로 더 많이 불린다.

 

유닉스 기반으로 만든 최초의 웹 서버 프로그램인 NCSA HTTPd를 기반으로 만들어졌다.

 

리눅스나 윈도우 등 거의 모든 운영체제에서 사용할 수 있으며 구축이 쉽고

 

다양한 추가기능을 가지고 있기 때문에 현재 가장 인기있는 웹서버로 이용되고 있다.

 

 

아래 그림은 웹서버의 구성에 대해 간단하게 그림으로 나타낸 것이다

WAS (Web Application Server) 의 구성

 

 

2. 구조

 

아파치는 MPM(Multi Processing Module) 다중 처리 모듈 구조를 기반으로

Apache가 받아들인 요청을 처리하기 위해 자식 process에게 분배하여

클라이언트 요청 처리 방법을 처리하는 기술 기반을 하고 있다.

MPM은 Prefork, Worker, Event 이 3가지 구조를 근간으로 하고 있다.

 

 

- Prefork

 

Prefork는 단일 스레드 로직에서 동작하며 각 서버 프로세스는 한 번에 하나의 웹 요청(Web Request)을 처리한다.

 

● 대량의 메모리가 필요한 경우 → 상대적으로 느리다.

 

구조가 간단하고 구현이 쉽다.

 

● 일반적으로 Single CPU 또는 Dual CPU에서 성능이 좋다.

 

 

- Worker

 

Worker 방식은 동시에 여러 스레드를 지원한다.

기본 사용 메모리는 Prefork 방식보다 낮으며 스레드 간에 메모리를 서로 공유하고

이러한 방식은 아파치가 좀 더 효율적이고 확장 가능하도록 돕는다.

 

● 메모리를 비교적 적게 사용한다.

 

● 3개 이상의 Multi-CPU에서 성능이 좋다.

 

● 통신량이 많은 서버에 적합하다.

 

 

- Event

 

Event 방식은 Worker에 기반하여 좀더 발전한 방식이다.

 

Worker 방식의 경우 클라이언트 요청을 기다리고 있는 자식 프로세스 혹은 스레드 전체를 유지하게 되는데 

Event 방식은 각 프로세스를 위한 전용 리스너 스레드를 따로 둠으로서 해당 문제를 해결했다.

 

● Keep-Alive 에 대한 고민에서 출발한 새로운 MPM 방식이다.

 

● Apache 요청을 그대로 맺어주는게 아닌 별도로 요청을 처리하는

리스너 스레드를 따로두어 분산된 처리를 하는데 목적을 둔다.

 

 

3. 장단점

 

장점

 

● 아파치는 클러스터링을 제공하여 다중 인스턴스 연결을 안정적으로 제공하는 가장 효율적인 서버다.

 

● 이러한 기능의 가장 큰 장점은 인스턴스가 다운됐을 때에도 어플리케이션이 온라인 상태를 유지할 수 있다.

 

● 유연한 모듈 참조를 지원해서 어플리케이션의 요구 사항에 맞게 모든 모듈을 컴파일 , 재컴파일 할 수 있다.

 

● 어플리케이션의 확장성 , 그리고 서드 파티 도구와 통합할때 유용하다.

 

 현재 거의 모든 리눅스 배포판이 이 아파치를 지원한다.

 

 

단점

 

● 정적인 데이터만 처리가 가능하다.

 

● 자체적으로는 다른 서비스와 상호작용이 불가능하다. ( 상호작용을 해야할 경우 모듈 참조를 해야함 )

 

● 프로그램 구조상 다소 무거워 접속자가 많을 경우 지연이 있다.

 

● 대형 서비스에선 NginX, IIS 등을 선호하는 경향도 있다

 

 

 

하지만 규모가 크다고 하여 무조건 아파치 웹서버를 기피하는 것은 아니다.

 

대규모의 복잡한 서비스이기 때문에 필요한 다양한 확장 서비스들이 아파치에서만 지원되는 경우도 많고

 

오랜 기간 사용되며 쌓여온 레퍼런스나 안정성 등 다른 웹 서버 프로그램에서 대체할 수 없는 장점 때문에

 

금융권 등 대규모 엔터프라이즈급 서비스에서도 여전히 많이 사용된다.

 

 

아파치는 1995년에 나왔는데도 2024년인 현재까지 최신버전은 2.4.x 다.

 

실제 운영중인 웹사이트 중에는 지금까지도 아파치 1.x 대에 머물러 있는 곳도 있다고 한다.

 

너무 기능 추가나 발전이 없는게 아닌가 싶기도 하겠지만 그만큼 안정화가 잘 되어 있는 서버라는 뜻일 수도 있다.

 

사실 아파치 서버 자체는 웹 서버로서 아주 기본적인 기능만 수행하는 것이고,

 

PHP를 비롯해서 동적 웹 페이지를 만드는 기능이라든가 하는 대부분의 발전된 기능은 외부 모듈을 붙여서 구현한다.

 

오랜 역사와 높은 시장 점유율 덕분에 이러한 외부 모듈이 많고, 안정화도 잘 되어 있는것이

 

아파치를 찾게 되는 주된 이유 중 하나다.

 

 

 

 

이렇게 Apache에 대해서 포스팅 해보았다.

 

다음번 포스팅에는 NginX에 대해서도 다루어 보도록 하겠다.

 

 

 

 

'개발지식' 카테고리의 다른 글

REST,REST API  (0) 2024.08.21
엔진엑스 (NGINX)  (0) 2024.05.08
동기 , 비동기 (Synchronous , Asynchronous)  (0) 2024.04.24
싱글스레드 , 멀티스레드 (Single Thread , Multi Thread)  (0) 2024.04.17
디자인 패턴 (Design Pattern)  (0) 2024.04.14