-
NGINX란?MSA & 쿠버네티스(Kubernetes) - k8s 2022. 6. 25. 00:01
NGINX란?
NGINX는 웹 서비스, 리버스 프록시, 캐싱, 로드 밸런싱, 미디어 스트리밍 등을 위한 오픈 소스 소프트웨어입니다.
최대 성능과 안정성을 위해 설계된 웹 서버로 시작했습니다.
HTTP 서버 기능 외에도 NGINX는 이메일용 프록시 서버와 HTTP(TCP/UDP) 서버용 리버스 프록시 및 로드 밸런서로도 사용할 수 있습니다.
프록시 개념잡기
리버스 프록시, 프록시 서버에 대한 이야기가 나옵니다.
프록시란 대리인이라는 뜻을 가지는 단어로 두 PC가 통신을 할 때 중간에 들어가 있는 중계 서버입니다.
인터넷망을 기준 이 프록시 서버가 어디에 위치하느냐에 따라 포워드 프록시/ 리버스 프록시로 나뉘게 됩니다.
Forward Proxy
Reverse Proxy
좀 더 자세하게 알고 싶으면 다음글을 참조하시면 좋을 것 같습니다.
https://junuuu.tistory.com/199
프록시 얘기를 하게 되었는데 결국 NGINX는 PC와 PC 사이의 미들웨어로서 동작하는 것 같습니다.
등장 배경
유닉스 기반의 NCSA HTTP라는 웹서버가 존재하였지만 프로그램의 버그가 많았고 개선되어 Apache라는 웹서버가 출시됬습니다.
하지만 Apache는 요청이 들어오면 프로세스 할당하는 방식으로 동작하기 때문에 인터넷의 발전과 함께 요청이 많아지면서 Connection 10000개를 연결하면 발생하는 C10K 문제가 생깁니다.
바로 Connection 마다 프로세스가 할당되면서 각 프로세스에 메모리가 할당되기 때문에 메모리 부족으로 이어진 것입니다.
또 프로세스가 많아지면 CPU의 컨텍스트 스위칭 비용이 증가하겠죠?
Igor Sysoev 라는 개발자가 기존 웹 서버가 많은 수 10000개의 동시 연결을 처리할 때 겪었던 어려움을 해결하기 위해 NGINX를 2002년 부터 만들기 시작하여 2004년에 릴리즈 되었습니다.
초창기에 Apache 서버와 함께 사용되기 위해 만들어졌으며 Apache 서버가 지닌 구조적 한계점을 극복하려고 했습니다.
Nginx는 Connection 마다 프로세스가 할당되는 방식이 아닌 event를 비동기적으로 처리하는 방식을 채택하게 됩니다.
정적인 컨텐츠를 빠르게 처리하는 능력이 강하여 주목받기 시작하였습니다.
또한 많은 양의 연결을 처리할 수 있기 때문에 웹 서버의 기능을 넘어 리버스 프록시 및 로드 밸런서로 활용되면서 들어오는 트래픽을 관리합니다.
NGINX VS APACHE
Apache HTTP 서버는 아파치 소프트웨어 재단에서 관리하는 웹 서버 소프트웨어 오픈소스입니다.
공식문서에는 NGINX는 웹 서버 성능을 측정하는 벤치마크에서 지속적으로 Apache 및 기타 서버의 성능을 능가한다고 명시되어 있습니다.
NGINX는 이벤트 중심 접근 방식으로 하나의 스레드 내에서 여러 요청을 처리하는 구조입니다.
비동기 구조로 적은 리소스로도 많은 트래픽을 효율적으로 처리할 수 있습니다.
Apache는 프로세스 기반 접근 방식으로 하나의 스레드가 하나의 요청을 처리하는 구조입니다.
매 요청마다 스레드를 생성 및 할당해야 하기 때문에 리소스를 많이 잡아먹습니다.
아래의 페이지에서 조금 더 자세하게 NGINX와 Apache에 대한 설명을 볼 수 있습니다.
https://sorjfkrh5078.tistory.com/289
결론
요약하자면 빠른 정적 컨텐츠를 처리하고 싶고 대용량 트래픽을 처리하는 웹 사이트의 경우는 Nginx를 사용하자
Nginx에 없는 핵심 모듈을 사용할 경우 Apache를 사용하자
출처
https://www.nginx.com/resources/glossary/nginx/
https://sorjfkrh5078.tistory.com/289
https://www.youtube.com/watch?v=6FAwAXXj5N0&t=210s
'MSA & 쿠버네티스(Kubernetes) - k8s' 카테고리의 다른 글
Docker 설치해보기 + Docker에 Jenkins 설치(윈도우10 Home Edition) (1) 2022.07.22 도커란? +(도커 이미지란?) (0) 2022.06.29 Service Discovery란? (0) 2022.03.24 로드 밸런서(Load Balancer)란? (0) 2022.03.22 Message System이란? (0) 2022.03.18