
데브옵스
gunicorn 설정의 A to Z
두줄요약
Django용 WSGI 서버 Gunicorn의 프로세스 구조와 주요 설정을 정리했습니다. 워커·로깅·타임아웃 설정 시 운영 환경에서의 주의점도 설명합니다.
구조와 흐름
- Python 웹 애플리케이션과 서버를 연결하는 WSGI 규약 및 Django의 wsgi.py
- master process의 worker fork·관리와 worker의 애플리케이션 임포트·요청 처리
- sync의 단일 커넥션 처리와 gevent coroutine 기반 다중 커넥션 처리
성능/운영 포인트
- config 파일·명령행 설정 우선순위와 CPU 수 기반 workers 산정
- preload_app, bind, backlog, pidfile, raw_env를 통한 실행 환경과 소켓 관리
- max_requests와 jitter를 활용한 메모리 누수 완화 및 worker 재시작 분산
주의할 점
- reload 상태에서 의존성 설치 전 worker 재시작 시 ModuleNotFoundError와 gunicorn 중단 위험
- Django와 syslog 조합에서 dictConfig 호출에 따른 Bad file descriptor 오류 가능성
- request-line 제한, timeout, backlog를 nginx·로드밸런서 등 앞단 설정과 함께 검토
적용해볼 점
- check_config로 애플리케이션 임포트와 설정 오류 사전 검증
- accesslog 기록을 위한 Django 로거 설정 및 info 수준 errorlog 활용
- 강제 종료에 대비한 DB transaction 구성과 worker class·signal별 graceful_timeout 동작 검증

