100===Dev Ops/Nginx

Nginx 소개 📱

블로글러 2024. 5. 26. 11:07

오늘은 Nginx에 대해 깊이 있게 파헤쳐보겠습니다. Nginx는 가볍고 빠른 웹 서버로 유명하지만, 사실은 웹 서버 이상의 다양한 역할을 수행할 수 있는 강력한 도구입니다.


1. Nginx란? 🤔

Nginx(NGINX라고도 표기)는 2004년 러시아의 소프트웨어 엔지니어 이고르 시쇼브(Igor Sysoev)에 의해 처음 개발된 오픈소스 웹 서버입니다. 아파치(Apache) 웹 서버에 비해 이벤트 기반의 비동기 처리를 구현하여 적은 자원으로도 높은 성능을 낼 수 있다는 점이 가장 큰 특징입니다.

  • 🔹 개념 요약
    웹 서버, 리버스 프록시, 로드 밸런서, 캐싱 서버 등 여러 역할을 수행합니다.
  • 🔹 실생활 예시
    여러분이 자주 방문하는 웹사이트(예: 인터넷 쇼핑몰, 뉴스 사이트 등) 뒤에는 흔히 Nginx가 동작하여 빠르고 안정적인 서비스를 제공합니다.
  • 🔹 어떤 문제를 해결하는지?
    높은 트래픽을 효율적으로 처리하고, 다양한 네트워크 요청(HTTP/HTTPS, TCP/UDP 등)을 빠르게 분산/프록시하거나 캐싱해줌으로써 확장성안정성을 확보할 수 있습니다.

2. 어떻게 동작하나요? 🎬

1) 기본 개념

Nginx는 이벤트 루프 기반(reactor 패턴)을 사용하여, 단일 스레드에서 많은 소켓 연결을 비동기적으로 처리합니다. 이는 블로킹(Blocking) 방식으로 각각의 요청을 스레드에 매핑하는 방식(Apache 등)과 달리, 한정된 자원으로도 동시에 수많은 연결을 처리할 수 있게 해줍니다.

  • Master-Worker 구조
    • Master Process: 설정 파일을 읽고, Worker 프로세스를 실행하며, 작업 환경을 준비합니다.
    • Worker Processes: 실제 요청(HTTP 요청, TCP 연결 등)을 처리합니다.

2) 실제 적용 예시

간단한 웹 서버 설정 예시를 살펴보겠습니다.

# /etc/nginx/nginx.conf (예시)
worker_processes auto;

events {
    worker_connections 1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    # 로그 설정
    access_log  /var/log/nginx/access.log;
    error_log   /var/log/nginx/error.log;

    sendfile        on;
    keepalive_timeout  65;

    # 서버 블록 설정
    server {
        listen       80;            # 80번 포트
        server_name  localhost;     # 서버 도메인(또는 IP)

        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
        }
    }
}
  1. worker_processes auto: CPU 코어 수에 맞춰 Worker 프로세스를 자동 설정.
  2. events 블록: worker_connections는 각 Worker가 동시에 처리할 수 있는 연결 수를 지정.
  3. http 블록: 실제 HTTP 관련 설정(로그, MIME 타입, 서버 블록 등)을 구성.
  4. server 블록: 도메인, 포트, 실제 웹 문서 루트 경로 등을 설정.

🚀 동작 원리

  1. 클라이언트 요청: 사용자가 웹사이트에 접속하면, 브라우저는 HTTPHTTPS 프로토콜을 통해 요청을 보냅니다.
  2. Nginx가 수신: 해당 도메인 혹은 IP와 연결된 포트(80, 443 등)에서 Worker 프로세스가 요청을 확인합니다.
  3. 요청 처리 & 응답: Nginx는 설정에 따라 정적 파일을 반환하거나, 다른 서버(백엔드 서버)로 프록시하여 결과를 받아 클라이언트에게 응답합니다.

3. 주요 장점 🌟

  1. 높은 성능
    이벤트 기반 구조로 동시 연결 수가 매우 많아도 안정적으로 처리합니다.
  2. 낮은 메모리 사용량
    적은 자원으로도 효율적인 요청 처리가 가능하므로, 클라우드 환경이나 서버 자원이 제한적인 환경에서 유리합니다.
  3. 다양한 역할 수행
    리버스 프록시, 로드 밸런서, SSL/TLS 종단, 캐싱 서버 등 다목적 사용이 가능해 인프라 구조를 간단하게 만들 수 있습니다.
  4. 쉬운 설정 확장성
    설정 파일(nginx.conf) 기반으로 확장하기 쉽고, 여러 서버 블록을 두어 멀티사이트 운영도 간단합니다.

4. 주의할 점 ⚠️

  1. 학습 곡선
    설정 파일 구조가 간단하지만, 다양한 기능을 익히기 위해서는 블록 구조(http, server, location 등)와 디렉티브(directive)에 대한 이해가 필요합니다.
  2. 모듈 확장 제약
    Apache에 비해 동적으로 로드 가능한 모듈 구조가 제한적이므로, Nginx를 커스터마이징할 때는 빌드시 모듈 포함 여부 등을 고려해야 합니다.
  3. SSL 설정 시 주의
    HTTPS를 구성하려면 ssl_certificatessl_certificate_key 설정이 필요하며, 보안 표준(TLS 버전, 암호화 스위트 등)에 맞게 업데이트를 주기적으로 해주어야 합니다.

5. 실제 사용 예시 📱

예를 들어, 리버스 프록시(Reverse Proxy)로 동작시키고자 할 때는 다음과 같은 server 블록을 사용할 수 있습니다. 이를 통해 Nginx가 백엔드 서버의 포트(예: 8080)로 요청을 전달해줍니다.

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}
  1. proxy_pass: 백엔드 서버 주소.
  2. proxy_set_header: 요청 헤더 정보를 적절히 설정하여, 백엔드 서버가 원래 클라이언트 정보를 인지할 수 있게 도와줍니다.

6. 마치며 🎁

Nginx는 가벼운 메모리 사용과 뛰어난 성능으로 전 세계 수많은 기업과 개인에게 사랑받는 웹 서버이자 리버스 프록시 솔루션입니다.
이 글을 통해 Nginx가 어떻게 동작하고, 어떤 장점과 주의사항을 지녔는지 살펴봤습니다.
여러분의 프로젝트나 서비스에서 웹 트래픽을 효율적으로 처리하고 싶다면, Nginx를 적극적으로 고려해보세요!
"이 기술을 사용하면 방대한 동시 접속 요청가볍고 빠르게 처리 가능하다는 점이 큰 매력!"


참고 자료 및 출처

728x90