상용 서버 (UWSGI + NGINX) 구축

개요

기존 Python Flask로 디버깅용 서버를 실행하면, 항상 싱글 스레드로 서버가 작동된다. 본 프로젝트는 서버를 멀티 스레드로 운용을 하기 위해 서버 프레임워크인 UWSGI를 사용했다.

UWSGI는 위에서 구축해 놓은 Ubuntu위에서 진행한다. 보편적인 이유로는 UWSGI가 리눅스에서 더 적합하다는 이유도 있지만, 가장 큰 이유는 Windows는 Python에서 구현한 서버가 UWSGI를 통하여 작동하는 것에 호환이 되지 않는다.

UWSGI 설치 및 구성

pip install uwsgi

UWSGI 설치는 Python의 pip를 통하여 쉽게 설치할 수 있다. 그리고 기존에 구현을 해두었던 Python Flask application을 설치한 UWSGI와 연동해준다. 따라서 앞으로 서버는 방금 연동한 UWSGI를 통하여 실행된다.

uwsgi --socket 0.0.0.0:5000 --protocal=http --wsgi-file wsgi.py
# 연동한 UWSGI 를 통한 서버실행

UWSGI 설정 파일 및 유닉스 소켓 생성

UWSGI는 상용 웹 서버를 구동시키기 위한 프레임워크이기 때문에 각종 다양한 부가 옵션들이 있다. (프로세스/스레드 제어, 소켓 권한, 버퍼 사이 즈, 로그 파일, 서버 모니터링 재시작 등) 때문에 SOOJLE 서비스에 맞게 필요한 부가 기능들을 설정해 주었다.

특히 socket 설정을 보면, 기존 명령에서는 socket 옵션에 IP나 PORT 번호를 입력하여 실행한다. 하지만 위 코드처럼 소켓 파일(유닉스 소켓) 을 사용을 하게 되면 더 좋은 성능을 낼 수 있다.

NginX 설치 및 구성

UWSGI만을 이용하여 서버를 구동하게 되면 유닉스 소켓이기 때문에 HTTP 프로토콜을 사용할 수 없다. 물론, 이외에도 다른 문제점들이 있지만 이번 프로젝트에서는 HTTP 프로토콜을 사용해야 하기 때문에 NginX와 UWSGI를 연결하여 상용 서버를 구동했다.

위에서 만든 SOOJLE.conf 파일을 통해 NginX는 미디어 및 정적 파일에 접 근하여 Flask를 제어할 수 있다. 따라서 해당 설정 파일을 NginX가 사용할 수 있도록 NginX 디렉토리와 SOOJLE.conf 파일을 심볼릭 링크로 이어주면 설정 이 마무리가 된다.

Last updated