본문 바로가기
Category/Note

엔진엑스(Nginx)란?

by Corinee 2024. 9. 16.
728x90
반응형

Nginx(엔진엑스)는 가볍고 빠른 웹 서버로, 특히 정적 콘텐츠 제공리버스 프록시, 로드 밸런서로서의 역할에서 뛰어난 성능을 발휘합니다. 2004년에 처음 개발된 Nginx는 높은 동시 접속 처리 능력과 성능 때문에 현재 가장 널리 사용되는 웹 서버 중 하나입니다.

Nginx의 주요 특징

  1. 이벤트 기반 처리: Nginx는 요청을 처리하는 데 비동기 이벤트 기반 방식을 사용합니다. 이는 하나의 스레드에서 여러 요청을 동시에 처리할 수 있도록 하여, 적은 자원으로도 많은 요청을 빠르게 처리할 수 있게 해줍니다. 이 때문에 동시 접속 처리 능력이 매우 뛰어납니다.
  2. 정적 파일 처리: Nginx는 정적 파일(HTML, CSS, 이미지 등)을 제공하는 데 매우 효율적입니다. 파일을 직접 반환하는 작업을 빠르게 처리할 수 있기 때문에, 웹 서버로서의 역할에서 강력한 성능을 발휘합니다.
  3. 리버스 프록시: Nginx는 리버스 프록시 서버로 자주 사용됩니다. 이는 외부에서 들어오는 요청을 받아 내부의 다른 서버(예: Gunicorn, Apache)로 요청을 전달하고, 그 응답을 사용자에게 다시 반환하는 역할을 합니다. 이 방식은 보안성 강화, 성능 향상, 로드 밸런싱 등의 장점을 제공합니다.
  4. 로드 밸런서: Nginx는 로드 밸런싱 기능을 제공합니다. 여러 애플리케이션 서버로 트래픽을 분산시켜 서버에 가해지는 부하를 고르게 배분할 수 있습니다. 이를 통해 시스템 성능과 안정성을 높일 수 있습니다.
  5. HTTPS/SSL 지원: Nginx는 SSL을 통해 HTTPS 보안 연결을 지원하며, 이를 통해 보안이 강화된 웹사이트를 쉽게 구축할 수 있습니다.

Nginx의 역할

Nginx는 다음과 같은 다양한 용도로 사용됩니다:

  1. 정적 웹 서버: Nginx는 HTML, 이미지, CSS, JavaScript 파일 같은 정적 콘텐츠를 매우 빠르게 제공합니다.
  2. 리버스 프록시 서버: Nginx는 클라이언트의 요청을 애플리케이션 서버(Gunicorn, Node.js, Python 서버 등)로 전달하고, 그 응답을 다시 사용자에게 반환합니다.
  3. 로드 밸런서: 여러 애플리케이션 서버로 트래픽을 분산하여 서버에 부하를 줄이고, 트래픽 처리를 고르게 분배합니다.
  4. HTTPS/SSL 설정: Nginx를 통해 SSL 인증서를 설정하여 HTTPS를 지원할 수 있습니다. 이를 통해 사용자와 서버 간의 통신을 암호화하여 안전하게 보호할 수 있습니다.

Nginx의 작동 원리

  1. 클라이언트 요청: 사용자가 웹사이트에 접속하면, Nginx는 이 요청을 처리합니다.
  2. 정적 콘텐츠 제공: 요청이 정적 파일(HTML, 이미지 등)을 요구하는 경우, Nginx는 직접 해당 파일을 찾아 사용자에게 전달합니다.
  3. 동적 콘텐츠 전달: 요청이 동적 콘텐츠(예: 데이터베이스 연동, 사용자 맞춤 페이지)를 요구하는 경우, Nginx는 요청을 내부 애플리케이션 서버로 전달합니다(예: Django의 경우 Gunicorn 서버로).
  4. 응답 반환: 애플리케이션 서버로부터 받은 응답을 Nginx가 클라이언트에게 다시 반환합니다.

Nginx와 Gunicorn의 조합

Nginx와 Gunicorn은 자주 함께 사용됩니다. Nginx는 외부로부터의 요청을 받아 Gunicorn으로 전달하고, Gunicorn은 그 요청을 Python 애플리케이션(Django, Flask 등)에서 처리한 후 Nginx로 응답을 돌려줍니다. 이 조합을 통해 성능과 안정성을 높일 수 있습니다.

요약

  • Nginx는 성능이 뛰어난 웹 서버로, 주로 정적 콘텐츠 제공리버스 프록시, 로드 밸런서 역할을 수행합니다.
  • 비동기 이벤트 기반 처리 방식 덕분에 적은 자원으로도 많은 동시 요청을 처리할 수 있습니다.
  • 리버스 프록시로서 Gunicorn 같은 WSGI 서버와 연동하여 Python 웹 애플리케이션을 효율적으로 배포할 때 자주 사용됩니다.

'Category > Note' 카테고리의 다른 글

PostgreSQL(포스트그레SQL)이란?  (2) 2024.09.16
로그 레벨(Log Level)이란?  (0) 2024.09.16
웹서버(Web Server)란?  (0) 2024.09.16
Gunicorn(Green Unicorn)이란?  (0) 2024.09.16
HTML의 앵커(anchor) 태그  (0) 2024.09.14