CS/모바일웹서비스프로젝트

2. Django 웹 프레임워크

arsenic-dev 2025. 10. 9. 08:37

경희대학교 안기옥 교수님의 모바일/웹서비스프로젝트 수업을 기반으로 정리한 글입니다.

Ch 1. Django란?

Django란 파이썬으로 만들어진 무료 오픈소스 web application framework로, 

쉽고 빠르게 웹사이트를 개발할 수 있도록 돕는 구성요소이다.

 

웹 서버 요청 이후 장고의 역할

1. URL 확인

  • 사용자가 웹 요청을 보냄
    • e.g., 주소창에 example.com/profile 입력tr
  • 요청 받은 주소(URL)를 확인
  • urlresolver는 urls.py에 정의된 URL 패턴 목록을 가져와 들어온 URL과 하나씩 비교

2. view 함수로 전달

  • URL 패턴과 일치하는 것이 있으면 해당 view 함수로 요청 전달
  • view 함수: views.py 안에 개발자가 직접 작성한 함수

3. view 함수에서 처리

  • 필요에 따라 데이터베이스 접근하여 요청 내용 처리
    • 정보 꺼내기 (조회)
    • 정보 수정/삭제 (변경 요청)
  • response 생성하여 사용자의 웹 브라우저에 전송
  • 결과: 사용자의 브라우저 화면에 결과가 표시됨

 

Ch 2. Django 설치

1. 장고를 실행 할 폴더에 "git bash" 창을 킴

2. Django 프로젝트를 위한 가상환경(Virtual environment) 생성

  • 가상환경 생성 이유: Django에서 제공해주는 많은 패키지들을 다운받아야 하는데, 이때 각 프로젝트마다 고립된 개발환경을 설정해 주기 위해선 가상환경을 사용해야 하기 때문이다.
$ python -m venv myvenv # 가상환경 폴더 만들기

$ source myvenv/Scripts/activate # 가상환경 실행하기

(myvenv) ~$ deactivate # 가상환경 나가기

 

3. 장고 설치

(myvenv) ~$ python -m pip install --upgrade pip # -m: module / --upgrade: 최신 버전
(myvenv) ~$ pip install django

 

pip은 파이썬 패키지를 설치하고 관리하는 공식 도구이다.

 

Ch 3. Django 프로젝트

(myvenv) ~$ django-admin startproject mysite . # .은 현재 디렉토리에 프로젝트를 설치하라는 의미

 

django-admin.py 스크립트로 프로젝트에 필요한 디렉토리와 파일들을 생성한다.

 

데이터베이스 생성

(myvenv) ~$ python manage.py migrate

 

웹서버 시작

(myvenv) ~$ python manage.py runserver

 

http://127.0.0.1:8000/ 브라우저에서 확인 가능

 

※ 8000번 포트: 기본 포트

Ch 4. Django 모델

Django 모델

먼저, 객체란 속성과 행동의 모음으로, 속성은 객체 속성(properties), 행위는 메서드(methods)로 구현한다.

장고 안의 모델은 이러한 객체의 특별한 종류로, 모델을 저장하면 그 내용이 데이터베이스에 저장된다.

  • sqlite: 장고의 기본 DB

 

블로그 글을 모델로 만들기

  • 속성
    • 제목, 내용, 작성자
    • 작성일, 수정일, 게시 여부
  • 메서드
    • 게시하기

 

속성은 DB 테이블에 저장되고, 메서드는 테이블의 데이터를 읽거나 변경하는 역할을 한다.

 

APP 생성하기

: 어플리케이션의 기능의 단위

(myvenv) ~$ python manage.py startapp blog

 

앱을 만든 후, 프로젝트 폴더에 생성된 애플리케이션을 등록해야 한다.

mysite/settings.py 편집

 

Model 생성하기

: 모든 Model 객체는 blog/models.py 파일에 선언하여 모델 생성

 

DB에 Model을 위한 Table 생성하기

$ python manage.py makemigrations blog # DB에 새 모델 Post 추가

$ python manage.py migrate blog # 추가된 모델을 DB에 반영

 

Django 관리자

 

 

(myvenv) ~$ python manage.py createsuperuser

 

웹 서버의 슈퍼 사용자(superuser) 생성후,

브라우저의 장고 관리자 페이지에서 superuser로 로그인 한 후 대시보드를 확인하면 위와 같이 나온다.

 

Ch 5. Git을 이용한 배포

현재 사용하고 있는 "http://127.0.0.1/" 는내 PC의 localhost로, 다른 사람이 이용할 수 없다.

다른 사람도 내가 만든 서비스를 이요할 수 있게 하려면 웹 애플리케이션을 배포해 주어야한다.

  • 배포: 웹 애플리케이션을 인터넷에 올려 다른 사람들도 사용 가능하게 하는 것을 말한다.

 

사용될 서비스

  • PythonAnywhere: 방문자가 아주 많지 않은 소규모 애플리케이션을 위한 무료 서비스를 제공
  • GitHub: 코드 호스팅 서비스

 

배포 시나리오

  • 로컬 컴퓨터: 개발 및 테스트를 수행하는 곳
  • GitHub: 개발이 완료된 프로그램 코드 저장
  • PythonAnywhere: GitHub에서 코드를 가져와 실제로 앱을 돌려주는 서버

 

이때, mysite/settings.py 파일에서 "ALLOWED_HOSTS = ['127.0.0.1', '.pythonanywhere.com']" 이렇게 수정하여 설정을 변경해야 pythonanywhere의 호스트 이름과 일치하여 해당 서버로 애플리케이션 배포가 가능하다.

 

※ 정적 웹사이트 (HTML, CSS, JS만 있는 사이트)는 깃허브만으로 배포가 가능하지만, 서버나 DB가 필요한 동적 웹 애플리케이션의 경우엔 깃허브는 코드 저장소 용도고, 실제 배포는 서버(e.g., PythonAnywhere, AWS)랑 연결을 통해 해주어야 한다.

 

1. Git 저장소 만들기

1. # Git 저장소 초기화 (처음 한 번만)
$ git init # 자동으로 master 브랜치가 생성되고, 그 브랜치에 체크아웃됨

2. # 사용자 정보 설정 (전역 1회만)
(master) $ git config --global user.name "arsenic"
(master) $ git config --global user.email "so040103@khu.ac.kr"

3. ".gitignore" 파일 만들기
(master) $ touch .gitignore
(master) $ vim .gitignore

*.pyc
 *~
 __pycache__
 venv
 db.sqlite3 # PythonAnywhere는 다른 데이터베이스를 사용, 때문에 db.sqlite3는 저장소에 추가될 필요 X
 /static
 .DS_Store

4. 상태 확인
(master) $ git status

5. 모든 파일 staging
(master) $git add --all .

6. 첫 커밋"
(master) $git commit -m "My Django Blog app, first commit"

 

※ vim 편집기 사용법: https://arsenic-dev.tistory.com/46

2. GitHub에 코드 배포하기

 

먼저, "new repository"로 저장소 생성 후, 저장소 복제 URL을 다음과 같은 과정으로 복사한다.

 

그후, 내 컴퓨터의 Git 저장소에서 "git bash"를 열어 GitHub에 있는 원격 저장소로 연결한다.

$ git remote add origin https://github.com/<your-github-username>/my-first-blog.git # 원격 저장소 이름을 origin으로 설정
$ git push -u origin master

 

※ -u: --set-upstream의 약자로, 로컬 브랜치가 기본적으로 연결될 원격 브랜치를 설정한다.

 

3. PythonAnywhere에서 배포 준비하기

  • 1) PythonAnywhere에서 무료 계정인 "초보자(Beginner)"로 회원가입 -> 배포 주소 자동 생성
  • 2) PythonAnywhere 사이트에서 로그인 -> Dashboard의 Consoles 페이지 클릭 -> Bash 옵션 선택
  • 3) 콘솔을 통해 GitHub에서 코드 가져오기

pythonanywhere bash console

 

이후, 이어서 pythonanywhere의 Bash console에 가상환경을 생성하여 세팅한다.

$ cd my-first-blog
(master)$ virtualenv --python=/usr/bin/python3.8 venv
(master)$ source venv/bin/activate
(venv) (master)$ pip install --upgrade django

(venv) (master)$ python manage.py migrate # 데이터베이스 생성
(venv) (master)$ python manage.py createsuperuser # 관리자 계정 생성

 

서버에서 앱을 처음 배포하면 로컬에서 했던 것처럼 데이터베이스와 관리자 계정을 생성해야 한다.

이렇게까지 완료하면, 웹앱으로 배포할 준비가 완료된 상태이다.

 

4. PythonAnywhere에서 배포하기

  • 1) PythonAnywhere 사이트에서 로그인 -> Dashboard의 Web apps 페이지 클릭 
  • 2) Add a new web app -> manual configuration(수동설정)에서 python 3.8 선택
  • 3) 가상환경 설정하기
    • Virtualenv 섹션에서 "Enter the path to a virtualenv" 클릭
    • "/home/soyeon/my-first-blog/venv/"로 이동 경로 지정

 

추가로, 장고는 파이썬을 이용한 웹사이트를 서비스하기 위한 표준인 WSGI protocol을 사용해 작동하기 때문에,

WSGI 파일을 설정해 블로그를 PythonAnywhere에서 인식하게 해야 한다.

  • Code 섹션에서 "/var/www/<your-username>_pythonanywhere_com_wsgi.py" 클릭
  • 모든 내용 삭제하고 아래 내용 기입 후 Save
activate_this = '/home/soyeon/my-first-blog/venv/bin/activate_this.py'
with open(activate_this) as file_:
    exec(file_.read(), dict(__file__=activate_this))
import os
import sys
path = '/home/soyeon/my-first-blog'
if path not in sys.path:
    sys.path.append(path)
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
from django.core.wsgi import get_wsgi_application
from django.contrib.staticfiles.handlers import StaticFilesHandler
application = StaticFilesHandler(get_wsgi_application())

 

배포 성공!

 

※ 디버깅 팁: 사이트에 접속했을 때 오류가 확인되면, Web 섹션의 log.files 중 error.log에서 디버깅 정보를 확인할 수 있다.

 

CH 6. URL -> view

1. blog/urls.py

해당 파일 생성

현재는 장고가 찾고 사용하려는 뷰가 아직 없는 상태이다.

 

2. 뷰(biew) 만들기

  • 애플리케이션의 "로직"을 넣는 곳
  • 모델에서 필요한 정보를 받아와서 템플릿에 전달하는 역할

 

 

현재는 장고가 찾고 사용하려는 템플릿이 아직 없는 상태이다.

 

CH 7. HTML 시작하기

템플릿

  • 서로 다른 정보를 일정한 형태로 표시하기 위해 재사용 가능한 파일
  • 장고의 템플릿 양식: HTML

1. 첫 번째 템플릿

 

2. 맞춤형 템플릿

html 파일도 vscode를 통해 수정

 

3. 배포

먼저, 로컬에서 수정한 코드를 Github에 반영(commit, push)한다.

$ git status # 마지막 배포 이후 수정된 파일을 확인
$ git add --all . # git에게 현재 폴더에 있는 모든 변경 내용을 포함
$ git commit -m "Changed the HTML for the site" # github 저장소에 변경 사항을 히스토리에 저장
$ git push # github으로 업로드

 

그후, PythonAnywhere에서 새 코드를 가져온다.

$ git pull # in my-first-blog

 

마지막으로, PythonAnywhere의 Web tab에서 웹 앱을 다시 불러오면(Reload) 새 코드가 반영된 모습을 확인할 수 있다.

'CS > 모바일웹서비스프로젝트' 카테고리의 다른 글

4. Django, 이미지 블로그와 REST API  (0) 2025.10.11
3. Debugging Django with VSCODE  (0) 2025.10.09
1. Git & GitHub  (0) 2025.10.03