Nginx 파헤치기

JeongJun Min·2024년 2월 8일

Techeer

목록 보기
8/9

프론트엔드와 백엔드를 연결하기 위해 Nginx가 사용되는데, 이 스택이 어떠한 것인지 자세히 파헤쳐보겠다.

먼저 웹 서버와 웹 애플리케이션 서버 개념을 알아야하는데,

Web Server

웹 서버는 클라이언트의 요청에 응답하여 웹 페이지를 전달하고, 클라이언트와 통신을 관리한다. 클라이언트가 웹 서버에게 HTTP 요청을 하면, 해당 요청에 대한 처리를 수행하고, 요청된 웹 페이지를 클라이언트에게 전송한다.
웹 서버는 HTML, CSS, 이미지 파일 같은 정적인 파일을 제공한다. (Nginx, Apache 등)

Web Application Server

웹 서버와 달리 웹 애플리케이션 서버는 클라이언트 요청에 대해 동적인 처리를 담당한다. 데이터베이스 연동, 트랜잭션 관리, 보안, 세션 관리 등의 기능을 제공한다.
주로 서버 측에서 처리되는 비지니스 로직이나 데이터베이스와 상호작용을 포함한다.
예) 회원가입/로그인 로직 등
(Apache Tomcat, JBoxx, WebSphere 등)

Nginx

  • 높은 성능과 확장성을 가진 오픈 소스 웹 서버
  • 리버스 프록시 서버로 동시 접속자 수가 많은 웹 사이트나 웹 애플리케이션에 적합
    • 리버스 프록시: 클라이언트의 요청을 백엔드 서버로 전달하고, 백엔드 서버의 응답을 클라이언트에게 전달하는 역할 (동적인 컨텐츠도 처리)
  • 경량이면서 빠른 성능 제공, 비동기 Event-Driven 아키텍처를 가지고 있어 많은 동시 연결을 처리

기능

  • 로드 밸런싱 - 서버의 부담하는 부하를 분산해주는 장치, 스케일 아웃 방식으로 여러 대의 서버를 두어 확장 시킨다.
  • 캐싱 - 이전에 요청된 콘텐츠를 저장하고, 동일 요청 시 저장된 콘텐츠를 빠르게 반환
  • SSL/TLS 암호화 - 네트워크 통신에서 보안을 제공하기 위해 사용되는 프로토콜

Nginx는 다양한 운영 체제에서 동작하며, 간단하게 설정이 가능하여 대규모 웹 사이트나 많은 프로젝트에서 널리 사용되고 있다.

동작 방식

웹 서버는 NginxApache가 주로 사용되는데, 이 두 차이가 분명하다.

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 동작 방식부터 프록시, 로드밸런서까지

profile
개발계발

0개의 댓글