PSD( Private-Self-Development )

Nginx 란? 본문

Backend/기타

Nginx 란?

chjysm 2023. 1. 19. 10:33

Nginx 란? 

트래픽이 많은 웹사이트의 서버(was)를 도와주는 비동기 이벤트 기반 구조의 웹서버 프로그램

 

Nginx 의 특징

  • 적은 자원을 사용해 고성능을 발휘한다.
  • 요청에 의한 정적 파일(HTML, CSS, Javascript, image 등) 을 응답해주는 웹서버
  • 로드 벨런서의 역할도 수행
  • 웹 클라이언트와 was 서버 사이에 위치한다.
  • 캐싱 지원 ( http 프로토콜을 사용하여 전달하는 콘텐츠를 캐싱, 한 번 서버에서 응답받은 것을 스스로 보관하고 클라이언트에 전달 )
  • 콘텍스트 스위칭 의 비용이 적다.
  • 동적 설정 변경 지원

단점

  • 개발자가 직접 모듈을 만들기 까다롭다.(확장성이 좋지 못하다.)

 

기존 Apache 서버와의 차이점 (사용 이유) 

기존에 사용하던 apache 서버는 요청이 들어오면 커넥션 형성을 위해 프로세스를 생성한다.(몇개의 프로세스를 미리 생성해 놓는다 - PREFORK 방식) 이러한 구조는 개발하기 쉽다(확장성이 좋다)는 장점이 있다.

하지만 이는 서버의 리소스를 많이 사용(프로세스가 계속 늘어나 메모리 낭비가 심하다)하여,

서버 트래피량(C10K 문제)이 높아지면 더이상 커낵션을 생성하지 못한다는 한계가 있었다.

이러한 한계점을 극복하고자 나온것이 Nginx 서버이다.

 

 

Nginx 서버의 동작 원리

Nginx 는 비동기 이벤트 기반 구조(Asynchronous Event Driven Model)를 가진다.

[마스터 프로세스]

설정 파일을 읽어 워커 프로세스를 생성(동적 설정 변경 지원 - 설정 파일을 변경하면 거기에 맞게 마스터 프로세스가 워커 프로세스를 생성|제거 한다.)

 

[워커 프로세스]

실제 일처리를 하는 프로세스(보통 CPU 의 코어 수 만큼 생성하여 콘텍스트 스위칭을 줄여 성능을 높인다)

워커 프로세스가 생성될 때 각자 지정된 listen 소켓을 배정 받고 

그 소켓에 요청이 들어오면 커넥션을 형성하고 처리한다.

 

커넥션은 정해진 Keep-Alive 시간 만큼 유지되며,

커넥션에 아무런 요청이 없으면 워커 프로세스는 새로운 커넥션을 생성하거나

이미 만들어진 다른 커넥션으로 부터 들어온 요청을 처리한다.

이러한  요청 처리를 이벤트 라고 한다.

 

[이벤트]

이벤트 들은 OS 커널이 큐 형식으로 워커 프로세스에 전달되며 

워커 프로세스가 처리할 때까지 비동기 방식으로 대기한다.

워커 프로세스싱글 스레드로 이벤트를 꺼내서 처리한다.

 

큐에 담긴 요청중 시간이 오래걸리는 요청이 있다면  

스레드 풀을 생성하여 처리를 넘기게 된다. 

 

이와 같이 커넥션 연결 후 요청이 없으면 방치되는 아파치 서버와는 달리 자원을 효율적으로 사용한다. 

 

 

Nginx 서버의 로드벨런서 기능

Nginx가 여러 동시 커넥션을 관리하는 도중 뒷단에 서버가 추가되는 상황이 있다.

그 때 Nginx가 로드 밸런서의 역할을 담당하게 된다.

동시 커넥션을 유지하여 기존 요청을 계속 처리하면서 뒷단에 서버를 추가할 수 있다.

Nginx는 이런 설정 변경을 초당 수십번을 해도 무리없이 커넥션을 관리하고 요청을 서버에 전달하게 된다.

 

 

 


https://ssdragon.tistory.com/60

 

Nginx란?

2022.02.21 게시글 등록 2022.10.03 수정 및 추가 - 오타 수정 - Q&A 추가 - 기존글 수정 및 추가 올해 캡스톤 프로젝트에서 NGINX를 사용하게 됐는데 어떤 것인지 잘 몰라서 공부하기로 했다. 🧐 Nginx란?

ssdragon.tistory.com

https://kanoos-stu.tistory.com/entry/Nginx

 

[Nginx] Nginx란, Nginx 와 Apache

Nginx 란 트래픽이 많은 웹사이트의 확장성을 위해 개발된 경량의 고성능 웹서버이다. Nginx는 적은 자원의 사용으로 높은 성능과 높은 동시성을 목표로 만들어졌다. Nginx가 등장하기 전에는 Apache

kanoos-stu.tistory.com