AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

제목

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 소켓은 동일 서버 내 통신 시 네트워크 오버헤드를 최소화하는 효율적인 방식