백엔드 Back-end/장고 Django

Q. NGINX, gunicorn없이 Django장고만 실행 가능할까?

Tap to restart 2022. 8. 27. 17:00

A. 보통은 Nginx - gunicorn - Django로 구성한다. 보통 권장되지 않지만 Django장고만 실행할 수도 있다. 

로컬에서 테스트할 때처럼 하면 되고 차이점은 서버 실행 명령어다.

 

실행 방법

직접 해보면 잘 된다. 

장고 실행하기

우선 EC2에 장고를 설치하고 실행해보자.

django_minimal을 참고하자.

 

아래 실행 환경은 EC2 Ubuntu 20.04(t2.micro)다. 

 

EC2에 접속해서 아래처럼 진행하면 된다.

$ sudo apt update
$ sudo apt install python3.8-venv
$ mkdir django_minimal
$ cd django_minimal$ 
$ python3 -m venv venv
$ source ./venv/bin/activate
$ pip install django==3.2.12
$ django-admin startproject config .
$ python manage.py migrate
$ python manage.py runserver

이렇게 서버가 실행된 걸 볼 수 있다. 

 

python manage.py runserver로 기본실행하면 기본 host는 127.0.0.1, port는 8000이 된다. 

다른 터미널을 열어서 접속한 다음 curl 127.0.0.1:8000을 실행하자.

아래처럼 <!doctype html> 이렇게 나오면 장고 서버가 해당 ec2에서 작동하고 있다는 뜻이다. 

 

 

우분투 방화벽 열고 EC2 인바운드 규칙 추가하기

우분투 방화벽을 열어 주자.

$ sudo ufw enable
$ sudo ufw allow ssh
$ sudo ufw allow http

AWS EC2 Edit Inbound rules를 눌러서 HTTP, 80포트, Anywhere로 열어주자. 

 

 

앞에서 서버 실행한 명령어를 종료하고 다시 실행하자.

python manage.py runserver 0.0.0.0:80 실행하면 권한이 없다고 나온다.

아래처럼 실행해야 한다.

sudo ./venv/bin/python manage.py runserver 0.0.0.0:80

 

해당 EC2로 접속해보자. 브라우저에서 IP주소를 입력해서 접속할 수 있다. 

 

 

ALLOWED_HOSTS 추가하기

vi ./config/settings.py 명령어로 config 디렉터리 안 settings.py를 열어서 아래처럼 ALLOWED_HOSTS에 ec2의 IP 주소를 추가하자. 내 경우 3.35.154.166라 해당 IP를 추가했다. 

 

 

다시 서버를 실행하고 접속하자.

외부 접속에 성공했다.

 

locust로 테스트 해보기

로컬 컴퓨터에 아래처럼 진행하자. 

locust 공식 문서를 참고하자.

$ mkdir locust_test
$ cd loucst_test
$ python -m venv venv
$ source ./venv/bin/activate
$ pip install locust

 

서버 응답 속도 얻기

locustfile.py 파일을 만들고 아래 내용을 입력하자. 

from locust import HttpUser, task


class HelloWorldUser(HttpUser):
    @task
    def hello_world(self):
        self.client.get("/")

 

locust를 실행하고 http://localhost:8089에 접속하면 화면이 뜬다. 

아래처럼 ec2의 IP주소를 입력하고 users는 100을 입력하자. 

 

 

Start를 누른다!

10만번 요청을 날렸을 때 실패는 없었고 통계는 아래와 같다.