Maximize Your Potential

BackEnd

[Python BootCamp]서버와 AWS: Django 기반의 ToDoList 서버 구축하기

maxworld 2024. 8. 18. 10:23
728x90
반응형
서버와 AWS: Django 기반의 ToDoList 서버 구축하기

서버란 무엇인가?

서버는 사용자가 요청하는 데이터를 제공하는 프로그램입니다. 이 서버 프로그램이 실행되는 컴퓨터를 서버 컴퓨터라고 합니다. 서버 컴퓨터는 24시간 365일 동안 항상 켜져 있어야 하며, 정상 작동 상태를 유지해야 합니다. 예를 들어, 집에 있는 컴퓨터에 서버 프로그램을 설치하여 개인 서버로 사용할 수 있지만, 안정적인 운영을 위해서는 데이터센터와 같은 전문 환경에서 서버를 관리하는 것이 바람직합니다.

이러한 이유로, 서버를 대여해주는 서버 호스팅 서비스가 등장했습니다. 서버 호스팅 업체는 서버를 물리적으로 구축하고, 이를 가상화하여 고객에게 제공합니다. 이러한 가상 서버를 가상 머신(Virtual Machine)이라고 합니다. 가상 머신은 한 대의 물리적 서버를 여러 개의 논리적 서버로 분할하여, 각 가상 머신이 별도의 컴퓨터처럼 작동하게 합니다.

이러한 서버 호스팅을 제공하는 대표적인 서비스가 바로 클라우드 컴퓨팅(Cloud Computing)입니다. 클라우드 컴퓨팅은 물리적 서버를 미리 구축해두고, 고객이 필요한 만큼 가상 머신을 생성하여 사용할 수 있도록 지원하는 서비스입니다. 이 과정에서 사용자는 서버 사용 시간과 자원량에 따라 요금을 지불합니다.

AWS란?

AWS(Amazon Web Services)는 Amazon에서 제공하는 클라우드 컴퓨팅 서비스입니다. AWS는 세계에서 가장 널리 사용되는 클라우드 플랫폼 중 하나로, 안정적이고 확장 가능한 컴퓨팅 자원을 제공합니다. AWS와 유사한 서비스로는 Microsoft Azure, Google Cloud Platform(GCP), 그리고 국내의 Ncloud 등이 있습니다.

AWS Lightsail이란?

AWS Lightsail은 AWS에서 제공하는 간단하고 저렴한 클라우드 서비스입니다. 클라우드 컴퓨팅에 필요한 핵심 요소만을 제공하여, 클라우드 서비스를 처음 사용하는 사람도 쉽게 사용할 수 있도록 설계되었습니다. AWS Lightsail은 다음과 같은 상품을 제공합니다.

  • 인스턴스
  • 컨테이너
  • 데이터베이스
  • 네트워킹 (고정 IP, 로드밸런서, DNS 영역 등)
  • 스토리지 (버킷, 디스크)
  • 스냅샷

AWS Lightsail을 이용하여 Django 기반 ToDoList 서버를 구축하는 방법을 설명하겠습니다. AWS Lightsail은 간단한 인터페이스와 저렴한 가격으로 빠르고 쉽게 서버를 생성할 수 있는 서비스로, 특히 클라우드 서비스를 처음 접하는 사용자에게 적합합니다. 이 글에서는 AWS Lightsail을 사용하여 Django 웹 애플리케이션을 배포하는 전체 과정을 다룹니다.

1. AWS Lightsail 설정하기

1.1 AWS Lightsail 인스턴스 생성

  1. AWS Lightsail 로그인
     AWS 계정으로 로그인한 후, AWS Lightsail 콘솔로 이동합니다.
  2. 인스턴스 생성
     Create instance 버튼을 클릭하여 새로운 인스턴스를 생성합니다.
  3. 인스턴스 위치 선택
     서버를 배치할 리전을 선택합니다. 이는 서버의 물리적 위치를 나타내며, 가까운 지역을 선택하는 것이 좋습니다.
  4. 플랫폼 선택
     Linux/Unix를 선택합니다.
  5. Blueprint 선택
     OS Only 탭에서 Ubuntu 22.04 LTS를 선택합니다.
  6. 인스턴스 플랜 선택
    필요에 따라 적절한 플랜을 선택합니다. Django 기반의 웹 애플리케이션의 경우, 기본 플랜(1GB RAM)을 선택해도 무방합니다.
  7. 인스턴스 이름 설정
    인스턴스의 이름을 지정하고 Create instance 버튼을 클릭합니다.

1.2 인스턴스 접속

인스턴스가 생성되면, SSH를 통해 접속할 수 있습니다.

  1. Lightsail 콘솔에서 생성된 인스턴스를 클릭합니다.
  2. Connect using SSH 버튼을 클릭하면 브라우저에서 SSH 터미널이 열립니다.

2. Django 환경 설정

2.1 기본 패키지 설치

SSH로 접속한 후, 다음 명령어를 사용해 기본 패키지들을 설치합니다.

 
sudo apt update 
sudo apt install
python3-pip 
python3-dev libpq-dev nginx curl

2.2 가상 환경 설정

가상 환경을 설정하여 Django와 그 외의 패키지들을 설치합니다.

 
sudo apt install 
python3-venv 
python3 -m venv venv 
source venv/bin/activate

2.3 Django 설치 및 프로젝트 생성

Django를 설치하고 ToDoList 프로젝트를 생성합니다.

 
pip install django 
django-admin startproject todolist 
cd todolist

2.4 데이터베이스 마이그레이션 및 슈퍼유저 생성

python manage.py migrate 
python manage.py createsuperuser

이후, 관리자 계정 정보를 입력합니다.

3. Gunicorn 설정

3.1 Gunicorn 설치 및 테스트

Gunicorn은 WSGI 서버로, Django 애플리케이션을 서비스하기 위해 필요합니다.

pip install gunicorn gunicorn --workers 3 todolist.wsgi
 

이 명령어를 실행하면 Gunicorn이 Django 애플리케이션을 실행합니다. 이 상태에서 서버의 IP 주소로 접근해 웹 애플리케이션이 정상적으로 작동하는지 확인할 수 있습니다.

3.2 Gunicorn Systemd 서비스 설정

서버 재부팅 후에도 Gunicorn이 자동으로 실행되도록 Systemd 서비스를 설정합니다.

 
sudo nano /etc/systemd/system/gunicorn.service

다음 내용을 입력합니다.

[Unit]
Description=gunicorn daemon
After=network.target

[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/home/ubuntu/todolist
ExecStart=/home/ubuntu/venv/bin/gunicorn --workers 3 --bind unix:/home/ubuntu/todolist.sock todolist.wsgi:application

[Install]
WantedBy=multi-user.target

파일을 저장하고 종료한 후, 다음 명령어를 입력합니다.

sudo systemctl start gunicorn
sudo systemctl enable gunicorn

4. Nginx 설정

4.1 Nginx 설치 및 설정 파일 작성

Nginx를 설치하고, Django 애플리케이션에 대한 프록시 설정을 만듭니다.

sudo apt install nginx
sudo nano /etc/nginx/sites-available/todolist

다음 내용을 추가합니다.

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://unix:/home/ubuntu/todolist.sock;
    }
}​

서버 이름은 적절히 수정합니다. 설정을 활성화하고, Nginx를 재시작합니다.

sudo ln -s /etc/nginx/sites-available/todolist /etc/nginx/sites-enabled
sudo nginx -t
sudo systemctl restart nginx

5. 도메인 설정 및 SSL 인증서 적용 (선택 사항)

Lightsail 콘솔에서 고정 IP를 생성하고 도메인에 연결합니다. 이후, Let's Encrypt를 사용해 SSL 인증서를 적용할 수 있습니다.

5.1 Certbot 설치 및 SSL 설정

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com

SSL 인증서 갱신을 위해 Cron 작업을 추가합니다.

sudo crontab -e
15 3 * * * /usr/bin/certbot renew --quiet

 

이제 Django 기반의 ToDoList 웹 애플리케이션이 AWS Lightsail에 성공적으로 배포되었습니다. Lightsail은 사용이 간편하고 저렴하여, 소규모 프로젝트나 빠른 배포를 원하는 개발자들에게 매우 유용한 서비스입니다. 이 가이드를 통해 Django 애플리케이션을 Lightsail에 배포하는 과정을 이해하고, 실제 프로젝트에 적용해보세요.