DJango 서버개발, Django 애플리케이션을 배포하는 방법 (Heroku, AWS, DigitalOcean)

Django는 Python을 기반으로 하는 웹 프레임워크로, 고급 기능을 제공하여 웹 애플리케이션 개발을 빠르고 쉽게 만들어 줍니다. Django를 사용하여 애플리케이션을 개발한 후, 전 세계 사용자들에게 제공하기 위해서는 이를 배포해야 합니다. 이 글에서는 Heroku, AWS, DigitalOcean을 사용하여 Django 애플리케이션을 배포하는 방법에 대해 자세히 설명하겠습니다.

Django 애플리케이션 배포 준비하기

배포를 시작하기 전에, 몇 가지 준비 작업이 필요합니다:

  • 앱의 소스 코드가 로컬에서 잘 작동하고 있는지 확인합니다.
  • 데이터베이스 설정 및 마이그레이션 확인하기.
  • 정적 파일 및 미디어 파일 처리 방법 결정하기.
  • 비밀 키, 데이터베이스 비밀번호와 같은 민감한 데이터를 환경변수로 관리하기.

1. 의존성 관리

Django 애플리케이션에서 사용하는 라이브러리(예: Django, psycopg2 등)의 목록을 requirements.txt 파일에 작성해야 합니다. 이 파일은 다음과 같은 형식으로 작성할 수 있습니다:

django==3.2
gunicorn==20.1
psycopg2-binary==2.9

2. settings.py 수정하기

배포 환경을 위해 settings.py 파일의 몇 가지 설정을 조정해야 합니다:

import os
from urllib.parse import urlparse

# 비밀 키 및 데이터베이스 설정
SECRET_KEY = os.environ.get('DJANGO_SECRET_KEY', 'your-default-secret-key')
DEBUG = os.environ.get('DEBUG', '') != 'False'

# ALLOWED_HOSTS와 데이터베이스 설정
ALLOWED_HOSTS = ['your-heroku-app.herokuapp.com', 'your-aws-app.com']
DATABASE_URL = os.environ.get('DATABASE_URL')

# DATABASES 설정
if DATABASE_URL:
    url = urlparse(DATABASE_URL)
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql',
            'NAME': url.path[1:],  # name은 url의 path에서 가져옴
            'USER': url.username,
            'PASSWORD': url.password,
            'HOST': url.hostname,
            'PORT': url.port,
        }
    }
else:
    # 로컬 데이터베이스 설정
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': BASE_DIR / 'db.sqlite3',
        }
    }

Heroku에 Django 애플리케이션 배포하기

Heroku는 쉽고 빠르게 애플리케이션을 배포할 수 있는 플랫폼입니다.

1. Heroku CLI 설치 및 로그인

먼저 Heroku CLI를 설치하고 로그인합니다:

brew tap heroku/brew && brew install heroku
heroku login

2. Heroku 앱 만들기

Heroku에 새 앱을 만들기 위해 다음 명령어를 입력합니다:

heroku create your-app-name

3. Git에 코드 커밋하기

변경된 코드를 Git에 커밋합니다:

git add .
git commit -m "prepare for deployment"

4. Heroku에 코드 푸시하기

코드를 Heroku에 푸시합니다:

git push heroku master

5. 데이터베이스 마이그레이션

데이터베이스를 마이그레이션합니다:

heroku run python manage.py migrate

6. 정적 파일 수집

정적 파일을 수집하여 배포합니다:

heroku run python manage.py collectstatic --noinput

7. 애플리케이션 실행

이제 애플리케이션이 배포되었습니다. Heroku 대시보드에서 앱을 열어 확인할 수 있습니다.

AWS에 Django 애플리케이션 배포하기

AWS는 다양한 서비스를 제공하여 안정적이고 확장 가능한 애플리케이션 배포를 지원합니다. EC2 인스턴스를 사용하여 Django 애플리케이션을 배포할 수 있습니다.

1. AWS 계정 생성 및 EC2 인스턴스 시작하기

AWS 계정이 없다면 계정을 생성하고 EC2 인스턴스를 시작합니다.

인스턴스 설정 시 Amazon Linux, Ubuntu 등 원하는 OS를 선택할 수 있으며, 인스턴스 유형은 t2.micro를 선택해 무료로 사용 가능합니다.

2. SSH를 통해 EC2 인스턴스에 접속하기

SSH를 사용하여 EC2 인스턴스에 접속합니다:

ssh -i "your-key.pem" ec2-user@your-ec2-public-dns

3. 필수 패키지 설치하기

필요한 패키지를 설치합니다:

sudo yum update -y
sudo yum install python3-pip -y
sudo yum install git -y

4. Django 애플리케이션 복사하기

코드를 EC2 인스턴스로 복사합니다. (예: SFTP, Git 등)

git clone https://github.com/your-repo.git

5. 가상 환경 설정 및 의존성 설치하기

가상 환경을 설정하고 의존성을 설치합니다:

cd your-repo
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt

6. 데이터베이스 설정하기

AWS RDS와 같은 서비스를 사용해 PostgreSQL 데이터베이스를 설정할 수도 있습니다. RDS 인스턴스를 만든 후, connection string을 Django settings.py에 추가합니다.

7. Gunicorn 및 Nginx 설정하기

Gunicorn을 사용하여 Django 서버를 실행합니다:

gunicorn your_project.wsgi:application --bind 0.0.0.0:8000

Nginx를 리버스 프록시로 설정하여 Gunicorn과 함께 사용할 수 있습니다: