네트워크

Nginx란 무엇인가?

Jay_J 2024. 6. 14. 08:00

이번 학부 연구를 진행하면서 처음으로 웹서버와 통신하고 코딩을 할 일이 있었는데, 처음에는 우리 랩에 거주하시는 phd 조교가 a부터 z까지 셋업하는법을 알려줬고, 셋업을 했으나 말 그대로 보이는 코드만 복붙하는 코더처럼 진행하다보니 이후에 문제가 생겼을때 디버깅을 하거나, 어떤곳에서 오류가 생겼는지 찾지 못해 애꿎은 포트넘버만 만지작거리다가 며칠 내내 오류를 못 찾았었다. 하지만 오류는 생각보다 간단했다. nginx config설정에서 프록시 설정과 upstream서버의 포트넘버를 제대로 넘겨주고 있지 않았던 것이였다. 

 

저번학기 운영체제 강의에서도 잠깐 네트워크 부분을 공부할때 nginx라는 것이 "존재한다" 정도만 알고 넘어갔지만, 오늘은 존재를 넘어 이것들이 무엇인지, 어떻게, 그리고 왜 이것들을 쓰는지 살짝만 알고 넘어가 보자.

 

※"서버"란 무엇일까?

- Server를 영어로 직역하면 "봉사기" 이다. 그리고 쉽게 생각해 보자. 레스토랑을 가면 "서버"가 있다. 이 서버는 우리의 음식 주문을 받고, 주방에 주문을 전달해주며, 주방에서 나온 음식들을 다시 우리에게 가져다주는 역할을 한다. 쉽게 말해, 클라이언트(우리, 또는 브라우저)와 서버(요리사)간의 소통을 도와주도록 하는 대리인이다. 엄밀히 따지면 서버는 물리적인 컴퓨터이다. 용량과 효율이 뛰어난 컴퓨터속에 데이터들을 담아놓고, 클라이언트에서 서버측으로 요청이 오면 그에 맞는 source들을 클라이언트에게 가져다 주는 역할을 하는 장치이다.

 

서버를 도식화 한 그림

이러한 대표적인 웹 서버에는 Apache, Nginx, Tomcat 등이 있지만, 오늘은 Nginx에 대해 알아보고 가겠다.

 

그럼, 본문으로 돌아와서, "Nginx가 뭔가요?"

  • 가볍고 높은 성능을 가진 웹 서버 (Web Server) 이다.
  • HTTP Server로 활용되며 정적 파일들을 처리하기 위해 사용된다.
  • Reverse Proxy Server로 활용된다. 80번 포트로 들어오는 내용을 3000, 4000, 9000 등의 다른 포트로 분산 시켜줄 수 있다.
  • 비동기 이벤트 구조를 기반으로 동작한다.

가장 많이 쓰이는 Apache와 nginx는 차이가 뭔가요?

가장 큰 차이점은 두 서버의 동작 방식이다. Nginx는 Event-Driven 방식으로 작동하고, Apache는 쓰레드 / 프로세스 기반으로 작동한다.

Event-Driven
서버로 들어오는 여러 개의 커넥션을 Event-Handler를 통해 비동기방식으로 처리를 하게 한다.
이러한 방식으로 인해 적은 메모리로 서버를 운영할 수 있다.
싱글 스레드, 프로세스로 작동한다.
socker read / writer, I/O 등 CPU가 관여하지 않아도 되는 작업을 진행할 때는 기다리지 않고 다른 작업을 수행한다. 진행 중인 I/O 등의 작업이 종료되면 이벤트가 발생하며 그 다음 작업 처리를 시작한다.

 

Thread / Process : 
클라이언트의 접속 때마다 Thread 또는 Process를 생성하여 처리한다.
다양한 모듈을 제공하며 확장성이 좋다.
Apache는 접속 때마다 Thread 또는 Process를 생성하기에 많은 수의 요청이 발생하면 속도가 느려지게 된다. 하지만 Nginx는 Event-Listener를 통해 요청 흐름을 처리하기에 많은 수의 요청도 효율적으로 처리할 수 있다.

 

이로인해 엄청난 양의 트래픽을 겪는 웹 서버라면 CPU에 과부하를 줄 수 있는 Apache보단 Nginx가 성능이 더 뛰어나다.