본문 바로가기
컴퓨터 활용/노년에 즐기는 코딩

[Django]Gunicorn과 Nginx

by easyfly 2025. 7. 24.
반응형

Gunicorn과 Nginx는 Django 웹 애플리케이션을 효율적이고 안정적으로 서비스하기 위해 함께 사용되는 구성요소입니다. 두 컴포넌트의 역할과 관계를 아래와 같이 상세하게 설명드리겠습니다.


🔧 1. 각자의 역할 요약

구성요소 역할
Gunicorn Python WSGI 애플리케이션 서버. Django 앱을 실행하고 클라이언트 요청을 처리함
Nginx 리버스 프록시 서버. 정적 파일 서비스 및 클라이언트 요청을 Gunicorn으로 전달

🧠 2. Gunicorn이 하는 일

  • WSGI(Web Server Gateway Interface) 기반의 Python 애플리케이션 서버입니다.
  • Django는 자체적으로 웹 서버가 아니므로, 운영환경에서는 Gunicorn 같은 WSGI 서버가 필요합니다.
  • Gunicorn은 다음과 같은 방식으로 Django를 실행합니다:
    • --bind: Gunicorn이 어떤 주소(소켓 또는 포트)에서 대기할지를 지정합니다.
    • simadang.wsgi:application: Django 프로젝트의 WSGI 애플리케이션 객체를 불러와 실행합니다.
  • gunicorn --bind unix:/home/user/project/gunicorn.sock simadang.wsgi:application

📌 단독으로 Gunicorn을 실행해도 웹서버로 작동하지만, 정적 파일 서비스나 보안, 로드밸런싱 등은 제공하지 않습니다.


🌐 3. Nginx가 하는 일

  • 리버스 프록시(reverse proxy) 역할을 합니다.
  • 사용자의 요청을 먼저 받고, 정적 파일이면 바로 응답하고, 동적 요청은 Gunicorn에 전달합니다.
  • 설정 예:
location / {
    proxy_pass http://unix:/home/user/project/gunicorn.sock;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}
  • 보안 기능 (SSL/TLS) 적용도 Nginx가 담당합니다.
  • 캐싱, 부하 분산, 연결 관리에도 뛰어납니다.

🔄 4. 둘의 협업 방식 (흐름도)

  1. 사용자가 브라우저에서 요청 (예: https://simadang.kr/)
  2. Nginx가 해당 요청을 수신
    • 정적 파일 요청: 직접 /static/, /media/ 경로에서 응답
    • 동적 요청: gunicorn.sock으로 연결된 Gunicorn에 전달
  3. Gunicorn이 Django 앱을 실행하여 응답 생성
  4. 응답이 Gunicorn → Nginx → 사용자에게 전달됨

🧱 5. 소켓(UNIX domain socket)의 사용 이유

  • gunicorn.sock은 Gunicorn과 Nginx가 통신하는 전용 통로입니다.
  • 127.0.0.1:8000처럼 TCP를 쓸 수도 있지만, 소켓 방식이 더 빠르고 보안에도 유리합니다.
  • 단, 경로가 정확히 일치해야만 연결이 성립됩니다.

✅ 정리: Gunicorn과 Nginx의 관계

항목 Gunicorn Nginx
주된 역할 Django 실행 (WSGI) 요청 중계, 정적 파일 처리
실행 위치 백엔드 프론트엔드 (사용자와 직접 통신)
정적 파일 처리 안 함 직접 처리 가능
HTTPS 처리 불가 가능 (Let's Encrypt 등)
요청 수신 내부 소켓 또는 포트 외부 요청 수신 (80, 443)
권장 구성 gunicorn.sock으로 바인딩 동일 소켓에 프록시 연결

 

반응형

댓글