제목
Nginx + Gunicorn 서버 성능 3배 향상 방법
카테고리
인프라/DevOps/보안
서브카테고리
인프라 구성 요소와 상호작용 강조
대상자
- 웹 개발자, DevOps 엔지니어
- Nginx/Gunicorn 서버 구성 및 성능 최적화에 관심 있는 중급자
- Django 애플리케이션 배포 경험자
핵심 요약
- Gunicorn의
--bind 0.0.0.0:8000
설정으로 인한 네트워크 오버헤드가 성능 저하의 주요 원인 - Unix 소켓(
unix:/run/gunicorn.sock
) 사용으로 요청 처리 속도 3배 향상 - Nginx와 Gunicorn 간 통신 방식 변경이 성능 향상의 핵심 기술적 해결책
섹션별 세부 요약
1. 문제 상황 및 초기 설정
- Django 애플리케이션을 CentOS 9 EC2 서버에서 Nginx + Gunicorn으로 호스팅
- 개발 서버 대비 Gunicorn을 통해 요청 처리 시 3배 느림
- 초기 설정: Gunicorn 워커 수 4개, 로그 수준
error
,--bind 0.0.0.0:8000
사용
2. 초기 트러블슈팅 과정
- Gunicorn의
preload
활성화 및 워커 수 증가 시도 - Nginx 설정 검토 후 네트워크 대신 Unix 소켓 사용 가능성 추측
--bind 0.0.0.0:8000
설정이 네트워크 스택 대신 Unix 소켓 사용을 방해하는 것으로 확인
3. 해결 방안 및 구현
- Gunicorn 소켓 서비스 생성:
```systemd
sudo nano /etc/systemd/system/gunicorn.socket
```
ListenStream=/run/gunicorn.sock
지정- Gunicorn 서비스 수정:
```bash
--bind unix:/run/gunicorn.sock
```
- Nginx 설정 변경:
```nginx
proxy_pass http://unix:/run/gunicorn.sock;
```
4. 결과 및 검증
sudo systemctl restart nginx && sudo systemctl restart gunicorn
명령어 실행 후- Postman 테스트 결과: Gunicorn 응답 시간 3배 감소
- Unix 소켓 사용으로 네트워크 오버헤드 제거
결론
- 네트워크 주소 대신 Unix 소켓 사용이 Nginx + Gunicorn 서버 성능 향상의 핵심
--bind
옵션 수정, 소켓 서비스 생성, Nginx proxy_pass 변경을 통해 3배 성능 개선 가능- Unix 소켓은 동일 서버 내 통신 시 네트워크 오버헤드를 최소화하는 효율적인 방식