반응형
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. 둘의 협업 방식 (흐름도)
- 사용자가 브라우저에서 요청 (예: https://simadang.kr/)
- Nginx가 해당 요청을 수신
- 정적 파일 요청: 직접 /static/, /media/ 경로에서 응답
- 동적 요청: gunicorn.sock으로 연결된 Gunicorn에 전달
- Gunicorn이 Django 앱을 실행하여 응답 생성
- 응답이 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으로 바인딩 | 동일 소켓에 프록시 연결 |
반응형
'컴퓨터 활용 > 노년에 즐기는 코딩' 카테고리의 다른 글
| GCP(Google Cloud Platform)에서 VM 인스턴스 (3) | 2025.07.28 |
|---|---|
| 구글 애드센스 등록에 필요한 ads.txt 설정 (6) | 2025.07.26 |
| AWS에서 멀티 세션 지원 활성화 여부 (3) | 2025.07.23 |
| AWS 로그인 방법 2가지 차이 (3) | 2025.07.22 |
| EC2 인스턴스를 다른 계정에서 사용 (4) | 2025.07.20 |
댓글