dogo_ day

Nginx 란? 본문

IT/DevOps_

Nginx 란?

dogo_ 2023. 6. 15. 13:01

Nginx 란?

높은 성능과 확장성을 갖춘 오픈 소스 웹 서버 소프트웨어이다. Igor Sysoev에 의해 개발되었으며, 현재는 Nginx Inc.가 관리하고 있다. Nginx는 경량화된 디자인과 이벤트 기반 아키텍처를 가지고 있어 많은 웹 트래픽과 연결을 효율적으로 처리할 수 있다.

정의만 이야기하면 재미가 없으니 Nginx의 탄생배경도 알아보자

 

Apache(아파치)를 많이 들어보았을 것 이다.

아파치는 웹 서버 소프트웨어로, 초창기에는 인터넷 상에서 웹 페이지를 제공하는 역할을 했다.

아파치 특징
1. prefork 형식 : 요청 전 프로세스를 미리 생성하는 컨셉으로 동적 컨텐츠 처리 가능 및 확장성(다양한 모듈을 생성->서버에 빠르게 추가 가능)
2. 프로세스가 많다 : 메모리 부족 현상 발생
3. 다양한 모듈을 생성하는 것은 장점이자 리소스의 양이 늘어나므로 무거워지는 단점이 있다
4. 컨텍스트 스위칭을 많이 한다 : cpu 부하

 

시간이 흐르면서 웹 페이지는 단순히 텍스트만 보여주는 걸로 만족하지 않았다.

웹 페이지.. 즉, 클라이언트 요청이 다양하고(스마트폰) 많아지면서 connection도 많아졌다.

이런 단어도 생겼었다. -> C10K : Connection 10000 Problem

connection을 재사용하기 위해 persistent connection을 맺는 기법 중 하나인 keep-alive이 탄생

 

이러한 상황때문에 아파치로는 해결이 힘들었고 Nginx가 탄생하게 되었다.

https://www.youtube.com/watch?v=6FAwAXXj5N0

컨셉은 클라이언트 <-> 아파치 였던 구조에서 클라이언트 <-> Nginx <-> 아파치로 변경이 된다.

클라이언트의 커넥션을 유지하기위해 더 이상 아파치의 리소스를 사용하지 않아도 된다.

그리고 Nginx는 그 자체만으로 웹 서버이기 때문에 정적파일을 처리할 수 있고, 동적 파일에 대한 요청만 아파치와 커넥션한다.

https://www.youtube.com/watch?v=6FAwAXXj5N0

Nginx의 구조는 master process와 worker process로 구성 되어 있다. 새로운 커넥션 연결, 제거 및 새로운 요청을 처리하는 것을 event라고 부르며, os커널이 Queue형태로 worker process에게 전달한다.(비동기)

 

시간이 오래 걸리는 작업이 들어오게 된다면 어떻게 될까?(ex. disk I/O)

그럴 때를 대비해서 Thread Pool이라는 개념이 존재하며 오래 걸릴 것 같은 작업은 Thread Pool로 event를 위임한다.

https://www.youtube.com/watch?v=6FAwAXXj5N0

worker process는 CPU코어의 갯수만큼 생성이 된다. -> CPU의 컨텍스트 스위칭 사용을 줄이는 효과

즉, Nginx는 event-driven-model 이다.

 

장점만 있는 것은 아니다.

단점으로는 개발자가 직접 모듈을 만들기가 까다롭다.

BUT, 단점을 씹어 먹는 장점

- 동시 커넥션 양 최소 10배 증가

- 동일한 커넥션 수일 때 속도 2개 증가

https://www.youtube.com/watch?v=6FAwAXXj5N0

Nginx VS apache

이 두개의 웹 서버 소프트웨어는 대립관계가 아니며, 적재적소 사용하면 된다.

 

Nginx의 활용처

1. 정적 파일 서비스 : Nginx는 정적인 웹 콘텐츠(HTML, CSS, 이미지 파일 등)를 처리하여 웹 서버의 성능을 향상시킨다.

2. 리버스 프록시 서버 : Nginx는 웹 요청을 받아서 백엔드 서버로 전달하는 리버스 프록시 역할을 수행한다. 부하 분산, 캐싱, SSL 종단 감독 등을 구현할 수 있다.

3. 로드 밸런싱 : Nginx는 여러 대의 백엔드 서버에 웹 트래픽을 균등하게 분산시켜주는 로드 밸런싱 기능을 제공한다. 이를 통해 서버의 부하를 분산하여 성능을 향상시킬 수 있다.

4. SSL/TLS 종단 감독 : Nginx는 SSL/TLS 인증서를 로드 밸런서 또는 리버스 프록시로 사용하여 암호화된 트래픽을 처리할 수 있다.

ex) 클라이언트와는 SSL/TLS 암호화된 연결이 이루어지지만, 백엔드 서버와는 암호화되지 않은 연결로 통신한다.

5. 가상 호스팅 : 하나의 서버에서 여러 개의 도메인 또는 웹 사이트를 호스팅하는 가상 호스팅을 지원한다.

 

간단하게 Nginx에 대한 개념을 알아보았다.

누군가 Nginx에 대해 묻는다면...

Nginx가 왜 탄생하게 되었고, 어떠한 컨셉으로 동작하며 어떻게 활용되는지 알려줄 수 있게 되었다.😙

'IT > DevOps_' 카테고리의 다른 글

REST API 란?  (0) 2023.06.16
Nginx 그리고 Gunicorn  (0) 2023.06.16
Docker 란?  (0) 2023.06.15