Print
카테고리: [ Nginx ]
조회수: 8422

앞에 글에서 NginX는 초기부터 다수의 사용자를 커버하기 위하여 생겨났다고 말씀드렸는데,

이러한 NginX를 있게 해준 가장 큰 특징 중의 하나가 (그리고 Apache와 구분되는..) 바로 Asynchronous,

Event-Driven manner (이하 비동기 이벤트 처리 방식)입니다.

쉬운 이해를 위해, NginX의 Asynchronous, Event-Driven 방식과 Apache의 Thread 기반 방식에 대해서 

예를 들어 정리하여 보았습니다.

 

여러분들, 옷을 사러 A 매장에 갔다고 생각해봅시다. 

 

 이 매장은 개개인의 손님마다 각각의 점원이 배치되어 옆에서 서비스를 합니다. 매장 입구에서 인사를 

하는 것을 비롯해, 옷을 보여주고, 설명하고, 피팅을 도와주기도 하고, 계산을 완료하고 매장에 나설 때까지

점원 한 명이 옆에서 서비스를 제공합니다.

만약 점원들 모두 일을 하는 중이라면, 새로 방문하는 손님은 먼저 들어간 손님이 나올 때까지, 매장 앞에서

기다려야 합니다.

 

 

여기 또 다른 매장 B가 있습니다.

 

이 매장은 손님이 오면 맞이하고, 옷을 물어보면 찾아주고, 입어보기를 원하면 피팅룸을 안내해주고, 

계산을 하려 하면 도와주는 방식으로 서비스를 제공합니다. 개개인의 점원이 손님 옆에 있는 것이 아니라,

손님이 무언가 요청하면(이벤트가 발생하면) 그때에 맞춰 일을 합니다. 더 적은 수의 점원으로 더 많은 수의

고객에게 서비스를 제공하는 것입니다.

 

Apache가 A 매장처럼, 하나의 클라이언트 요청을 하나의 Thread에서 처리하여 요청이 늘어날수록 필요한

Thread 역시 늘어나는 방식이라면, NginX는 B 매장 처럼 미리 설정된 개수의 worker 프로세스(점원 수)안에서

이벤트가 발생할 때(요청이 올때)마다 자체적으로 요청을 분배하여 여러 개의 worker에서 나눠서 처리를 하게됩니다.

미리 설정된 개수의 worker 프로세스만을 사용하기 때문에 CPU, 메모리 등의 자원 사용률이 낮은 편입니다.

 

이러한 비동기 이벤트 처리방식은 적은 자원을 효과적으로 사용하는데에는 큰 장점이라고 생각합니다.