Nginx란?
Nginx는 경량 웹 서버입니다.
클라이언트로부터 요청을 받았을 때 요청에 맞는 정적 파일을 응답해주는 HTTP Web Server로 활용되기도 하고,
Reverse Proxy Server로 활용하여 WAS 서버의 부하를 줄일 수 있는 로드 밸런서로 활용되기도 합니다.
웹서버(web server) : 주로 정적 콘텐츠(이미지나 정적 HTML 등)를 제공하기 위해 설계되었으며 동적 콘텐츠 요청을 식별하여 앱서버(app server)로 요청을 전달하는 역할을 수행하는 서버.
역방향 프록시(reverse proxy)
: 클라이언트의 요청을 받아 웹서버로 전달하여 응답을 받은 후 다시 클라이언트에 전달하는 역할을 수행하는 서버. 즉, 클라이언트와 웹서버 사이에 존재하는 서버
Nginx 흐름
Nginx는 Event-Driven 구조로 동작하기 때문에 한 개 또는 고정된 프로세스만 생성하여 사용하고,
비동기 방식으로 요청들을 Concurrency 하게 처리할 수 있습니다.
위의 그림에서 보이듯이 Nginx는 새로운 요청이 들어오더라도 새로운 프로세스와 쓰레드를 생성하지 않기 때문에 프로세스와 쓰레드 생성 비용이 존재하지 않고, 적은 자원으로도 효율적인 운용이 가능합니다.
이러한 Nginx의 장점 덕분에 단일 서버에서도 동시에 많은 연결을 처리할 수 있습니다.
Nginx 구조
Nginx는 하나의 Master Process와 다수의 Worker Process로 구성되어 실행됩니다.
Master Process는 설정 파일을 읽고, 유효성을 검사 및 Worker Process를 관리합니다.
모든 요청은 Worker Process에서 처리합니다. Nginx는 이벤트 기반 모델을 사용하고, Worker Process 사이에 요청을 효율적으로 분배하기 위해 OS에 의존적인 메커니즘을 사용합니다.
Worker Process의 개수는 설정 파일에서 정의되며, 정의된 프로세스 개수와 사용 가능한 CPU 코어 숫자에 맞게 자동으로 조정됩니다.
Nginx 장점
- 로드 밸런싱 : 요청이 많은 사이트를 운영하는 경우 하나의 서버가 아닌 여러 대의 서버를 두고 운영을 하게 됩니다. 그럴 경우 특정 서버에만 요청이 몰리지 않도록 하는 역할을 NGINX가 수행하게 됩니다.
- 공격으로 부터 보호 : NGINX를 사용하면 웹사이트나 서비스에서 실제 서버의 IP 주소를 필요로 하지 않기 때문에 DDoS와 같은 공격이 들어와도 NGINX를 공격하게 되지 실제 서버에는 공격이 들어오는 것을 막을 수 있습니다.
- 캐싱 : NGINX는 콘텐츠를 캐싱할 수 있어 결과를 더 빠르게 응답하여 성능을 높일 수 있습니다.
Apache와 비교
Apache
- 쓰레드 / 프로세스 기반 구조로 요청 하나당 쓰레드 하나가 처리하는 구조
- 사용자가 많으면 많은 쓰레드 생성, 메모리 및 CPU 낭비가 심함
- 하나의 쓰레드 : 하나의 클라이언트 라는 구조
Nginx 방식
참고 :
https://velog.io/@wijihoon123/Nginx%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80
https://medium.com/@su_bak/nginx-nginx%EB%9E%80-cf6cf8c33245
https://azderica.github.io/00-network-nginx/
https://whatisthenext.tistory.com/123
'개발합시다. > BackEnd 공부' 카테고리의 다른 글
Redis의 모든 것 (0) | 2021.12.07 |
---|---|
mongoDB의 모든 것 (0) | 2021.12.07 |
Django 정리 (0) | 2021.12.06 |
Django 기초 정리 (0) | 2021.12.06 |
네트워크 관련 면접 질문 정리 ① (0) | 2021.10.06 |