Nginx

최민수·2023년 4월 14일
0

CS 전공지식

목록 보기
24/36

Apache HTTP 서버의 탄생 역사

1995년, 웹서버 NCSA HTTPd 라는 것이 존재했는데 이 소프트웨어는 버그가 상당히 많고 개발자들이 사용하기 불편했다고 한다.

그래서 이 버그들을 수정하고, 기능 추가, 구조 변경 등을 통해서 새로운 웹 서버를 만들었는데 그것이 바로 Apache Server 이다.

즉, Apache Server 가 만들어진 주요 목적은 버그 수정의 안전성에 있다고 볼 수 있다.


Apache 서버에 닥친 문제와 한계점

아파치 서버는 새로운 요청이 들어올 때마다 커넥션을 형성하기 위해 새로운 process를 계속 만들어서 할당하는 동작 방식을 사용한다.

이런 구조적 특징은 개발자들이 새로운 모듈을 만들어서 서버에 기능을 추가하기에 용이했고 따라서 확장성이 좋은 장점을 가지게 되었다.

하지만, 곧 C10K 문제를 마주하고 한계를 보이기 시작한다.
점점 컴퓨터의 보급이 많아지고 서버의 개수가 많아지는 시대의 흐름에 따라, 동시에 오는 Connection 10,000 개 정도의 요청에 대해 커넥션이 정상적으로 만들어지지 않는 문제였다.

아파치 서버의 문제점은 아래 그림에 잘 나와있다.

우선 새로운 요청마다 새로운 프로세스를 만드니 메모리가 부족해지고, 프로세스가 유지하는 리소스 양이 확장성으로 점점 무거워지고, 또 프로세스를 바꾸어가며 계속 작업을 해야하기 때문에 컨텍스트 스위칭의 빈도가 많아져 CPU 부하가 커졌다.


Ngnix 의 등장

2004년, 아파치 서버의 주요한 한계(동시에 들어오는 많은 양의 요청을 처리하지 못한다)를 극복하고자 새로운 구조의 Ngnix 가 등장한다.

Ngnix 의 구조적인 특징은 아래 그림과 같다.

우선 프로세스가 요청마다 계속해서 만들어지고 할당되는 과정이 아파치 서버 구조의 문제점이었기 때문에 하나의 worker process가 커넥션을 형성하고 작업이 완료되면 또 다른 요청을 처리하는 식으로 구조 변경을 진행했다.(os커널이 요청을 queue 형태로 쌓아둠)

또한 CPU 개수만큼 worker process를 생성해 컨텍스트 스위칭의 오버로드 비용을 줄였다. 게다가 프로세스의 개수가 적다보니 개발자가 설정 파일을 변경하고 기존의 프로세스가 담당하던 부분 마무리 후 비활성화 시킨 뒤 새로운 프로세스를 만들어 이어가게 할 수 있게 됐다. 이것은 동적 설정 변경이 가능하다는 큰 장점이었다.

이렇게 되어, 동시에 유지할 수 있는 커넥션 개수가 100배 ~ 1000배 증가할 수 있게 되었고 동일한 커넥션 개수일 때 속도가 2배 향상되는 드라마틱한 성능 개선이 있었다.


Ngnix 가 주목받게 된 계기

2008년, 드디어 아이폰의 등장으로 스마트폰의 신세계가 열리게 되었다. 사용자의 수는 급격하게 증가하고 실시간 정보에 대한 수요가 매우 커지면서 동시 요청의 상황이 매우 빈번하게 발생하게 되었다. 이 때 기존의 아파치 서버를 사용하여 서비스를 제공하던 기업들은 도저히 이 많은 요청을 감당할 수 없었고, 이 때 이 문제를 쉽게 해결할 수 있는 Ngnix 기술로 눈을 돌리게 되었다.


Apache vs Ngnix 선택의 근거?

하지만 Ngnix아파치 보다 메모리 사용량이 월등히 적고 또 초당 처리요청이 매우 많다는 점은 그저 Ngnix가 가진 특징일 뿐이다. 이제 각각의 기술이 어떻게 출현했고 어떤 장단점이 있는지 확인했으니 서비스의 상황에 맞게 선택을 해야 한다.

정리하자면,

Apache는 안정성 문제를 해결하기 위해 세상에 나왔다. 그리고 역사가 오래되었기 때문에 그동안의 꾸준한 업데이트를 통해 현재 많은 os에서 호환된다는 장점이 있다. 또한 확장성이 좋다는 장점도 가지고 있다.

Ngnix는 동시성 문제를 해결하기 위해 세상에 나왔다. 아파치 서버보다 동시 커넥션을 훨씬 더 잘 수행하고 또 처리 속도도 매우 빠르다. 하지만 확장성은 아파치 보다 떨어져, 모듈의 종류는 더 적다는 단점이 있다.


영상 출처: [10분 테코톡] 🤫 피케이의 Nginx

profile
CS, 개발 공부기록 🌱

0개의 댓글