안녕하세요! ITibiza입니다.
오늘은 간단하게나마 Nginx에 대해서 알아보고 Apache와 비교해 보려고 합니다!
현 시점에서 대중적으로 가장 많이 사용하고 있는 Server이니 만큼 해당 글이 조금이나마 도움이 되길 바라겠습니다.
NGINX의 탄생
NginX란 2004년 러시아의 개발자 이고르 시쇼브(Igor Sysoev)에 의해 처음 개발 되었습니다.
기존 Apache는 전통적으로 C10K 문제(한 하나의 서버가 1만 개 이상의 동시 연결을 처리하는 데 어려움을 겪는 문제 )
를 겪고 있었는데 그 문제점을 보완하기 위해 이고르 시쇼브 아래와 같이 애기 했습니다.
우리가 개발한 응용 프로그램이 OSI7 Layer 중 Application(응용) Level에서 동작하고
그 아래 Level에서 NginX같은 웹 서버가 Http 통신을 제공하게 된다.
위와 같이 해당 C10K 문제가 해결되지 않다 보니 NginX가 탄생하게 되었고 둘의 차이 점을 좀 더 자세하게 알아 보도록 하겠습니다!
NginX 와 Apache의 차이
1. Apache
Apache의 경우 프로세스/스레드 기반 아키텍처를 사용하고 있습니다. 해당 처리 방식은
Client가 Http 요청을 보낼 때, Apache는 MPM(Multi-Process Module)을
사용하여 처리하게 되는데 MPM에는 크게 두 가지 방식이 있습니다.
1-1. PreFork방식(다중 프로세스 처리)
Client 요청에 대해 Default 개수 만큼 Apache 자식 프로세스를 생성하여 처리하고,
요청이 많을 경우 Process를 생성하여 처리하는 방식을 사용합니다.
해당 방식은 Apache 설치 시, Default로 설정 되 있습니다.
1-2. Worker 방식(Multi-Process Thread)
Prefork와 같이 Default Apache 자식 프로세스를 생성하고 요청이 많아지면
각 프로세스의 스레드를 생성해 처리하는 구조입니다.
두 방식의 특징은 우리가 흔히 알고 있는 프로세스와 쓰레드 사용의 장/단점과 동일합니다.
위에서 언급했던 C10K(한 하나의 서버가 1만 개 이상의 동시 연결을 처리하는 데 어려움을 겪는 문제)를 생각해 보면 Apache는 접속마다 Process또는 Thread를 생성하는 구조입니다.
만약 동시 접속 요청이 10,000 개라면 그 만큼 Process or Thread 생성 비용이 들 것이고
대용량 요청을 처리할 수 있는 웹 서버로서의 한계를 드러내게 됩니다.
2. NginX
NginX의 경우 이벤트 기반 아키텍처를 사용하고 있습니다.
이벤트 기반 아키텍처는 Event-Driven 방식으로 동작하게 됩니다. 한 개 또는 고정된 프로세스만
생성 하고, 그 프로세스의 내부에서 비 동기 방식으로 효율적으로 작업들을 처리하게 됩니다.
따라서 동시 접속 요청이 많아도 Process 또는 Thread 생성 비용이 존재하지 않습니다!
위에서 비 동기 방식으로 효율적으로 작업을 처리한다고 언급 했는데 좀 더 살펴본다면
Event-Driven 방식에선 작업을 하다 I/O, Soket read/write 등 CPU가 관여하지 않는 작업
이 시작되면 기다리지 않고 바로 다른작업을 수행 합니다.
진행중인 I/O등의 작업들이 끝나면 기존에 처리하던 작업을 다시 처리하는 이벤트가 발생하고
그 작업을 처리하게 됩니다.
결론
Apache는 모듈 확장성과 유연한 설정이 필요하거나 동적 콘텐츠를 많이 처리하는 환경에 적합한 것 같고
NginX의 경우에는 높은 성능과 동시 연결 처리 능력이 필요하면서 정적 콘텐츠 제공과 리버스 프록시 기능이 중요한 환경에 적합한 것 같습니다.
오늘은 이렇게 간단하게나마 Apache 와 NginX에 대해서 비교 분석해 보았는데요!
❝ 그냥 이 서버가 그나마 최신이고 다들 이걸 쓰니까 나도 따라 써야해! ❞가 아니라 그래도
위 글을 읽어 보시면서 아 내가 이런 상황에서는 이런 서버를 사용 해야겠구나 알아가는 시간이 되었으면 좋겠습니다.
필자의 잘못된 부분이나 피드백은 언제든지 댓글로 남겨주세요!
감사합니다^^
'개발 > Server' 카테고리의 다른 글
[호스팅] Cloudtype 리뷰 (5) | 2024.08.10 |
---|