본문 바로가기
Etc

왜 NGINX를 사용할까?

by 올엠 2020. 11. 12.
반응형

요즘 웹서버를 구성하면 대부분 서버내에 NGINX를 구성하고 NGINX 프록시 기능을 이용하여 아파치 톰캣를 추가로 구성하는 경우가 많다.

아파치 톰캣도 동일한 웹서버인데 왜 NGINX를 구성하는 것일까? NGINX를 사용하는 가장큰 이유는 무엇일까?

 

1. 성능

Event-driven 구조

NGINX 태생이 아파치의 프로세스, 스레드 구조로 인한 병목 현상 해결하기 위해 Event-driven 구조로 만들어졌기 때문에 다중 접속에 대한 성능이 높다. 그리고 CPU 코어별 Worker를 지정하여, Event 처리 효율을 최적화 했다.

아래 글을 읽어보면, Apache Thread 방식과 NGINX  Event 방식을 이해하는데 도움이 될 것 같다.

 

https://www.iij.ad.jp/en/dev/tech/mighttpd/

 

The Architecture of the Mighttpd High-Speed Web Server | Technology | IIJ

IIJ provides Internet connectivity and network-related services, network systems construction, operation and maintenance, development and sales of tele communication equipment, ATM operation business.

www.iij.ad.jp

https://www.iij.ad.jp/en/dev/tech/mighttpd/

Cache

또 하나는 바로 Cache 기능에 있다. NGINX는  캐싱을 하도록 구성이 가능하고 Event 처리 기반이기 때문에 Tomcat, Apache 보다 이를 처리하는 리소스 비용이 적다. 

하여 NGINX를 프론트 엔드에 배치하여 앞단에서 요청을 받아 병목을 해소하고, Worker를 통해 들어오는 이벤트를 Tomcat으로 처리하는 방식이라고 할 수 있다. 실제 하나의 서버에서도 NGINX+Tomcat을 구성하는 경우가 많은데, NGINX와 Tomcat을 실행하여 서로의 장점인 웹 요청와 실체 처리 엔진 분리하여 고효율로 처리하도록 한다.

 

2. 보안

Front와 Back-end로 처리를 분리

실제 하나의 서버에서도 NGINX+Tomcat을 구성하는데 이부분도 보안에도 조금의 장점을 가져가게 된다.

웹 서비스를 개발하면서, 버전 관리도 있지만, 개발시 모든 예외 처리를 진행하는 경우가 많지 않다.

여기에 기본적인 보안 구성도 놓치는 경우가 많다.

많은 해커의 공격이 서버에서 오류 내용을 처리해 놓지 않은 경우 공격이 가능한 취약점이 발견될 수 있다.

그리고 Apache 등 알려진 공격 포인트를 잡아서 진행하는데, 기능/모듈이 많아 여러 요청을 처리하는 Apache는 보안에 취약한 부분이 노출될 가능성이 높다. 하지만 NGINX를 프론트에 구성하고 백엔드를 Tomcat으로 구성한다면  NGINX는 가벼우면서 단순한 구조이기 때문에, 알려진 공격 포인트들로 보호가 가능하다.

외부에서 보안 공격을 진행할 때 외부에서 받아들인 내용을 NGINX에서 받고 실제는 Tomcat에서 처리하기 때문에 공격 포인트의 노출이 낮아지게 된다.

반응형