
프론트엔드와 백엔드를 연결하기 위해 Nginx가 사용되는데, 이 스택이 어떠한 것인지 자세히 파헤쳐보겠다.
먼저 웹 서버와 웹 애플리케이션 서버 개념을 알아야하는데,

Web Server
웹 서버는 클라이언트의 요청에 응답하여 웹 페이지를 전달하고, 클라이언트와 통신을 관리한다. 클라이언트가 웹 서버에게 HTTP 요청을 하면, 해당 요청에 대한 처리를 수행하고, 요청된 웹 페이지를 클라이언트에게 전송한다.
웹 서버는 HTML, CSS, 이미지 파일 같은 정적인 파일을 제공한다. (Nginx, Apache 등)
Web Application Server
웹 서버와 달리 웹 애플리케이션 서버는 클라이언트 요청에 대해 동적인 처리를 담당한다. 데이터베이스 연동, 트랜잭션 관리, 보안, 세션 관리 등의 기능을 제공한다.
주로 서버 측에서 처리되는 비지니스 로직이나 데이터베이스와 상호작용을 포함한다.
예) 회원가입/로그인 로직 등
(Apache Tomcat, JBoxx, WebSphere 등)
Nginx
- 높은 성능과 확장성을 가진 오픈 소스 웹 서버
- 리버스 프록시 서버로 동시 접속자 수가 많은 웹 사이트나 웹 애플리케이션에 적합
- 리버스 프록시: 클라이언트의 요청을 백엔드 서버로 전달하고, 백엔드 서버의 응답을 클라이언트에게 전달하는 역할 (동적인 컨텐츠도 처리)
- 경량이면서 빠른 성능 제공, 비동기 Event-Driven 아키텍처를 가지고 있어 많은 동시 연결을 처리
기능
- 로드 밸런싱 - 서버의 부담하는 부하를 분산해주는 장치, 스케일 아웃 방식으로 여러 대의 서버를 두어 확장 시킨다.
- 캐싱 - 이전에 요청된 콘텐츠를 저장하고, 동일 요청 시 저장된 콘텐츠를 빠르게 반환
- SSL/TLS 암호화 - 네트워크 통신에서 보안을 제공하기 위해 사용되는 프로토콜
Nginx는 다양한 운영 체제에서 동작하며, 간단하게 설정이 가능하여 대규모 웹 사이트나 많은 프로젝트에서 널리 사용되고 있다.
동작 방식
웹 서버는 Nginx와 Apache가 주로 사용되는데, 이 두 차이가 분명하다.

Apache
- 클라이언트 요청마다 하나의 프로세스, 스래드가 처리하는 구조
- 처리방식은 Prework와 Worker 방식(MPM) 으로 나뉘어진다.
- prework(멀티 프로세스) : 하나의 자식 프로세스는 하나의 스레드를 가진다. 하나의 요청이 들어오면 독립적인 메모리 공간을 가지는 하나의 자식 프로세스가 생성
- worker(멀티 프로세스 + 멀티 스레드) : 하나의 프로세스가 각각 여러 개의 스레드를 가진다. 하나의 스레드에서 하나의 요청을 처리
- 요청이 많아지면 많은 프로세스, 스레드를 생성하기 때문에 CPU나 메모리 등 부하가 많아지는 문제 (C10K: 1만명의 동시 접속이 일어날 때의 문제)
Nginx
- 멀티 프로세스 싱글 스레드 방식
- 비동기 이벤트 기반 방식으로 서버 자원을 효율적으로 활용할 수 있다.

- 하나의 Master Process와 여러 개의 Worker Process로 구성되어 있으며, Master Process는 설정 파일을 읽거나 검증하며 Worker Process를 관리한다.
- Worker Process는 요청을 처리하고, Event Driven을 활용하여 워커 간에 효율적으로 분산한다.
참고
[Web] Web Server와 WAS의 차이와 웹 서비스 구조
Nginx 동작 방식부터 프록시, 로드밸런서까지