공부/it 개발

PythonAnywhere로 로또 번호 추첨기 배포하기!

묵묵님 2025. 3. 20. 08:09
반응형

PythonAnywhere 소개

  • 클라우드 기반 파이썬 호스팅 서비스:
    웹 앱, 스크립트, 백그라운드 작업(크론 작업) 등을 실행할 수 있는 파이썬 전용 호스팅 플랫폼입니다.
  • 웹 인터페이스 제공:
    웹 대시보드를 통해 파일 관리, 콘솔 접근, 웹 앱 설정, 로그 모니터링 등을 직관적으로 할 수 있습니다.
  • 무료 및 유료 플랜:
    무료 플랜과 다양한 유료 플랜이 있어, 프로젝트 규모와 필요 기능에 따라 선택할 수 있습니다.

장점

  • 사용자 친화적:
    웹 기반 대시보드를 통해 복잡한 서버 설정 없이도 쉽게 애플리케이션을 배포하고 관리할 수 있습니다.
  • 빠른 시작:
    무료 플랜으로도 간단한 웹 앱이나 스크립트를 바로 배포할 수 있으며, GitHub 연동, 가상환경 설정, WSGI 파일 설정 등이 비교적 간단합니다.
  • 자동 백업 및 로그 관리:
    애플리케이션 로그, 에러 로그, 콘솔 접근 등이 제공되어 문제 해결 및 모니터링이 용이합니다.
  • 크론 작업 및 스케줄링:
    주기적인 작업(예: 데이터 업데이트, 백업 등)을 위한 크론 작업을 쉽게 설정할 수 있습니다.

단점 및 무료 서비스 제한

  • 리소스 제한:
    무료 플랜은 CPU, 메모리, 디스크 공간, 동시 접속자 수 등에 제한이 있습니다. 예를 들어, 무료 사용자는 하루에 실행할 수 있는 프로세스 시간이 제한되거나, 특정 용량 이상의 데이터베이스 저장공간을 사용할 수 없습니다.
  • 커스텀 도메인 지원 제한:
    무료 플랜에서는 기본적으로 yourusername.pythonanywhere.com 형식의 도메인만 제공되며, 커스텀 도메인 연결은 유료 플랜에서 지원됩니다.
  • 상시 가동 제한:
    무료 플랜은 24시간 내내 서버가 실행되지 않고, 일정 시간이 지나면 자동으로 슬립 모드로 전환될 수 있습니다. 따라서 항상 대기 상태를 보장하지 않으며, 재접속 시 부팅 시간이 발생할 수 있습니다.
  • 지원 제한:
    무료 사용자는 유료 사용자에 비해 기술 지원이나 SLA(Service Level Agreement)가 제한적일 수 있습니다.

PythonAnywhere 배포 절차

1. 계정 생성 및 로그인

  • PythonAnywhere 웹사이트에 가입 후 로그인합니다.
  • 무료 플랜으로 시작할 수 있지만, 프로젝트 규모에 따라 유료 플랜 업그레이드 고려.

2. 웹 앱 생성

  • Web 탭 선택: PythonAnywhere 대시보드에서 "Web" 탭을 클릭합니다.
  • 새 웹 앱 추가: "Add a new web app" 버튼을 클릭하여 새 웹 애플리케이션을 만듭니다.

Python 버전 선택: 배포할 애플리케이션에 맞는 Python 버전을 선택합니다.

  • Manual configuration: 간단한 웹 앱의 경우 자동 설정 옵션을 선택할 수도 있지만, 커스텀 설정이 필요한 경우 Manual configuration을 선택합니다.

3. 소스 코드 배포

  • Git 리포지토리 클론: Bash 콘솔(또는 터미널)에서 Git 리포지토리를 클론합니다.
git clone https://github.com/your_username/your_repository.git
  • 소스 코드 경로 지정: PythonAnywhere 웹 앱 설정의 "Source code" 항목에 클론한 디렉토리 경로(예: /home/yourusername/your_repository)를 입력합니다.

4. 가상환경 설정

  • 가상환경 생성: Bash 콘솔에서 프로젝트 디렉토리로 이동 후 가상환경을 생성합니다.
cd /home/yourusername/your_repository
python3 -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt
  • 웹 앱 설정에 가상환경 경로 지정: PythonAnywhere의 "Web" 탭에서 "Virtualenv" 필드에 가상환경 경로(예: /home/yourusername/your_repository/venv)를 입력합니다.

 

5. WSGI 파일 설정

  • PythonAnywhere 웹 앱 설정 페이지에서 "WSGI configuration file" 링크를 클릭하여 WSGI 파일을 편집합니다.
  • 예시:  
import os
import sys

# 프로젝트 루트 디렉토리 추가
project_home = u'/home/yourusername/your_repository'
if project_home not in sys.path:
    sys.path.insert(0, project_home)

# 가상환경 자동 활성화를 위해 PythonAnywhere 웹 앱 설정에서 Virtualenv 경로를 지정하면,
# 아래 activate_this.py 호출은 필요 없습니다.
# 혹은 수동으로 site-packages 경로를 추가할 수도 있습니다.
# venv_path = u'/home/yourusername/your_repository/venv'
# site_packages = os.path.join(venv_path, 'lib', 'python3.x', 'site-packages')
# if site_packages not in sys.path:
#     sys.path.insert(0, site_packages)

# DJANGO_SETTINGS_MODULE 설정 (Django 사용 시)
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'your_project.settings')

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

6. 정적 파일 설정

  • Static files:
    웹 앱 설정 페이지에서 "Static files" 섹션을 사용해 정적 파일 URL과 경로를 매핑합니다.
    • 예: URL /static/ → 경로 /home/yourusername/your_repository/static/

7. 웹 앱 Reload 및 테스트

  • PythonAnywhere 웹 앱 설정 페이지에서 "Reload" 버튼을 눌러 애플리케이션을 재시작합니다.
  • 배포된 웹 앱의 URL(예: https://yourusername.pythonanywhere.com)에 접속하여 정상 동작하는지 테스트합니다.

8. 코드 업데이트 및 재배포

  • 로컬에서 코드를 수정한 후 Git에 커밋하고 PythonAnywhere Bash 콘솔에서 git pull 명령어로 최신 코드를 가져옵니다.
  • 변경 후 웹 앱을 다시 Reload하여 업데이트 내용을 반영합니다.

위의 절차에 따라 연습용으로 배포를 한번 진행해봤습니다 :)

로또 번호 추첨기 를 한번 만들어서 배포를 진행해보았는데요, 번호 추첨은 잘 되는데 기존 번호를 불러오는 부분에서 문제가 있더라고요

 

무료 계정으로 작업을 진행하다보니 일부 외부 사이트에 대한 접근이 제한되어서 동행복권 사이트에 접근하여 이전 회차 번호를 불러오는 부분에서 에러가 발생하고 있었습니다

 다음번에는 또 다른 사이트로 연습해서 배포해보도록 하겠습니다 :)

728x90