훈훈훈

Amazon AWS :: EC2 인스턴스에서 Django 배포 본문

인프라/Amazon AWS

Amazon AWS :: EC2 인스턴스에서 Django 배포

훈훈훈 2020. 3. 7. 21:37

이번에 프로젝트를 진행하면서 REST API를 만들어 backend 서버를 AWS를 사용하여 배포하게되었다.

처음에는 로컬 환경에서 진행하듯이 python manage.py runserver 명령어를 사용하였지만, 터미널 종료 후에 서버도 같이 종료되는 현상이 발생하였다.  

 

만약 실제 서비스를 제공하고 있다면 서버가 다운되는 현상은 기업 입장에서 매우 큰 크리티컬일 수 밖에 없다.

따라서 다음과 같은 조건을 만족 시켜야 한다.

 

# Django 배포 조건

1. Terminal 이 종료되어도 서버는 24/365 유지되어야한다.

2. Request 혹은 Response 시 로그가 남아야한다.

 

이제 아래와 같은 배포 방법을 소개하려고 한다.

 

# 배포 방법

1. gunicorn  

- gunicorn 이란 ?

python 언어 상에서 작동하는 HTTP 서버이다. gunicorn을 사용하여 백그라운드 상에서 서버를 데몬으로 실행시킬 수 있다.

gunicorn --bind=0.0.0.0:8000 [AppName].wsgi:application --daemon

 

하지만 gunicorn으로 배포 시 로그는 기록되지 않는 것을 알 수 있다. 

이제 로그를 기록할 수 있는 방법으로 nohup과 gunicorn을 같이 사용하는 방법을 소개하려고 한다.

 

2. nohup

nohup gunicorn --bind 0.0.0.0:8000 [AppName].wsgi:application &

위 명령어 사용 시 디렉터리에 nohup.out이라는 파일이 생성되며 아래와 같이 로그가 남는 것을 알 수 있따.

Failed to find attribute 'apllication' in 'myfaketrip.wsgi'.
[2020-03-07 21:04:22 +0900] [3440] [INFO] Worker exiting (pid: 3440)
[2020-03-07 12:04:23 +0000] [3437] [INFO] Shutting down: Master
[2020-03-07 12:04:23 +0000] [3437] [INFO] Reason: App failed to load.
[2020-03-07 12:05:52 +0000] [3460] [INFO] Starting gunicorn 20.0.4
[2020-03-07 12:05:52 +0000] [3460] [INFO] Listening at: http://0.0.0.0:8000 (3460)
[2020-03-07 12:05:52 +0000] [3460] [INFO] Using worker: sync
[2020-03-07 12:05:52 +0000] [3463] [INFO] Booting worker with pid: 3463
[2020-03-07 21:16:41 +0900] [3463] [INFO] Parent changed, shutting down: <Worker 3463>
[2020-03-07 21:16:41 +0900] [3463] [INFO] Worker exiting (pid: 3463)

Comments