아직 공부하고 있는 학생이니 틀린 점이 있을 수 있으니 피드백은 대환영 입니다.
목차
- WebServer
- Apache
- Nginx
- Apache vs Nginx
1. 웹 서버 (Web server)
👉 이해하는 데 도움이 되는 개념! 💡
- 호스트 🖥️ : 웹 서버 소프트웨어가 실행되는 물리적 또는 가상 컴퓨터를 말해요. 웹 서버가 HTTP 요청을 처리하고, 요청된 파일(HTML, CSS, 이미지 등)을 제공하는 역할을 한다면, 호스트는 이 역할을 수행하는 서버, 즉 컴퓨터 자체를 의미합니다.
예) http://localhost:3000 - 호스팅 🌐 : 웹사이트의 파일, 요소 및 콘텐츠를 인터넷 브라우저에게 전달하는 서비스입니다. 사용자가 도메인 명을 입력하면 일련의 과정(DNS)을 통해 웹사이트의 IP 주소로 변환되고, 그 IP 주소가 가리키는 서버로 연결됩니다. 호스팅 서비스는 웹사이트에 IP 주소를 할당해주고, 해당 서버가 인터넷에 연결될 수 있도록 네트워크 연결을 제공합니다.
예) AWS가 이 역할을 해줍니다.
웹 서버란 인터넷 상에서 클라이언트(웹 브라우저를 통해)로부터의 요청을 받아들이고, 이를 처리하여 적절한 응답을 제공해주는 소프트웨어입니다. 주로 HTTP를 사용하여 통신해요.
위 글로 간단하게 정의할 수 있습니다.

위 그림을 통해 웹 서버가 하는 일을 설명해보자면,
- 웹 서버는 파일들을 저장하는 역할을 해요. 📂
- 이 파일들은 웹사이트를 구성하는 파일로, HTML 문서, 이미지, CSS 스타일시트, JavaScript 파일 등이 포함됩니다.
- 웹 브라우저와 같은 클라이언트로부터 HTTP 요청을 받아들이고, 웹 페이지를 구성하기 위한 자원(HTML, CSS 등)을 HTTP 응답으로 제공해줍니다. 📥📤
- 정적인 자원을 처리하고 동적인 자원만을 WAS에 넘겨줌으로써 WAS의 작업 부담을 줄여줍니다.
아래에서 설명할 Apache와 Nginx는 모두 웹 서버에 속해요.
2. Apache 🚀
일반적으로 Apache라고 불리는데, 풀 네임은 Apache HTTP Server입니다. 이름처럼 HTTP를 통해 웹 콘텐츠를 제공하죠.
Apache는 1995년에 처음 출시되었어요. 현재 Windows, Linux, macOS와 같은 많은 운영 체제와 호환이 가능하고, HTTP뿐만 아니라, HTTPS, WebSocket 및 HTTP/2를 포함한 다양한 통신 프로토콜을 지원합니다.
주요 특징 ⭐
- 모듈 기반 아키텍처
- Apache 서버는 높은 성능과 유연성을 제공하는 모듈 시스템으로 유명해요. 이 모듈을 사용하면 사용자는 필요에 따라 서버를 수정하기 위해 기능을 쉽게 추가하거나 제거할 수 있답니다.
- 운영 방식 (MPM, Multi-Processing Modules)
- MPM 중 Prefork, Worker 모드가 주로 사용되는데, Nginx가 개발되기 이전 시점의 문제점을 알아보기 위해 Prefork 방식만 주로 살펴보도록 할게요.
- Prefork MPM
- 각 요청을 처리하기 위해 별도의 프로세스를 생성하는 방식입니다.
- 요청 1개당 프로세스 1개를 생성하죠.
- 서버 시작:
- Apache 서버가 시작될 때 여러 개의 프로세스가 미리 생성됩니다. 이들 프로세스는 요청이 들어오기를 기다리죠.
- 이 미리 생성된 프로세스들을 "자식 프로세스"라고 부릅니다.
- 요청 수신:
- 클라이언트가 웹 서버에 요청을 보냅니다.
- 커넥션 형성:
- 요청이 들어오면 대기 중이던 자식 프로세스 중 하나가 이 요청을 처리하기 위해 선택됩니다.
- 요청 처리:
- 선택된 자식 프로세스가 요청을 처리하고, 결과를 클라이언트에게 응답으로 반환합니다.
- 요청 처리가 완료되면 자식 프로세스는 다시 대기 상태로 돌아가 다음 요청을 기다립니다.
- 안정성:
- 각 요청이 하나의 독립된 프로세스에서 처리되기 때문에, 하나의 프로세스에서 문제가 발생해도 다른 요청에 영향을 미치지 않아요.
- 호환성:
- 스레드를 사용하지 않기 때문에, 스레드 안정성을 보장하지 않는 라이브러리와도 잘 호환됩니다.
- 메모리 사용량:
- 각 요청이 별도의 프로세스를 사용하기에 메모리 사용량이 많아요.
- 성능:
- 트래픽의 수가 많아질 때, 성능이 떨어질 수 있어요. (C10K 문제)
3. Nginx 🌟
Nginx는 Apache 서버의 문제인 동시 최대 접속 가능 수가 10000개였던 C10K 문제를 해결하기 위해 개발되기 시작했어요.
아래와 같은 기술적인 장점을 통해 Apache의 문제를 해결하였습니다.
주요 특징 ✨
- 이벤트 기반 아키텍처 (Event-Driven)
- 비동기 방식으로 작동하여 높은 동시성 처리가 가능해요.
- 여러 개의 요청을 단일 스레드에서 처리할 수 있습니다.
- 역방향 프록시 (Reverse Proxy)
- 클라이언트의 요청을 받아 백엔드 서버로 전달하고, 백엔드 서버의 응답을 클라이언트에게 반환하는 중간 서버 역할을 해요.
- 로드 밸런싱 (Load Balancing)
- 여러 서버에 트래픽을 분산시켜 서버 부하를 균등하게 하는 기술이에요.
- 정적 콘텐츠 제공 성능 최적화
- 정적 파일 제공시에도 새로운 프로세스를 생성하는 Apache와는 달리, 정적 파일 제공에 최적화 되어 있어, 매우 빠르고 효율적으로 정적 콘텐츠를 제공합니다
- 설정 및 확장성
- 설정 파일이 Apache보다 상대적으로 간단하고, 로드 밸런서, 리버스 프록시 등의 기능을 손쉽게 설정할 수 있어 확장성이 뛰어나다.
4. Apache vs Nginx 간단 비교 🆚
항목 | Apache | Nginx |
아키텍처 | 프로세스/스레드 기반 | 비동기 이벤트 기반 |
운영 모드 | Prefork, Worker, Event | 단일 이벤트 루프 |
자원 사용량 | 높음 | 낮음 |
성능 | 낮은 동시성, 정적 파일 속도 보통 | 높은 동시성, 정적 파일 속도 빠름 |
모듈 및 기능 확장 | 풍부한 모듈 및 기능 | 제한된 모듈 및 기능 |
설정 파일 | .htaccess 지원 | 단일 설정 파일 |
역방향 프록시 | 제한적 지원 | 기본 제공 |
로드 밸런싱 | 모듈을 통해 제공 | 기본 제공 |
커뮤니티 및 문서화 | 광범위하고 풍부한 자료 | 상대적으로 적음 |
요약 및 결론 📌
- Apache는 요청 1개당 1개의 프로세스를 생성하기 때문에, 안정성이 보장되지만 메모리와 동시성 측면에서 성능이 좋지 않다
- Nginx는 성능 측면에서 Apache보다 우수하지만, 보안적인 측면에서는 떨어질 수 있다.
-> 대규모 트래픽을 처리해야 할 때에는 Nginx, 보안적인 측면, 다양한 기능을 생각해야 할 때 Apache
[참고 자료]
'네트워크' 카테고리의 다른 글
HTTP 1.1과 HTTP 2.0 (0) | 2024.09.19 |
---|---|
비연결성과 비상태성 (1) | 2023.09.30 |
쿠키와 세션 (0) | 2023.09.30 |