Skip to content

Nginx ‐ Core Concept

woojin edited this page Jul 27, 2026 · 5 revisions

Apache 단점을 해결한 Nginx

  • Nginx로 위와 같은 작업들을 처리할 수 있다.
  • 전통적 Apache(prefork MPM)는 연결 하나 = 프로세스(또는 스레드) 하나 모델이다.
  • 요청 10,000개가 동시에 들어오면 프로세스 10,000개가 필요한데, 프로세스마다 메모리를 수 MB씩 먹고 OS는 그 수만 개를 번갈아 실행하느라 컨텍스트 스위칭 비용이 폭증한다.
  • 동시 접속 1만 개를 감당하지 못하는 이 한계가 그 유명한 C10K 문제이다.
  • 2004년 이고르 시쇼브가 C10K를 풀려고 만든 게 NGINX이고, 핵심은 이벤트 기반(event-driven) + 비동기 논블로킹 I/O이다.
  • 연결마다 프로세스를 만들지 않고, 워커 몇 개(보통 CPU 코어 수)가 이벤트 루프 하나로 수만 개의 연결을 다중화한다.
  • 워커는 어떤 연결이 I/O를 기다리는 동안 멈춰 있지 않고 OS의 이벤트 알림(epoll/kqueue)으로 지금 읽을 수 있는 연결만 골라 처리한다. 이렇게 되면 연결이 늘어도 프로세스 수는 그대로라 메모리가 상수 수준(~100MB)에 머문다.
  • 정적 파일 서빙(Web Server) : HTML·CSS·JS·이미지처럼 계산이 필요 없는 파일을 디스크에서 바로 내보낸다. 이벤트 기반 구조 덕에 WAS를 거치는 것보다 압도적으로 싸고 빠르며, sendfile 같은 커널 기능으로 파일을 유저 공간에 복사하지 않고 소켓으로 직송한다.
  • 리버스 프록시(Reverse Proxy) : 클라이언트의 요청을 대신 받아 뒤의 백엔드 서버로 전달한다. 백엔드의 존재(IP, 포트, 대수)를 바깥에서 숨기는 것이 핵심이다.
  • 로드 밸런싱(Load Balancing) : 리버스 프록시의 확장 개념으로 전달할 백엔드가 여러 대일 때 요청을 분산한다.
  • SSL/TLS 터미네이션 : HTTPS 암호화·복호화를 NGINX가 전담하고, 내부망에서는 평문 HTTP로 통신한다. 이렇게 되면 인증서 관리 지점이 한 곳으로 모여 백엔드 N대에 인증서 배포가 불필요해진다. 암복호화 CPU 비용을 백엔드에서 제거할 수 있게 된다.
  • HTTP 캐시 : 백엔드 응답을 저장해뒀다가 같은 요청에 백엔드를 거치지 않고 응답한다.

Nginx 설치 및 환경 구성

Nginx Context Block

Include와 확장성을 고려하여 추상화 개념을 도입한 Nginx 모듈화 패턴

Nginx 처리량 관점에서의 Process Model Setting

성능을 최적화하는 방법과 설정하기 위한 기본 Nginx Template format

네트워크 전송 관점의 최적화를 위한 Compression Settings Template

📖 Java🔥

📖 Kotlin⭐

📖 Coroutine📎

📖 Spring🔥

📖 Spring Security⭐

📖 Spring Security OAuth2⭐

📖 Spring Batch📎

📖 Database🔥

📖 MySQL🔥

📖 Redis⭐

📖 JPA⭐

📖 QueryDsl📎

📖 MSA⭐

📖 Kafka⭐

📖 Apache Flink📎

  • [Apache Flink - Apache Flink Architecture]
  • [Apache Flink - Stream Processing]
  • [Apache Flink - Data Stream API & Window]
  • [Apache Flink - State Management]

📖 HTTP🔥

📖 AWS⭐

📖 Docker⭐

📖 Kubernetes⭐

📖 Github Actions📎

📖 Jenkins📎

📖 Nginx⭐

📖 Monitoring📎

📖 Test(feat. Load Testing)📎

📖 Test(feat. Java)⭐

📖 Spring AI📎

📖 gRPC📎

  • [gRPC - Writing .proto Files with Protocol Buffers]
  • [gRPC - Various Communication Patterns in gRPC]
  • [gRPC - gRPC Optimization Techniques and Advanced Features]

📖 TDD(Test-Driven-Development)⭐

📖 PostgreSQL📎

  • [PostgreSQL - Docker만을 사용하는 경량화된 환경 구성 방법]
  • [PostgreSQL - PostgreSQL에서 제공하는 데이터 타입]
  • [PostgreSQL - PostgreSQI의 JSONB, 역인덱싱과 활용 방법]
  • [PostgreSQL - 데이터베이스 성능을 위한 최적화 패턴 및 전략]
  • [PostgreSQL - 트랜잭션과 ACID, Isolation 수준별 차이]
  • [PostgreSQL - Database Lock 교착상태와 읽기/쓰기 성능을 보장하는 MVCC 모델]
  • [PostgreSQL - pgvector와 벡터 저장, 유사도 검색 패턴 개념]
  • [PostgreSQL - 벡터 인덱스 최적화와 벡터 검색과 전문 검색 결합 패턴]
  • [PostgreSQL - PostgreSQL 플러그인]
  • [PostgreSQL - PostGIS - 공간 쿼리와 GIST 인덱스, 지리 타입과 공간 쿼리를 위한 타입과 기본 함수]
  • [PostgreSQL - pg_search - 검색 엔진 없이 텍스트 검색 구현과 주의사항]
  • [PostgreSQL - 단일 인스턴스 한계를 극복하는 분산 패턴과 스케줄링, 분산 환경 구축 방법]
  • [PostgreSQL - Citus - 분산 테이블과 분산 쿼리를 위한 Extension과 데이터 분산 처리]
  • [PostgreSQL - pg_cron - PostgreSQL로 구성하는 CronJob]
  • [PostgreSQL - 스케줄러 + 분산 처리를 동시에 도입하는 주기적 집계 쿼리 패턴]

📖 Workflow-Driven Techniques for Large-Scale Traffic Processing📎

  • [Workflow-Driven Techniques for Large-Scale Traffic Processing - Kafka + Debezium을 활용한 CDC 패턴 설계]
  • [Workflow-Driven Techniques for Large-Scale Traffic Processing - Temporal을 활용한 워크플로우 패턴]
  • [Workflow-Driven Techniques for Large-Scale Traffic Processing - Docker와 경량 이미지를 활용한 환경 구축 방법]
  • [Workflow-Driven Techniques for Large-Scale Traffic Processing - Kafka에서의 메시지 Delivery Guarantee]
  • [Workflow-Driven Techniques for Large-Scale Traffic Processing - 실시간 동기화의 핵심 CDC]
  • [Workflow-Driven Techniques for Large-Scale Traffic Processing - MySQL Binary Log 기반의 CDC]
  • [Workflow-Driven Techniques for Large-Scale Traffic Processing - Binary Log 기반의 CDC 구현 플랫폼 Debezium이란?]
  • [Workflow-Driven Techniques for Large-Scale Traffic Processing - Debezium Architecture]
  • [Workflow-Driven Techniques for Large-Scale Traffic Processing - Debezium Architecture Best Practice와 주의사항]

📖 Reactive Programming📎

📖 ElasticSearch📎

📖 Design Pattern📎

📖 Clean Spring📎

  • [Clean Spring - Domain-Driven Development]
  • [Clean Spring - Domain-Driven Development with Design Patterns]
  • [Clean Spring - Developing Membership Application with Hexagonal Architecture]
  • [Clean Spring - JPA and Domain Model Patterns]
  • [Clean Spring - Designing a Consistent Domain Model with Aggregates]
  • [Clean Spring - Web API Adapter]
  • [Clean Spring - Hexagonal Architecture: Ports]
  • [Clean Spring - Hexagonal Architecture: Application Components]
  • [Clean Spring - Test Improvement & Architecture Validation]
  • [Clean Spring - Developing Application Components]
  • [Real MySQL 8.0 - 인덱스]
  • [Real MySQL 8.0 - 실행 계획]
  • [Real MySQL 8.0 - 아키텍처]
  • [Real MySQL 8.0 - 트랜잭션과 잠금]

Clone this wiki locally